
Бұл постта біз SSH хосттарына аппараттық қауіпсіздік кілттерін офлайн режимде пайдалану арқылы шұғыл қол жеткізу процедурасын әзірлейтін боламыз. Бұл бір ғана тәсіл және сіз оны қажеттіліктеріңізге сай бейімдей аласыз. Біз хосттарымыз үшін SSH сертификатының өкілеттігін аппараттық қауіпсіздік кілтінде сақтаймыз. Бұл схема кез келген дерлік OpenSSH-де, соның ішінде бір рет кіру арқылы SSH-де жұмыс істейді.
Мұның бәрі не үшін? Бұл ең соңғы нұсқа. Бұл қандай да бір себептермен ештеңе жұмыс істемейтін кезде серверге кіруге мүмкіндік беретін бэкдор.
Неліктен төтенше жағдайда қол жеткізу үшін ашық/жеке кілттердің орнына сертификаттарды пайдалану керек?
- Ашық кілттерден айырмашылығы, сертификаттардың қызмет ету мерзімі өте қысқа болуы мүмкін. Сіз 1 минут немесе тіпті 5 секунд жарамды сертификат жасай аласыз. Осы кезеңнен кейін сертификат жаңа қосылымдар үшін жарамсыз болады. Бұл төтенше жағдайда қол жеткізу үшін өте қолайлы.
- Сіз өзіңіздің хосттарыңызда кез келген тіркелгі үшін сертификат жасай аласыз және қажет болған жағдайда әріптестерге осындай «бір реттік» сертификаттарды жібере аласыз.
Сізге не қажет
- Резидентті кілттерді қолдайтын аппараттық қауіпсіздік кілттері.
Резиденттік кілттер толығымен қауіпсіздік кілтінде сақталатын криптографиялық кілттер. Кейде олар әріптік-сандық PIN кодымен қорғалады. Резидентті кілттің жалпы бөлігін жеке кілт дескрипторымен бірге қауіпсіздік кілтінен экспорттауға болады. Мысалы, Yubikey 5 сериялы USB пернелері резиденттік кілттерді қолдайды.Олардың тек хостқа төтенше жағдайда кіруге арналғаны жөн. Бұл жазба үшін мен тек бір кілтті қолданамын, бірақ сақтық көшірме жасау үшін сізде қосымша болуы керек. - Бұл кілттерді сақтайтын қауіпсіз орын.
- OpenSSH версии 8.2 или выше на вашем локальном компьютере и на серверах, к которым вы хотите получить экстренный доступ. Ubuntu 20.04 поставляется с OpenSSH 8.2.
- (міндетті емес, бірақ ұсынылады) Сертификаттарды тексеруге арналған CLI құралы.
Дайындау
Алдымен аппараттық қауіпсіздік кілтінде орналасатын сертификаттау орталығын жасау керек. Кілтті енгізіп, іске қосыңыз:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]Түсініктеме ретінде (-C) мен yubikey-9-512-742@smallstep.com мекенжайын көрсеттім, сондықтан бұл CA қай қауіпсіздік кілтіне тиесілі екенін ұмытпаймын.
Yubikey кілтін қосудан басқа, екі файл жергілікті түрде жасалады:
- sk-user-ca, қауіпсіздік кілтінде сақталған жеке кілтке сілтеме жасайтын кілт дескрипті,
- sk-user-ca.pub, ол сіздің сертификаттау органыңыздың ашық кілті болады.
Бірақ алаңдамаңыз, Yubikey басқа жеке кілтті сақтайды, оны алу мүмкін емес. Сондықтан мұнда бәрі сенімді.
Хосттарда, түбір ретінде, SSHD конфигурацияңызға (/etc/ssh/sshd_config) келесіні қосыңыз (егер әлі жоқ):
TrustedUserCAKeys /etc/ssh/ca.pubСодан кейін хостта /etc/ssh/ca.pub ішіне ашық кілтті (sk-user-ca.pub) қосыңыз.
Демонды қайта іске қосыңыз:
# /etc/init.d/ssh restartЕнді біз хостқа кіруге тырысамыз. Бірақ алдымен сертификат керек. Сертификатпен байланыстырылатын кілттер жұбын жасаңыз:
$ ssh-keygen -t ecdsa -f emergencyСертификаттар және SSH жұптары
Кейде сертификатты жалпы/жеке кілт жұбының орнына пайдалану қызықтырады. Бірақ пайдаланушының аутентификациясы үшін сертификаттың өзі жеткіліксіз. Әрбір сертификатта онымен байланысты жеке кілт бар. Сондықтан біз өзімізге сертификат бермес бұрын осы «төтенше» кілт жұбын жасауымыз керек. Ең бастысы, біз қол қойылған сертификатты серверге көрсетеміз, бізде құпия кілт бар кілттер жұбын көрсетеміз.Осылайша, ашық кілт алмасу әлі де тірі және жақсы. Бұл тіпті сертификаттармен де жұмыс істейді. Сертификаттар сервердің ашық кілттерді сақтау қажеттілігін жояды.
Далее создайте сам сертификат. Мне нужна авторизация пользователя ubuntu в 10-минутном интервале. Вы можете сделать по-своему.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergencyВам будет предложено подписать сертификат с помощью отпечатка пальцев. Вы можете добавить дополнительные имена пользователей, разделенные запятыми, например, -n ubuntu,carl,ec2-user
Болды, енді сізде сертификат бар! Содан кейін дұрыс рұқсаттарды көрсету керек:
$ chmod 600 emergency-cert.pubОсыдан кейін сіз сертификаттың мазмұнын көре аласыз:
$ step ssh inspect emergency-cert.pubМенің түрім мынау:
emergency-cert.pub
Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Key ID: "test-key"
Serial: 0
Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
Principals:
ubuntu
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rcМұнда ашық кілт - біз жасаған төтенше жағдай кілті және sk-user-ca сертификаттау орталығымен байланысты.
Соңында біз SSH пәрменін іске қосуға дайынбыз:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$- Енді сертификаттарыңызға сенетін хосттағы кез келген пайдаланушы үшін сертификаттар жасай аласыз.
- Вы можете удалить emergency. Вы можете сохранить sk-user-ca, но вам это не нужно, поскольку он также находится на ключе безопасности. Возможно, вы также захотите удалить исходный открытый ключ PEM со своих хостов (например, в ~/.ssh/authorized_keys для пользователя ubuntu), если вы использовали его для экстренного доступа.
Төтенше жағдайға қол жеткізу: әрекет жоспары
Қауіпсіздік кілтін қойып, пәрменді іске қосыңыз:
$ ssh-add -KБұл сертификаттау органының ашық кілті мен кілт дескрипторын SSH агентіне қосады.
Енді сертификат жасау үшін ашық кілтті экспорттаңыз:
$ ssh-add -L | tail -1 > sk-user-ca.pubЖарамдылық мерзімі, мысалы, бір сағаттан аспайтын сертификат жасаңыз:
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pubЕнді SSH қайтадан:
$ ssh -i emergency username@hostЕгер .ssh/config файлы қосылу кезінде кейбір ақауларды тудырса, оны айналып өту үшін -F none опциясымен ssh іске қосуға болады. Әріптесіңізге сертификат жіберу қажет болса, ең оңай және қауіпсіз нұсқа . Бұл әрекетті орындау үшін сізге тек екі файл қажет - біздің жағдайда, төтенше және авариялық-cert.pub.
Бұл тәсілдің маған ұнайтыны - аппараттық қолдау. Қауіпсіздік кілттерін сейфке қоюға болады және олар ешқайда кетпейді.
Жарнама құқықтары туралы
Эпикалық серверлер Мүмкін AMD қуатты процессорларымен, процессордың ядросының жиілігі 3.4 ГГц-ке дейін. Максималды конфигурация кез келген дерлік мәселені шешуге мүмкіндік береді - 128 CPU ядросы, 512 ГБ жедел жады, 4000 ГБ NVMe. Бізге қосылыңыздар!
Ақпарат көзі: www.habr.com
