Χρησιμοποιώντας SSH σε υποδοχή UNIX αντί για sudo για να απαλλαγείτε από αρχεία suid

Ο Timothee Ravier από την Red Hat, συντηρητής των έργων Fedora Silverblue και Fedora Kinoite, πρότεινε έναν τρόπο αποφυγής χρήσης του βοηθητικού προγράμματος sudo, το οποίο χρησιμοποιεί το bit suid για να κλιμακώσει τα προνόμια. Αντί για sudo, για έναν κανονικό χρήστη να εκτελεί εντολές με δικαιώματα ρίζας, προτείνεται η χρήση του βοηθητικού προγράμματος 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

/ etc / systemd / system /[προστασία μέσω email]: [Μονάδα] Περιγραφή=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 όχι GSSAPIAauthentication όχι # περιορίζει την πρόσβαση σε επιλεγμένους χρήστες AllowUsers root adminusername # Αφήνει μόνο τη χρήση του username root. 2 AuthorizedKeysFile .ssh /authorized_ keys # enable sftp Υποσύστημα sftp /usr/libexec/openssh/sftp-server

Ενεργοποίηση και εκκίνηση της μονάδας systemd: sudo systemctl daemon-reload sudo systemctl enable —τώρα 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

Στην τρέχουσα μορφή του, το όνομα χρήστη διαχειριστή θα μπορεί πλέον να εκτελεί εντολές ως 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) group=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 [προστασία μέσω email],[προστασία μέσω email]

Περιορίζουμε την πρόσβαση στην υποδοχή Unix μόνο στον χρήστη που μπορεί να έχει αυξημένα δικαιώματα (στο παράδειγμά μας, όνομα διαχειριστή). Στο /etc/systemd/system/sshd-unix.socket προσθέστε: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο