แž€แžถแžšแž”แŸ’แžšแžพ SSH แž›แžพแžšแž“แŸ’แž’ UNIX แž‡แŸ†แž“แžฝแžŸแžฑแŸ’แž™ sudo แžŠแžพแž˜แŸ’แž”แžธแž€แž˜แŸ’แž…แžถแžแŸ‹แžฏแž€แžŸแžถแžš suid

Timothee Ravier แž˜แž€แž–แžธ Red Hat แžŠแŸ‚แž›แž‡แžถแžขแŸ’แž“แž€แžแŸ‚แžšแž€แŸ’แžŸแžถแž‚แž˜แŸ’แžšแŸ„แž„ Fedora Silverblue แž“แžทแž„ Fedora Kinoite แž”แžถแž“แžŸแŸ’แž“แžพแžœแžทแž’แžธแžŠแžพแž˜แŸ’แž”แžธแž‡แŸ€แžŸแžœแžถแž„แž€แžถแžšแž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แžงแž”แž€แžšแžŽแŸแž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹ sudo แžŠแŸ‚แž›แž”แŸ’แžšแžพ suid bit แžŠแžพแž˜แŸ’แž”แžธแž”แž„แŸ’แž€แžพแž“แžŸแžทแž‘แŸ’แž’แžทแŸ” แž‡แŸ†แž“แžฝแžŸแžฑแŸ’แž™ sudo แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž’แž˜แŸ’แž˜แžแžถแžŠแžพแž˜แŸ’แž”แžธแž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžŠแŸ‚แž›แž˜แžถแž“แžŸแžทแž‘แŸ’แž’แžทแž‡แžถ root แžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แžŸแŸ’แž“แžพแžฑแŸ’แž™แž”แŸ’แžšแžพแžงแž”แž€แžšแžŽแŸแž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹ ssh แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแžแž—แŸ’แž‡แžถแž”แŸ‹แž˜แžผแž›แžŠแŸ’แž‹แžถแž“แž‘แŸ…แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŠแžผแž…แž‚แŸ’แž“แžถแžแžถแž˜แžšแž™แŸˆแžšแž“แŸ’แž’ UNIX แž“แžทแž„แž€แžถแžšแž•แŸ’แž‘แŸ€แž„แž•แŸ’แž‘แžถแžแŸ‹แž€แžถแžšแžขแž“แžปแž‰แŸ’แž‰แžถแžแžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพแž‚แŸ’แžšแžถแž”แŸ‹แž…แžปแž… SSH แŸ”

แž€แžถแžšแž”แŸ’แžšแžพ ssh แž‡แŸ†แž“แžฝแžŸแžฑแŸ’แž™ sudo แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แžขแŸ’แž“แž€แž€แž˜แŸ’แž…แžถแžแŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธ suid แž“แŸ…แž›แžพแž”แŸ’แžšแž–แŸแž“แŸ’แž’ แž“แžทแž„แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แžถแžšแž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž“แŸƒแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžŠแŸ‚แž›แž˜แžถแž“แžŸแžทแž‘แŸ’แž’แžทแž“แŸ…แž€แŸ’แž“แžปแž„แž”แžšแžทแž™แžถแž€แžถแžŸแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž“แŸƒแž€แžถแžšแž…แŸ‚แž€แž…แžถแž™แžŠแŸ‚แž›แž”แŸ’แžšแžพแžŸแž˜แžถแžŸแž’แžถแžแžปแžŠแžถแž…แŸ‹แžŠแŸ„แž™แžกแŸ‚แž€แž€แžปแž„แžแžบแž“แŸแžšแžŠแžผแž…แž‡แžถ Fedora Silverblue, Fedora Kinoite, Fedora Sericea แž“แžทแž„ Fedora Onyx แŸ” แžŠแžพแž˜แŸ’แž”แžธแžšแžนแžแž”แž“แŸ’แžแžนแž„แž€แžถแžšแž…แžผแž›แž”แŸ’แžšแžพ แž€แžถแžšแž”แž‰แŸ’แž‡แžถแž€แŸ‹แž–แžธแžŸแžทแž‘แŸ’แž’แžทแžขแŸ†แžŽแžถแž…แžŠแŸ„แž™แž”แŸ’แžšแžพแžŸแž‰แŸ’แž‰แžถแžŸแž˜แŸ’แž„แžถแžแŸ‹ USB (แžงแž‘แžถแž แžšแžŽแŸ Yubikey) แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแž”แž“แŸ’แžแŸ‚แž˜แŸ”

แžงแž‘แžถแž แžšแžŽแŸแž“แŸƒแž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžŸแž˜แžถแžŸแž—แžถแž‚แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ OpenSSH แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž…แžผแž›แž”แŸ’แžšแžพแžแžถแž˜แžšแž™แŸˆแžšแž“แŸ’แž’ Unix แž˜แžผแž›แžŠแŸ’แž‹แžถแž“ (แžงแž‘แžถแž แžšแžŽแŸ sshd แžŠแžถแž…แŸ‹แžŠแŸ„แž™แžกแŸ‚แž€แž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž‡แžถแž˜แžฝแž™แžฏแž€แžŸแžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžšแž”แžŸแŸ‹แžœแžถแž•แŸ’แž‘แžถแž›แŸ‹)แŸ–

/etc/systemd/system/sshd-unix.socket: [Unit] Description=OpenSSH Server Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [Socket] ListenStream=/run/sshd.sock Accept=yes [แžŠแŸ†แžกแžพแž„] WantedBy=sockets.target

/ etc / systemd / system /[แžขแŸŠแžธแž˜แŸ‚แž›แž€แžถแžšแž–แžถแžš]: [Unit] Description=OpenSSH per-connection server daemon (Unix socket) Documentation=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [แžŸแŸแžœแžถแž€แž˜แŸ’แž˜] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # แž‘แžปแž€แžแŸ‚แž€แžถแžšแž•แŸ’แž‘แŸ€แž„แž•แŸ’แž‘แžถแžแŸ‹แž€แžผแž“แžŸแŸ„ PermitRootLogin แž แžถแž˜แžƒแžถแžแŸ‹-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # แžŠแžถแž€แŸ‹แž€แž˜แŸ’แžšแžทแžแž€แžถแžšแž…แžผแž›แž”แŸ’แžšแžพแžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แžŠแŸ‚แž›แž”แžถแž“แž‡แŸ’แžšแžพแžŸแžšแžพแžŸ AllowUsers root adminusername # แž‘แžปแž€แžแŸ‚แž€แžถแžšแž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹ .skey/Authentication/authorized แŸ” .ssh /authorized_ keys # แž”แžพแž€ sftp แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžšแž„ sftp /usr/libexec/openssh/sftp-server

แž’แŸ’แžœแžพแžฑแŸ’แž™แžŸแž€แž˜แŸ’แž˜ แž“แžทแž„แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžฏแž€แžแžถแž”แŸ’แžšแž–แŸแž“แŸ’แž’แŸ– sudo systemctl daemon-reload sudo systemctl แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžš โ€”แžฅแžกแžผแžœแž“แŸแŸ‡ sshd-unix.socket

แž”แž“แŸ’แžแŸ‚แž˜แžŸแŸ„ SSH แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แž‘แŸ… /root/.ssh/authorized_keys

แž€แžถแžšแžŠแŸ†แžกแžพแž„แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž‰แŸ€แžœ SSH แŸ”

แžŠแŸ†แžกแžพแž„แžงแž”แž€แžšแžŽแŸแž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹ socatแŸ– sudo dnf แžŠแŸ†แžกแžพแž„ socat

แž™แžพแž„แž”แŸ†แž–แŸแž‰แž”แž“แŸ’แžแŸ‚แž˜ /.ssh/config แžŠแŸ„แž™แž”แž‰แŸ’แž‡แžถแž€แŸ‹ socat แž‡แžถแž”แŸ’แžšแžผแž€แžŸแŸŠแžธแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž…แžผแž›แž”แŸ’แžšแžพแžแžถแž˜แžšแž™แŸˆแžšแž“แŸ’แž’แž™แžผแž“แžธแž€แŸ– แž˜แŸ‰แžถแžŸแŸŠแžธแž“ host.local User root # แž”แŸ’แžšแžพ /run/host/run แž‡แŸ†แž“แžฝแžŸแžฑแŸ’แž™ /run to work from containers ProxyCommand socat - UNIX-CLIENT: / run/host/run/sshd.sock # แž•แŸ’แž›แžผแžœแž‘แŸ…แž€แžถแž“แŸ‹แž€แžผแž“แžŸแŸ„ SSH IdentityFile ~/.ssh/keys/localroot # แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž‡แŸ†แž“แžฝแž™ TTY แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŸแŸ‚แž›แžขแž“แŸ’แžแžšแž€แž˜แŸ’แž˜ RequestTTY yes # แž™แž€แž…แŸแž‰แž“แžผแžœแž›แž‘แŸ’แž’แž•แž›แžŠแŸ‚แž›แž˜แžทแž“แž…แžถแŸ†แž”แžถแž…แŸ‹ LogLevel QUIET

แž“แŸ…แž€แŸ’แž“แžปแž„แž‘แž˜แŸ’แžšแž„แŸ‹แž”แž…แŸ’แž…แžปแž”แŸ’แž”แž“แŸ’แž“แžšแž”แžŸแŸ‹แžœแžถ แžˆแŸ’แž˜แŸ„แŸ‡แžขแŸ’แž“แž€แž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž“แžนแž„แžขแžถแž…แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž‡แžถ root แžŠแŸ„แž™แž˜แžทแž“แž…แžถแŸ†แž”แžถแž…แŸ‹แž”แž‰แŸ’แž…แžผแž›แž–แžถแž€แŸ’แž™แžŸแž˜แŸ’แž„แžถแžแŸ‹แŸ” แž€แŸ†แž–แžปแž„แž–แžทแž“แžทแžแŸ’แž™แž˜แžพแž›แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแŸ– $ssh host.local [root ~]#

แž™แžพแž„แž”แž„แŸ’แž€แžพแžแžˆแŸ’แž˜แŸ„แŸ‡แž€แŸ’แž›แŸ‚แž„แž€แŸ’แž›แžถแž™ sudohost แž‡แžถ bash แžŠแžพแž˜แŸ’แž”แžธแžŠแŸ†แžŽแžพแžšแž€แžถแžš โ€œssh host.localโ€ แžŠแŸ‚แž›แžŸแŸ’แžšแžŠแŸ€แž„แž‘แŸ…แž“แžนแž„ sudo: sudohost() { if [[${#} -eq 0 ]]; แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€ ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" else ssh host.local "cd \"${PWD}\"; exec \ยป${@}\ยปยป fi }

แž–แžทแž“แžทแžแŸ’แž™แŸ– $ sudohost id uid=0(root) gid=0(root) groups=0(root)

แž™แžพแž„แž”แž“แŸ’แžแŸ‚แž˜แž–แŸแžแŸŒแž˜แžถแž“แžŸแž˜แŸ’แž„แžถแžแŸ‹ แž“แžทแž„แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แžถแžšแž•แŸ’แž‘แŸ€แž„แž•แŸ’แž‘แžถแžแŸ‹แž–แžธแžšแž€แžแŸ’แžแžถ แžŠแŸ‚แž›แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แž…แžผแž›แž”แŸ’แžšแžพแž‡แžถ root แžแŸ‚แž“แŸ…แž–แŸแž›แž”แž‰แŸ’แž…แžผแž›แž“แžทแž˜แžทแžแŸ’แžแžŸแž‰แŸ’แž‰แžถ Yubikey USB แž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡แŸ”

แž™แžพแž„แž–แžทแž“แžทแžแŸ’แž™แž˜แžพแž›แžแžถแžแžพแž€แŸ’แž”แžฝแž“แžŠแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž˜แžฝแž™แžŽแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž‚แžถแŸ†แž‘แŸ’แžšแžŠแŸ„แž™ Yubikey แžŠแŸ‚แž›แž˜แžถแž“แžŸแŸ’แžšแžถแž”แŸ‹แŸ– lsusb -v 2>/dev/null | grep -A2 Yubico | 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 แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžแŸ‚แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แžŠแŸ‚แž›แžขแžถแž…แž˜แžถแž“แžŸแžทแž‘แŸ’แž’แžทแž€แžพแž“แžกแžพแž„ (แž€แŸ’แž“แžปแž„แžงแž‘แžถแž แžšแžŽแŸแžšแž”แžŸแŸ‹แž™แžพแž„ แžˆแŸ’แž˜แŸ„แŸ‡แžขแŸ’แž“แž€แž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„)แŸ” แž“แŸ…แž€แŸ’แž“แžปแž„ /etc/systemd/system/sshd-unix.socket แž”แž“แŸ’แžแŸ‚แž˜แŸ– [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

แž”แŸ’แžšแž—แž–: opennet.ru

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹