Π’ΠΈΠΌΠΎΡΠΈ Π Π°Π²ΡΠ΅ (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
