Π’ΠΈΠΌΠΎΡΠΈ Π Π°Π²ΡΠ΅ (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/[email protected]: [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 [email protected],[email protected]
ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ Unix-ΡΠΎΠΊΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ°ΡΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ (Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ — adminusername). Π /etc/systemd/system/sshd-unix.socket Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ: [Socket] … SocketUser=adminusername SocketGroup=adminusername SocketMode=0660
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru