suid ಫೈಲ್‌ಗಳನ್ನು ತೊಡೆದುಹಾಕಲು sudo ಬದಲಿಗೆ UNIX ಸಾಕೆಟ್‌ನಲ್ಲಿ SSH ಅನ್ನು ಬಳಸುವುದು

Red Hat ನಿಂದ Timothee Ravier, Fedora Silverblue ಮತ್ತು Fedora Kinoite ಯೋಜನೆಗಳ ನಿರ್ವಾಹಕರು, ಸುಡೋ ಉಪಯುಕ್ತತೆಯನ್ನು ಬಳಸುವುದನ್ನು ತಪ್ಪಿಸಲು ಒಂದು ಮಾರ್ಗವನ್ನು ಪ್ರಸ್ತಾಪಿಸಿದರು, ಇದು ಸವಲತ್ತುಗಳನ್ನು ಹೆಚ್ಚಿಸಲು suid ಬಿಟ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. sudo ಬದಲಿಗೆ, ರೂಟ್ ಹಕ್ಕುಗಳೊಂದಿಗೆ ಆದೇಶಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಸಾಮಾನ್ಯ ಬಳಕೆದಾರರಿಗೆ, UNIX ಸಾಕೆಟ್ ಮತ್ತು SSH ಕೀಗಳ ಆಧಾರದ ಮೇಲೆ ಅನುಮತಿಗಳ ಪರಿಶೀಲನೆಯ ಮೂಲಕ ಅದೇ ಸಿಸ್ಟಮ್ಗೆ ಸ್ಥಳೀಯ ಸಂಪರ್ಕದೊಂದಿಗೆ ssh ಉಪಯುಕ್ತತೆಯನ್ನು ಬಳಸಲು ಪ್ರಸ್ತಾಪಿಸಲಾಗಿದೆ.

sudo ಬದಲಿಗೆ ssh ಅನ್ನು ಬಳಸುವುದರಿಂದ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿನ suid ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ತೊಡೆದುಹಾಕಲು ಮತ್ತು ಫೆಡೋರಾ ಸಿಲ್ವರ್‌ಬ್ಲೂ, ಫೆಡೋರಾ ಕಿನೋಯಿಟ್, ಫೆಡೋರಾ ಸೆರಿಸಿಯಾ ಮತ್ತು ಫೆಡೋರಾ ಓನಿಕ್ಸ್‌ನಂತಹ ಕಂಟೇನರ್ ಐಸೋಲೇಶನ್ ಘಟಕಗಳನ್ನು ಬಳಸುವ ವಿತರಣೆಗಳ ಹೋಸ್ಟ್ ಪರಿಸರದಲ್ಲಿ ವಿಶೇಷ ಆಜ್ಞೆಗಳ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಪ್ರವೇಶವನ್ನು ನಿರ್ಬಂಧಿಸಲು, USB ಟೋಕನ್ (ಉದಾಹರಣೆಗೆ, Yubikey) ಬಳಸಿಕೊಂಡು ಅಧಿಕಾರದ ದೃಢೀಕರಣವನ್ನು ಹೆಚ್ಚುವರಿಯಾಗಿ ಬಳಸಬಹುದು.

ಸ್ಥಳೀಯ Unix ಸಾಕೆಟ್ ಮೂಲಕ ಪ್ರವೇಶಕ್ಕಾಗಿ OpenSSH ಸರ್ವರ್ ಘಟಕಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುವ ಉದಾಹರಣೆ (ಪ್ರತ್ಯೇಕ sshd ನಿದರ್ಶನವನ್ನು ತನ್ನದೇ ಆದ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್‌ನೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಲಾಗುವುದು):

/etc/systemd/system/sshd-unix.socket: [ಯುನಿಟ್] ವಿವರಣೆ=OpenSSH ಸರ್ವರ್ Unix ಸಾಕೆಟ್ ಡಾಕ್ಯುಮೆಂಟೇಶನ್=ಮ್ಯಾನ್:sshd(8) ಮನುಷ್ಯ:sshd_config(5) [ಸಾಕೆಟ್] ListenStream=/run/sshd.sock ಸ್ವೀಕರಿಸಿ=ಹೌದು [ಸ್ಥಾಪಿಸು] WantedBy=sockets.target

/ etc / systemd / system /[ಇಮೇಲ್ ರಕ್ಷಿಸಲಾಗಿದೆ]: [ಯುನಿಟ್] ವಿವರಣೆ=OpenSSH ಪ್ರತಿ-ಸಂಪರ್ಕ ಸರ್ವರ್ ಡೀಮನ್ (ಯುನಿಕ್ಸ್ ಸಾಕೆಟ್) ಡಾಕ್ಯುಮೆಂಟೇಶನ್=ಮ್ಯಾನ್:sshd(8) ಮನುಷ್ಯ: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 prohibit-password Password Authentication ಇಲ್ಲ PermitEmptyPasswords ಇಲ್ಲ GSSAPIAದೃಢೀಕರಣ ಯಾವುದೇ # ಆಯ್ದ ಬಳಕೆದಾರರಿಗೆ ಪ್ರವೇಶವನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ ಬಳಕೆದಾರರಿಗೆ ಪ್ರವೇಶವನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ. keys2 AuthorizedKeysFile .ssh /ಅಧಿಕೃತ_ ಕೀಗಳು # sftp ಉಪವ್ಯವಸ್ಥೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ sftp /usr/libexec/openssh/sftp-server

systemd ಘಟಕವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ ಮತ್ತು ಪ್ರಾರಂಭಿಸಿ: sudo systemctl ಡೀಮನ್-ರೀಲೋಡ್ sudo systemctl ಸಕ್ರಿಯಗೊಳಿಸಿ -ಈಗ sshd-unix.socket

ನಿಮ್ಮ SSH ಕೀಯನ್ನು /root/.ssh/authorized_keys ಗೆ ಸೇರಿಸಿ

SSH ಕ್ಲೈಂಟ್ ಅನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ.

socat ಸೌಲಭ್ಯವನ್ನು ಸ್ಥಾಪಿಸಿ: sudo dnf ಇನ್ಸ್ಟಾಲ್ socat

ನಾವು /.ssh/config ಅನ್ನು UNIX ಸಾಕೆಟ್ ಮೂಲಕ ಪ್ರವೇಶಕ್ಕಾಗಿ ಪ್ರಾಕ್ಸಿಯಾಗಿ ಸೂಚಿಸುವ ಮೂಲಕ /.ssh/config ಅನ್ನು ಪೂರೈಸುತ್ತೇವೆ: Host host.local ಬಳಕೆದಾರ ಮೂಲ # ಕಂಟೈನರ್‌ಗಳಿಂದ ಕೆಲಸ ಮಾಡಲು /ರನ್/ರನ್ ಬದಲಿಗೆ /ರನ್/ಹೋಸ್ಟ್/ರನ್ ಅನ್ನು ಬಳಸಿ ProxyCommand socat - UNIX-ಕ್ಲೈಂಟ್: / ರನ್/ ಹೋಸ್ಟ್/ರನ್/sshd.sock # SSH ಕೀ IdentityFile ಗೆ ಮಾರ್ಗ ~/.ssh/keys/localroot # ಸಂವಾದಾತ್ಮಕ ಶೆಲ್‌ಗಾಗಿ TTY ಬೆಂಬಲವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ ವಿನಂತಿ TTY ಹೌದು # ಅನಗತ್ಯ ಔಟ್‌ಪುಟ್ ತೆಗೆದುಹಾಕಿ ಲಾಗ್‌ಲೆವೆಲ್ ಕ್ಯುಐಇಟಿ

ಅದರ ಪ್ರಸ್ತುತ ರೂಪದಲ್ಲಿ, ಬಳಕೆದಾರ ನಿರ್ವಾಹಕ ಹೆಸರು ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸದೆಯೇ ಆಜ್ಞೆಗಳನ್ನು ರೂಟ್ ಆಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ: $ ssh host.local [ರೂಟ್ ~]#

ನಾವು sudo ಅನ್ನು ಹೋಲುವ “ssh host.local” ಅನ್ನು ರನ್ ಮಾಡಲು ಬ್ಯಾಷ್‌ನಲ್ಲಿ sudohost ಅಲಿಯಾಸ್ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ: sudohost() { if [[ ${#} -eq 0 ]]; ನಂತರ ssh host.local "cd \"${PWD}\"; exec \"${SHELL}\" --login" ಬೇರೆ ssh host.local "cd \"${PWD}\"; exec \»${@}\»» fi }

ಪರಿಶೀಲಿಸಿ: $ sudohost id uid=0(root) gid=0(root) ಗುಂಪುಗಳು=0(root)

ನಾವು ರುಜುವಾತುಗಳನ್ನು ಸೇರಿಸುತ್ತೇವೆ ಮತ್ತು ಎರಡು ಅಂಶದ ದೃಢೀಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತೇವೆ, Yubikey USB ಟೋಕನ್ ಅನ್ನು ಸೇರಿಸಿದಾಗ ಮಾತ್ರ ರೂಟ್ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸುತ್ತದೆ.

ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ Yubikey ಯಾವ ಅಲ್ಗಾರಿದಮ್‌ಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನಾವು ಪರಿಶೀಲಿಸುತ್ತೇವೆ: lsusb -v 2>/dev/null | grep -A2 ಯುಬಿಕೊ | 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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ