ИзползванС Π½Π° 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