suid рдлрд╛рдЗрд▓реНрд╕рдкрд╛рд╕реВрди рдореБрдХреНрдд рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА sudo рдРрд╡рдЬреА UNIX рд╕реЙрдХреЗрдЯрд╡рд░ SSH рд╡рд╛рдкрд░рдгреЗ

Red Hat рдордзреАрд▓ Timothee Ravier, Fedora Silverblue рдЖрдгрд┐ Fedora Kinoite рдкреНрд░рдХрд▓реНрдкрд╛рдВрдЪреЗ рджреЗрдЦрднрд╛рд▓ рдХрд░рдгрд╛рд░реЗ, sudo рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЪрд╛ рд╡рд╛рдкрд░ рдЯрд╛рд│рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдорд╛рд░реНрдЧ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдЬреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рдврд╡рдгреНрдпрд╛рд╕рд╛рдареА suid рдмрд┐рдЯ рд╡рд╛рдкрд░рддреЗ. sudo рдЪреНрдпрд╛ рдРрд╡рдЬреА, рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдиреЗ рд░реВрдЯ рдЕрдзрд┐рдХрд╛рд░рд╛рдВрд╕рд╣ рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, UNIX рд╕реЙрдХреЗрдЯрджреНрд╡рд╛рд░реЗ рд╕рдорд╛рди рдкреНрд░рдгрд╛рд▓реАрд╢реА рд╕реНрдерд╛рдирд┐рдХ рдХрдиреЗрдХреНрд╢рдирд╕рд╣ ssh рдЙрдкрдпреБрдХреНрддрддрд╛ рд╡рд╛рдкрд░рдгреЗ рдЖрдгрд┐ SSH рдХреАрдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рдкрд░рд╡рд╛рдирдЧреНрдпрд╛рдВрдЪреЗ рд╕рддреНрдпрд╛рдкрди рдХрд░рдгреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЖрд╣реЗ.

sudo рдРрд╡рдЬреА ssh рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдиреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд┐рд╕реНрдЯреАрдорд╡рд░реАрд▓ suid рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рдкрд╛рд╕реВрди рдореБрдХреНрддреА рдорд┐рд│рддреЗ рдЖрдгрд┐ Fedora Silverblue, Fedora Kinoite, Fedora Sericea рдЖрдгрд┐ Fedora Onyx рд╕рд╛рд░рдЦреЗ рдХрдВрдЯреЗрдирд░ рдЖрдпрд╕реЛрд▓реЗрд╢рди рдШрдЯрдХ рд╡рд╛рдкрд░рдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рддрд░рдгрд╛рдЪреНрдпрд╛ рд╣реЛрд╕реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЖрджреЗрд╢рд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рдХреНрд╖рдо рдХрд░рддреЗ. рдкреНрд░рд╡реЗрд╢ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдпреВрдПрд╕рдмреА рдЯреЛрдХрди (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдпреБрдмрд┐рдХреА) рд╡рд╛рдкрд░реВрди рдкреНрд░рд╛рдзрд┐рдХрд░рдгрд╛рдЪреА рдкреБрд╖реНрдЯреА рдЕрддрд┐рд░рд┐рдХреНрддрдкрдгреЗ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ.

рд╕реНрдерд╛рдирд┐рдХ рдпреБрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯрджреНрд╡рд╛рд░реЗ рдкреНрд░рд╡реЗрд╢рд╛рд╕рд╛рдареА OpenSSH рд╕рд░реНрд╡реНрд╣рд░ рдШрдЯрдХ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг (рд╕реНрд╡рдд:рдЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓рд╕рд╣ рд╕реНрд╡рддрдВрддреНрд░ sshd рдЙрджрд╛рд╣рд░рдг рд▓рд╛рдБрдЪ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓):

/etc/systemd/system/sshd-unix.socket: [Unit] рд╡рд░реНрдгрди=OpenSSH рд╕рд░реНрд╡реНрд╣рд░ рдпреБрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯ рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рди=man:sshd(8) man:sshd_config(5) [рд╕реЙрдХреЗрдЯ] ListenStream=/run/sshd.sock Accept=yes [рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рд╛] WantedBy=sockets.target

/ рдЗрддреНрдпрд╛рджреА / рдкреНрд░рдгрд╛рд▓реА / рдкреНрд░рдгрд╛рд▓реА /[рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд]: [рдпреБрдирд┐рдЯ] рд╡рд░реНрдгрди=рдУрдкрдирдПрд╕рдПрд╕рдПрдЪ рдкреНрд░рддрд┐-рдХрдиреЗрдХреНрд╢рди рд╕рд░реНрд╡реНрд╣рд░ рдбрд┐рдорди (рдпреБрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯ) рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рди=man:sshd(8) man:sshd_config(5) Wants=sshd-keygen.target After=sshd-keygen.target [рд╕реЗрд╡рд╛] ExecStart=- /usr/sbin/sshd -i -f /etc/ssh/sshd_config_unix StandardInput=socket

/etc/ssh/sshd_config_unix: # рдлрдХреНрдд рдХреА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЛрдбрддреЗ рдкрд░рдорд┐рдЯрд░реВрдЯрд▓реЙрдЧрд┐рди рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд-рдкрд╛рд╕рд╡рд░реНрдб рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╛рд╣реА рдкрд░рдорд┐рдЯEmptyPasswords рдирд╛рд╣реА GSSAPIA рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╛рд╣реА # рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдЕрдиреБрдорддреА рджреЗрддреЗ рд░реВрдЯ рдкреНрд░рд╢рд╛рд╕рдХрдирд╛рд╡ # рдлрдХреНрдд рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЛрдбрддреЗ. 2 рдЕрдзрд┐рдХреГрдд рдХреАрдЬ рдлрд╛рдЗрд▓ .ssh /рдЕрдзрд┐рдХреГрдд_рдХреА # sftp рд╕рдмрд╕рд┐рд╕реНрдЯрдо sftp /usr/libexec/openssh/sftp-рд╕рд░реНрд╡реНрд╣рд░ рд╕рдХреНрд╖рдо рдХрд░рд╛

systemd рдпреБрдирд┐рдЯ рд╕рдХреНрд░рд┐рдп рдЖрдгрд┐ рд▓рд╛рдБрдЪ рдХрд░рд╛: sudo systemctl deemon-reload sudo systemctl enable тАФрдЖрддрд╛ sshd-unix.socket

рддреБрдордЪреА SSH рдХреА /root/.ssh/authorized_keys рд╡рд░ рдЬреЛрдбрд╛

SSH рдХреНрд▓рд╛рдпрдВрдЯ рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ.

socat рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛: sudo dnf socat рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛

рдЖрдореНрд╣реА /.ssh/config рд▓рд╛ UNIX рд╕реЙрдХреЗрдЯрджреНрд╡рд╛рд░реЗ рдкреНрд░рд╡реЗрд╢рд╛рд╕рд╛рдареА рдкреНрд░реЙрдХреНрд╕реА рдореНрд╣рдгреВрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВрди /.ssh/config рдкреБрд░рд╡рддреЛ: рд╣реЛрд╕реНрдЯ host.local рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд░реВрдЯ # рдХрдВрдЯреЗрдирд░рдордзреВрди рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА /рд░рди рдРрд╡рдЬреА /run/host/run рд╡рд╛рдкрд░рд╛ ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # SSH рдХреА IdentityFile рдЪрд╛ рдорд╛рд░реНрдЧ ~/.ssh/keys/localroot # рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡реНрд╣ рд╢реЗрд▓рд╕рд╛рдареА TTY рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдХрд░рд╛ RequestTTY рд╣реЛрдп # рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛рдврд╛ LogLevel QUIET

рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдлреЙрд░реНрдордордзреНрдпреЗ, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░рд╢рд╛рд╕рдХ рдирд╛рд╡ рдЖрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдПрдВрдЯрд░ рди рдХрд░рддрд╛ рд░реВрдЯ рдореНрд╣рдгреВрди рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓. рдСрдкрд░реЗрд╢рди рддрдкрд╛рд╕рдд рдЖрд╣реЗ: $ssh host.local [рд░реВрдЯ ~]#

рдЖрдореНрд╣реА "ssh host.local" рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА bash рдордзреНрдпреЗ sudohost рдЙрдкрдирд╛рд╡ рддрдпрд╛рд░ рдХрд░рддреЛ, 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(рд░реВрдЯ) gid=0(рд░реВрдЯ) рдЧрдЯ=0(рд░реВрдЯ)

рдЖрдореНрд╣реА рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓реНрд╕ рдЬреЛрдбрддреЛ рдЖрдгрд┐ рдЯреВ-рдлреЕрдХреНрдЯрд░ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░рддреЛ, рдЬреЗрд╡реНрд╣рд╛ 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 [рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд],[рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд]

рдЖрдореНрд╣реА рдпреБрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯрдЪрд╛ рдкреНрд░рд╡реЗрд╢ рдХреЗрд╡рд│ рдЕрд╢рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЛ рдЬреНрдпрд╛рдВрдирд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рдврд╡рд▓реЗ тАЛтАЛтАЛтАЛрдЬрд╛рдК рд╢рдХрддрд╛рдд (рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдкреНрд░рд╢рд╛рд╕рдХрд╛рдЪреЗ рдирд╛рд╡). /etc/systemd/system/sshd-unix.socket рдордзреНрдпреЗ рдЬреЛрдбрд╛: [рд╕реЙрдХреЗрдЯ] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛