استخدام SSH عبر مقبس UNIX بدلاً من sudo للتخلص من ملفات suid

اقترح تيموثي رافيير من Red Hat، وهو المشرف على مشروعي Fedora Silverblue وFedora Kinoite، طريقة لتجنب استخدام الأداة المساعدة sudo، التي تستخدم البت 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: [الوحدة] الوصف=وثائق مقبس Unix Server OpenSSH=man:sshd(8) man:sshd_config(5) [Socket] الاستماعStream=/run/sshd.sock قبول=نعم [تثبيت] WantedBy=sockets.target

/ الخ / سيستم دي / نظام /[البريد الإلكتروني محمي]: [الوحدة] الوصف= برنامج خادم OpenSSH لكل اتصال (مقبس Unix) الوثائق=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 no PermitEmptyPasswords no GSSAPIAuthentication no # يقيد الوصول إلى مستخدمين محددينAllowUsers root adminusername # يترك فقط استخدام .ssh/authorized_keys (بدون .ssh/authorized_keys2 AuthorizedKeysFile .ssh /authorized_keys # تمكين النظام الفرعي sftp 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 نعم # إزالة الإخراج غير الضروري LogLevel QUIET

في شكله الحالي، سيتمكن اسم المستخدم المسؤول الآن من تنفيذ الأوامر كجذر دون إدخال كلمة مرور. التحقق من العملية: $ 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}\"; إكسيك \»${@}\»» فاي }

تحقق: $ sudohost id uid=0(root) gid=0(root)groups=0(root)

نقوم بإضافة بيانات الاعتماد وتمكين المصادقة الثنائية، مما يسمح بالوصول إلى الجذر فقط عند إدخال رمز Yubikey USB المميز.

نحن نتحقق من الخوارزميات التي يدعمها Yubikey الحالي: lsusb -v 2>/dev/null | grep -A2 يوبيكو | grep "bcdDevice" | أوك '{طباعة $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 فقط للمستخدم الذي يمكنه الحصول على امتيازات مرتفعة (في مثالنا، adminusername). في /etc/systemd/system/sshd-unix.socket أضف: [Socket] ...

المصدر: opennet.ru

إضافة تعليق