ИзползванС Π½Π° SSH ΠΏΡ€Π΅Π· UNIX сокСт вмСсто sudo, Π·Π° Π΄Π° сС ΠΎΡ‚ΡŠΡ€Π²Π΅Ρ‚Π΅ ΠΎΡ‚ suid Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

Π’ΠΈΠΌΡŠΡ‚ΠΈ Π Π°Π²ΠΈΠ΅Ρ€ ΠΎΡ‚ 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 [Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅] WantedBy=sockets.target

/ И Ρ‚.Π½. / systemd / систСма /[ΠΈΠΌΠ΅ΠΉΠ» Π·Π°Ρ‰ΠΈΡ‚Π΅Π½]: [Unit] Description=OpenSSH ΡΡŠΡ€Π²ΡŠΡ€ Π΄Π΅ΠΌΠΎΠ½ Π·Π° всяка Π²Ρ€ΡŠΠ·ΠΊΠ° (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=сокСт

/etc/ssh/sshd_config_unix: # ΠžΡΡ‚Π°Π²Ρ само удостовСряванС Π½Π° ΠΊΠ»ΡŽΡ‡ PermitRootLogin prohibit-password PasswordAuthentication Π½Π΅ PermitEmptyPasswords Π½Π΅ GSSAPIAuthentication Π½Π΅ # ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ ΠΈΠ·Π±Ρ€Π°Π½ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ AllowUsers root adminusername # ΠžΡΡ‚Π°Π²Ρ само ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° .ssh/authorized_keys (Π±Π΅Π· .ssh/authorized_keys2 Автор izedKeysFile .ssh /authorized_ keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-ΡΡŠΡ€Π²ΡŠΡ€

АктивирайтС ΠΈ стартирайтС ΠΌΠΎΠ΄ΡƒΠ»Π° 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 Π΄Π° # ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° нСнуТния ΠΈΠ·Ρ…ΠΎΠ΄ LogLevel QUIET

Π’ ΡΠ΅Π³Π°ΡˆΠ½Π°Ρ‚Π° си Ρ„ΠΎΡ€ΠΌΠ° потрСбитСлят adminusername Π²Π΅Ρ‡Π΅ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° изпълнява ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΊΠ°Ρ‚ΠΎ 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 '{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 [ΠΈΠΌΠ΅ΠΉΠ» Π·Π°Ρ‰ΠΈΡ‚Π΅Π½],[ΠΈΠΌΠ΅ΠΉΠ» Π·Π°Ρ‰ΠΈΡ‚Π΅Π½]

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€