ΠšΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° 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 / систСм /[Π·Π°ΡˆΡ‚ΠΈΡ‚Π΅Π½Π° ΠΏΠΎ Π΅-ΠΏΠΎΡˆΡ‚Π°]: [Π•Π΄ΠΈΠ½ΠΈΡ†Π°] Опис=OpenSSH Π·Π° сСрвСрски Π΄Π΅ΠΌΠΎΠ½ Π·Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ (ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ Π·Π° Unix) Documentation=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: # ΠžΡΡ‚Π°Π²Π° само Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΊΠ»ΡƒΡ‡ΠΎΡ‚ PermitRootLogin Π·Π°Π±Ρ€Π°Π½ΠΈ-Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° PasswordAuthentication Π±Π΅Π· PermitEmptyPasswords Π±Π΅Π· GSSAPIAΠ°Π²Ρ‚Π΅Π½Ρ‚ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π΅ΠΌΠ° # Π³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π° пристапот Π΄ΠΎ ΠΈΠ·Π±Ρ€Π°Π½ΠΈΡ‚Π΅ корисници AllowUsers root adminusername # Ја остава само ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° root. 2 AuthorizedKeysFile .ssh /authorized_ keys # enable sftp ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌ sftp /usr/libexec/openssh/sftp-сСрвСр

ΠΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ја ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅ ја систСмската Π΅Π΄ΠΈΠ½ΠΈΡ†Π°: 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 ΠšΠΎΡ€ΠΈΡΠ½ΠΈΡ‡ΠΊΠΈ ΠΊΠΎΡ€Π΅Π½ # ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ‚Π΅ /run/host/run намСсто /run Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ ProxyCommand socat - UNIX-CLIENT: / run/ host/run/sshd.sock # ΠŸΠ°Ρ‚Π΅ΠΊΠ° Π΄ΠΎ ΠΊΠΎΠΏΡ‡Π΅Ρ‚ΠΎ SSH IdentityFile ~/.ssh/keys/localroot # ОвозмоТи ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° TTY Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° школка RequestTTY Π΄Π° # ΠžΡ‚ΡΡ‚Ρ€Π°Π½ΠΈ Π½Π΅ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅Π½ ΠΈΠ·Π»Π΅Π· LogLevel QUIET

Π’ΠΎ ΡΠ΅Π³Π°ΡˆΠ½Π°Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ°, корисничкото администраторско ΠΈΠΌΠ΅ сСга ќС ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΊΠ°ΠΊΠΎ 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) Π³Ρ€ΡƒΠΏΠΈ=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 само Π½Π° корисникот кој ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π·Π³ΠΎΠ»Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ (Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ΅ Π½Π° администратор). Π’ΠΎ /etc/systemd/system/sshd-unix.socket Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Π˜Π·Π²ΠΎΡ€: opennet.ru

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€