استفاده از SSH روی سوکت یونیکس به جای sudo برای خلاص شدن از شر فایل های suid

Timothee Ravier از Red Hat، نگهدارنده پروژه‌های Fedora Silverblue و Fedora Kinoite، راهی برای جلوگیری از استفاده از ابزار sudo پیشنهاد کرد که از بیت suid برای افزایش امتیازات استفاده می‌کند. به جای sudo، برای یک کاربر معمولی برای اجرای دستورات با حقوق ریشه، پیشنهاد می شود از ابزار ssh با اتصال محلی به همان سیستم از طریق سوکت یونیکس و تأیید مجوزها بر اساس کلیدهای SSH استفاده کند.

استفاده از ssh به جای sudo به شما امکان می دهد از شر برنامه های suid در سیستم خلاص شوید و اجرای دستورات ممتاز را در محیط میزبان توزیع هایی که از اجزای جداسازی کانتینر استفاده می کنند، مانند Fedora Silverblue، Fedora Kinoite، Fedora Sericea و Fedora Onyx فعال کنید. برای محدود کردن دسترسی، تأیید اعتبار با استفاده از یک رمز USB (به عنوان مثال، Yubikey) می تواند علاوه بر این مورد استفاده قرار گیرد.

نمونه ای از پیکربندی اجزای سرور OpenSSH برای دسترسی از طریق یک سوکت محلی یونیکس (یک نمونه sshd جداگانه با فایل پیکربندی خودش راه اندازی می شود):

/etc/systemd/system/sshd-unix.socket: [واحد] توضیحات=OpenSSH سرور Unix Socket Documentation=man:sshd(8) man:sshd_config(5) [سوکت] ListenStream=/run/sshd.sock Accept=yes [نصب] WantedBy=sockets.target

/ etc / systemd / system /[ایمیل محافظت شده]: [Unit] Description=OpenSSH هر اتصال سرور (سوکت یونیکس) 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. 2 AuthorizedKeysFile .ssh /authorized_ keys # enable sftp Subsystem sftp /usr/libexec/openssh/sftp-server

واحد systemd را فعال و راه اندازی کنید: sudo systemctl daemon-reload sudo systemctl فعال کنید — اکنون sshd-unix.socket

کلید SSH خود را به /root/.ssh/authorized_keys اضافه کنید

راه اندازی سرویس گیرنده SSH

ابزار socat را نصب کنید: sudo dnf install socat

ما /.ssh/config را با تعیین socat به عنوان یک پروکسی برای دسترسی از طریق سوکت یونیکس تکمیل می کنیم: Host host.local root User # از /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}\"; exec \»${@}\»» fi }

بررسی: $ sudohost id uid=0(root) gid=0(root) group=0(root)

ما اعتبارنامه‌ها را اضافه می‌کنیم و احراز هویت دو مرحله‌ای را فعال می‌کنیم، و تنها زمانی که رمز یو‌بیکی یو‌بیکی درج شده باشد، اجازه دسترسی ریشه را می‌دهیم.

ما بررسی می کنیم که کدام الگوریتم توسط 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 اضافه می کند

یک نوع کلید binding به پیکربندی sshd اضافه کنید: /etc/ssh/sshd_config_unix: PubkeyAcceptedKeyTypes [ایمیل محافظت شده],[ایمیل محافظت شده]

ما دسترسی به سوکت یونیکس را فقط به کاربری محدود می کنیم که می تواند امتیازات بالاتری داشته باشد (در مثال ما، نام کاربری). در /etc/systemd/system/sshd-unix.socket اضافه کنید: [Socket] ... SocketUser=adminusername SocketGroup=adminusername SocketMode=0660

منبع: opennet.ru

اضافه کردن نظر