ИзползванС Π½Π° SSH Π²ΡŠΡ€Ρ…Ρƒ UNIX сокСт вмСсто sudo Π·Π° избавянС ΠΎΡ‚ suid Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

Π’ΠΈΠΌΠΎΡ‚ΠΈ РавьС (Timothee Ravier) ΠΎΡ‚ компания Red Hat, ΠΌΠ΅ΠΉΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ Fedora Silverblue ΠΈ Fedora Kinoite, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈ Π½Π°Ρ‡ΠΈΠ½ Π·Π° изоставянС Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° sudo, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° suid-Π±ΠΈΡ‚ Π·Π° повишаванС Π½Π° ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈΡ‚Π΅. ВмСсто 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 [Install] WantedBy=sockets.target

/etc/systemd/system/sshd-unix@.service: [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 [Service] ExecStart=-/usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # ΠžΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ PermitRootLogin prohibit-password PasswordAuthentication no PermitEmptyPasswords no GSSAPIAuthentication no # ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ доступ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ AllowUsers root adminusername # ΠžΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ использованиС .ssh/authorized_keys (Π±Π΅Π· .ssh/authorized_keys2 AuthorizedKeysFile .ssh/authorized_keys # Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ sftp Subsystem 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

Π”ΠΎΠΏΡŠΠ»Π²Π°ΠΌΠ΅ /.ssh/config, посочвайки socat ΠΊΠ°Ρ‚ΠΎ прокси Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΏΡ€Π΅Π· UNIX-сокСт: Host host.local User root # ИзползвамС /run/host/run вмСсто /run Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ProxyCommand socat β€” UNIX-CLIENT:/run/host/run/sshd.sock # ΠŸΡŠΡ‚ Π΄ΠΎ SSH ΠΊΠ»ΡŽΡ‡Π° IdentityFile ~/.ssh/keys/localroot # Π’ΠΊΠ»ΡŽΡ‡Π²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° TTY Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π° Ρ‡Π΅Ρ€ΡƒΠΏΠΊΠ° RequestTTY yes # ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°ΠΌΠ΅ излишния ΠΈΠ·Ρ…ΠΎΠ΄ LogLevel QUIET

Π’ тСкущия Π²ΠΈΠ΄ потрСбитСлят adminusername сСга ΠΌΠΎΠΆΠ΅ Π΄Π° изпълнява ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ с ΠΏΡ€Π°Π²Π° root Π±Π΅Π· въвСТданС Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°: $ ssh host.local [root ~]#

БъздавамС Π² bash псСвдоним sudohost Π·Π° стартиранС Π½Π° "ssh host.local" ΠΏΠΎ аналогия с sudo: sudohost() { if [[ ${#} -eq 0 ]]; then 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 само ΠΏΡ€ΠΈ вмъкванС Π½Π° USB Ρ‚ΠΎΠΊΠ΅Π½ Yubikey.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° наличният Yubikey: lsusb -v 2>/dev/null | grep -A2 Yubico | grep "bcdDevice" | awk '{print $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 sk-ecdsa-sha2-nistp256@openssh.com,sk-ssh-ed25519@openssh.com

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°ΠΌΠ΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ UNIX-сокСта само Π½Π° потрСбитСля, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° повишава ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ (Π² нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” adminusername). Π’ /etc/systemd/system/sshd-unix.socket добавямС: [Socket] … SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster