مقدمه
قفلکردن password بهتنهایی دسترسی کاربر جداشده را قطع نمیکند؛ کلید SSH، token و نشست فعال ممکن است باقی بمانند. کنترل دسترسی باید به هویت و چرخه عمر متصل شود.
مثال عملی
پشتیبان شیفت باید فقط وضعیت Nginx را بخواند؛ امکان restart یا ویرایش فایل سرویس ندارد. پایان همکاری باید دسترسی bastion و همه VMها را لغو کند.
پیشنیازها
Ubuntu Server 24.04 LTS، Bash 5، systemd؛ package patch را پیش از تغییر با dpkg-query ثبت کنید.
سختافزار و ظرفیت: برای مثال یک VM با ۲ vCPU، ۲ GiB RAM و ۲۰ GiB دیسک؛ این ظرفیت پیشنهادی آزمایشگاه است و sizing سرویس به بار واقعی وابسته است.
نرمافزار و دسترسی: sudo و OpenSSH؛ مدیر دارای console. opsreader و نگاشت مجوز نمونه است؛ دسترسی directory سازمانی نیازمند بررسی SSSD/LDAP همان سازمان است.
Architecture / Design
Identity → group → SSH admission → sudo command allowlist → audit. حساب انسانی از service account جداست؛ برای automation از credential قابل چرخش استفاده میشود.
Installation / Configuration
حساب بدون عضویت sudo ایجاد کنید؛ ابتدا وجود نام را بررسی کنید.
getent passwd opsreader
sudo adduser opsreader
id opsreader
command -v systemctl
sudo visudo -f /etc/sudoers.d/opsreader-nginx
این خط کامل را در فایل قرار دهید؛ مسیر systemctl باید با خروجی میزبان یکسان باشد. --no-pager مانع shell escape از pager میشود.
opsreader ALL=(root) /usr/bin/systemctl --no-pager status nginx.service
sudo chmod 440 /etc/sudoers.d/opsreader-nginx
sudo visudo -cf /etc/sudoers
sudo -l -U opsreader
sudo -u opsreader sudo /usr/bin/systemctl --no-pager status nginx.service
انتظار: syntax OK و فقط همین command مجاز. در سرویس inactive، status کد غیرصفر برمیگرداند و لزوماً خطای permission نیست. آزمون منفی restart نیز باید در staging نشان دهد این مجوز داده نشده است.
Security Hardening
به یک shell، editor، package manager یا wildcard گسترده sudo محدود ندهید؛ بسیاری قابلیت اجرای کد root دارند. حساب سرویس interactive login نداشته باشد. در offboarding کلیدها، عضویت directory، API token، cron، sudo و نشستهای فعال بازبینی شوند؛ passwd -l فقط password را قفل میکند.
Monitoring
journalctl رویدادهای sudo و SSH را به سامانه مرکزی بفرستد. تغییر /etc/passwd، /etc/group و /etc/sudoers.d توسط auditd پایش شود. baseline تعداد حساب دارای UID صفر باید یک مورد مجاز باشد.
Troubleshooting
با sudo -l تفاوت permission و خطای سرویس را جدا کنید. خطای parse با visudo -cf مشخص میشود. کاربری که password قفل دارد ولی login میکند احتمالاً از key استفاده کرده است.
sudo -l -U opsreader
sudo chage -l opsreader
loginctl list-sessions
getent group sudo
sudo journalctl _COMM=sudo -n 50 --no-pager
Access directory را از گروه local تفکیک کنید؛ cache هویت و نشست قدیمی ممکن است تا logout باقی بماند. نشست را فقط پس از تطبیق شناسه کاربر و ارزیابی jobهای در حال اجرا خاتمه دهید.
Backup / Recovery
از policy، UID/GID و مجوزها نسخه کنترلشده بگیرید؛ shadow و private key فقط در مخزن رمزنگاریشده. rollback این grant حذف snippet و validate با visudo است. حذف HOME در offboarding تا پایان retention انجام نشود؛ دسترسی را لغو و داده را طبق مالکیت سازمان تحویل دهید.
Best Practices
مجوز با command دقیق و آزمون منفی تعریف شود. رمز اضطراری به vault، حساب شخصی به directory و تغییرها به ticket متصل باشند.
نسخههای قدیمی و Compatibility
usermod -aG sudo مجوز گسترده میدهد و برای کاربر read-only مناسب نیست. password lock معادل disable همه مسیرهای authentication نیست.
پرسشهای متداول
آیا passwd -l کلید SSH را غیرفعال میکند؟
خیر؛ مسیر کلید و سایر credentialها باید جدا لغو شوند.
چرا --no-pager در sudo لازم است؟
Pager ممکن است امکان اجرای shell با privilege فرمان را فراهم کند.
منابع رسمی
تاریخ بررسی منابع: 2026-09-30. اعتبارسنجی عملی روی محیط هدف باید پیش از انتشار تغییر زیرساخت انجام شود.