通过 UNIX 套接字使用 SSH 而不是 sudo 来删除 suid 文件

Red Hat 的 Timothee Ravier 是 Fedora Silverblue 和 Fedora Kinoite 项目的维护者,他提出了一种避免使用 sudo 实用程序的方法,该实用程序使用 suid 位来升级权限。对于普通用户以 root 权限执行命令,建议使用 ssh 实用程序来代替 sudo,通过 UNIX 套接字本地连接到同一系统,并基于 SSH 密钥验证权限。

使用 ssh 代替 sudo 可以让您摆脱系统上的 suid 程序,并允许在使用容器隔离组件的发行版(例如 Fedora Silverblue、Fedora Kinoite、Fedora Sericea 和 Fedora Onyx)的主机环​​境中执行特权命令。为了限制访问,可以另外使用使用 USB 令牌(例如 Yubikey)的权限确认。

配置 OpenSSH 服务器组件以通过本地 Unix 套接字进行访问的示例(将使用其自己的配置文件启动单独的 sshd 实例):

/etc/systemd/system/sshd-unix.socket: [单位] 描述=OpenSSH 服务器 Unix 套接字文档=man:sshd(8) man:sshd_config(5) [套接字] ListenStream=/run/sshd.sock Accept=yes [安装] WantedBy=sockets.target

/ etc / systemd / system /[电子邮件保护]: [Unit] 描述=OpenSSH 每个连接服务器守护进程(Unix 套接字) 文档=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [Service] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # 只保留密钥身份验证 PermitRootLogin Prevent-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # 限制对选定用户的访问 AllowUsers root adminusername # 只保留使用 .ssh/authorized_keys(不带 .ssh/authorized_keys2 AuthorizedKeysFile .ssh) /authorized_keys # 启用 sftp 子系统 sftp /usr/libexec/openssh/sftp-server

激活并启动 systemd 单元: sudo systemctl daemon-reload sudo systemctl enable —now sshd-unix.socket

将您的 SSH 密钥添加到 /root/.ssh/authorized_keys

设置 SSH 客户端。

安装 socat 实用程序: sudo dnf install socat

我们通过指定 socat 作为通过 UNIX 套接字访问的代理来补充 /.ssh/config: Host host.local User root # 使用 /run/host/run 而不是 /run 从容器中工作 ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # SSH 密钥的路径 IdentityFile ~/.ssh/keys/localroot # 启用交互式 shell 的 TTY 支持 RequestTTY yes # 删除不必要的输出 LogLevel QUIET

在当前形式中,用户 adminusername 现在能够以 root 身份执行命令,而无需输入密码。检查运行情况: $ ssh host.local [root ~]#

我们在 bash 中创建一个 sudohost 别名来运行“ssh host.local”,类似于 sudo: sudohost() { if [[ ${#} -eq 0 ]];然后 ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\";执行 \»${@}\»» fi }

检查: $ sudohost id uid=0(root) gid=0(root) groups=0(root)

我们添加凭据并启用双因素身份验证,仅在插入 Yubikey USB 令牌时才允许 root 访问。

我们检查现有 Yubikey 支持哪些算法: lsusb -v 2>/dev/null | grep -A2 尤比科 | grep“bcdDevice”| awk '{打印$2}'

如果输出为 5.2.3 或更高版本,则在生成密钥时使用 ed25519-sk,否则使用 ecdsa-sk: ssh-keygen -t ed25519-sk 或 ssh-keygen -t ecdsa-sk

将公钥添加到 /root/.ssh/authorized_keys

将密钥类型绑定添加到 sshd 配置: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [电子邮件保护],[电子邮件保护]

我们将对 Unix 套接字的访问限制为只有可以提升权限的用户(在我们的示例中为 adminusername)。在 /etc/systemd/system/sshd-unix.socket 中添加: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

来源: opennet.ru

添加评论