透過 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 #root​​.ssh/authorized_sh/authorr. 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

添加評論