لینوکس ۳۰۳؛ شب ۱۶: SSH CA؛ کلید تازه بدون کپی روی صد سرور
فهرست نوشته
هر بار عضوی به تیم اضافه میشود، باید کلیدش را روی تمام سرورها بنویسیم؟ گواهی SSH میتواند این چرخه را سادهتر کند. امشب یک کاربر و یک host را با CAهای جدا گواهی میکنیم و محدودیت زمان و نام را آزمایش میکنیم.
این جلسه بخشی از دورهٔ لینوکس ۳۰۳ در ۴۰ شب است.
محیط تمرین: OpenSSH روی srv و client؛ کلید کاربر شب پانزدهم؛ محیط CA جدا و کلیدهای مخصوص آزمایشگاه.
جایگاه در دوره: هدفهای 332.1 آزمون 303-300.
این گواهی X.509 نیست#
گواهی OpenSSH قالب خودش را دارد؛ آن را با گواهی HTTPS یا openssl ca نمیسازیم. principal مشخص میکند گواهی برای کدام نام یا هویت پذیرفته شود؛ بازهٔ اعتبار و شمارهٔ سریال برای کنترل چرخهٔ دسترسی مهماند. کلید CA کاربر را از CA میزبان جدا نگه دار تا نقشها مخلوط نشوند.
در حساب مخصوص CA:
umask 077
mkdir -p ~/lpic303/ssh-ca
cd ~/lpic303/ssh-ca
ssh-keygen -t ed25519 -f user_ca -C 'Lab user CA'
ssh-keygen -t ed25519 -f host_ca -C 'Lab host CA'
برای هر دو گذرواژه بگذار. فایل عمومی lpic303_student.pub را از client به این پوشه کپی کن؛ کلید خصوصی کاربر نیاز نیست.
ssh-keygen -s user_ca -I student-session-1 -z 1 \
-n student -V -5m:+1h lpic303_student.pub
ssh-keygen -L -f lpic303_student-cert.pub
گواهی خروجی را کنار کلید کاربر روی client بگذار. روی srv، user_ca.pub را در مسیر /etc/ssh/lpic303_user_ca.pub نصب کن و این گزینه را به تنظیم SSH اضافه کن:
TrustedUserCAKeys /etc/ssh/lpic303_user_ca.pub
اگر AuthorizedPrincipalsFile تعریف نشده باشد، principal باید با نام حساب ورود سازگار باشد. بعد از sshd -t و reload، ورود را با CertificateFile صریح آزمایش کن:
ssh -i ~/.ssh/lpic303_student \
-o CertificateFile=~/.ssh/lpic303_student-cert.pub student@192.168.56.10
برای اثبات استفاده از گواهی، کلید خام را در Clone از authorized_keys کنار بگذار؛ وگرنه موفقیت ورود ممکن است از کلید خام باشد. گواهی principal اشتباه یا منقضی باید رد شود؛ ساعت دو طرف مهم است.
گواهی میزبان#
کلید عمومی host سرور را به CA منتقل کن و نام میزبان واقعی آزمایشگاه را گواهی کن:
ssh-keygen -s host_ca -I srv-host -z 1 -h \
-n srv.example.test -V -5m:+1d ssh_host_ed25519_key.pub
خروجی روی srv نصب و با HostCertificate معرفی میشود. روی client، نام srv.example.test را در /etc/hosts به IP سرور وصل کن و یک سطر @cert-authority srv.example.test همراه محتوای واقعی host_ca.pub در known_hosts بنویس. اتصال با IP بهجای نام گواهی، آزمون همان principal نیست.
پایان دسترسی#
گواهی کوتاهعمر فرصت سوءاستفاده را محدود میکند؛ برای ابطال زودتر، OpenSSH از KRL، یعنی فهرست ابطال کلید، و RevokedKeys پشتیبانی میکند. از ssh-keygen -k روی فایلهای آزمایشگاهی استفاده و با -Q بررسی کن. برای بازگشت، تنظیم CA و host certificate آزمایشگاه را از کنسول حذف، validate و reload کن.
خودآزمایی: چرا کپیکردن کلید خصوصی CA روی تمام سرورها، مزیت این معماری را از بین میبرد؟ مرجع گزینههای صدور و KRL: ssh-keygen .