AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 793251
Accepted
MysteryMoose
MysteryMoose
Asked: 2025-04-03 05:32:57 +0800 CST2025-04-03 05:32:57 +0800 CST 2025-04-03 05:32:57 +0800 CST

SElinux 阻止来自 SystemD 服务的 SSH

  • 772

背景

我正在通过 SystemD 设置基于 SSH 服务的 rsync 备份。由于本地 SElinux 的问题,此操作最终无法运行;以下是可复现的最小示例:

[Unit]
Description=Rsync backup service

[Service]
Type=oneshot
User=myuser
ExecStart=/usr/bin/ssh -vvv 192.168.1.10 "ls -lah"

如果我setenforce 0在启动服务之前一切正常,我就能得到请求的目录列表。但如果 SElinux 正在强制执行,我就会收到来自 SystemD 的错误:

Starting backup.service - Rsync backup service...
backup.service: Main process exited, code=exited, status=203/EXEC
backup.service: Failed with result 'exit-code'.
Failed to start backup.service - Rsync backup service

同样,如果我通过带有 rsync 的 SystemD 运行,我会看到子进程以 -13 终止:

rsync: [sender] Failed to exec /usr/bin/ssh: Permission denied (13)

我已检查过的内容

  • 无论 SElinux 的强制状态如何,从终端运行时所有命令都会按预期工作。

  • 我正在以我的用户身份运行(ExecStart=/usr/bin/whoami):

    whoami[726624]: myuser
    
  • 我可以访问 ssh 二进制文件(ExecStart=/usr/bin/which ssh):

    which[727067]: /usr/bin/ssh
    
  • 我可以访问我的用户.ssh目录(由于显而易见的原因,不发布该目录的日志)。

  • 根据这篇SO 帖子,SElinux 可以阻止非标准端口。我只允许使用标准端口(rsync 会使用其他端口吗?),但这应该没问题,因为基本测试用例没有使用其他端口:

    # semanage port -l | grep ssh
    ssh_port_t                     tcp      22
    

问题

尽管使用标准端口并且对所涉及的文件拥有完全权限,什么原因会导致 SElinux 仅阻止来自 SystemD 的 SSH 尝试?

编辑1

明确检查拒绝消息:

# ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR
...
type=AVC msg=audit(1743626691.891:17160): avc:  denied  { execute } for  pid=728337 comm="(ssh)" name="ssh" dev="dm-0" ino=3077371 scontext=system_u:system_r:init_t:s0 tcontext=system_u:object_r:ssh_exec_t:s0 tclass=file permissive=0
# journalctl -t setroubleshoot
-- No entries --
# dmesg | grep -i -e type=1300 -e type=1400
#

我承认,我的 SElinux 不太好,我不太确定该怎么办。我翻阅了文档,但有时……文档……真的……冗长。

ssh
  • 1 1 个回答
  • 29 Views

1 个回答

  • Voted
  1. Best Answer
    Hauke Laging
    2025-04-04T02:21:39+08:002025-04-04T02:21:39+08:00

    我无法提供所有相关细节 - 我正在阅读我的第一本 SElinux 书籍......

    基本问题是您的 systemd 单元没有在与您的终端相同的 SElinux 环境中运行。

    您可以从审计消息中看到尝试了什么但失败了:

    scontext=system_u:system_r:init_t:s0
    tcontext=system_u:object_r:ssh_exec_t:s0
    

    因此,正如预期的那样,该单元运行(启动),init_t然后尝试域转换ssh_exec_t(要执行的二进制文件的上下文)。

    我看到两种方法:

    1. 以不受限制的方式运行设备(如果可能的话)
    2. 调整 SELinux 策略以允许这种转换。

    我从这个答案中得知,有一种间接的方法可以不受限制地运行单元:使用调用ssh并将脚本标记为的包装脚本bin_t。

    允许政策转型

    这超出了我目前对 SELinux 的了解。我发现这可能很简单,但我不知道这个建议是否正确。

    • 1

相关问题

  • 为什么 ssh 实用程序被视为 pty?

  • Auto-SSH 手动工作,但不在后台工作

  • 远程运行 X 应用程序,在远程主机上运行 GUI [关闭]

  • rsync 端口 22 和 873 使用

  • SCP突然中止:管道损坏,消息验证码不正确

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve