В една HPC инфраструктура, различните класове потребители имат различно ниво на достъпа. Организирането на този достъп изисква различна от стандартната настройка на OpenSSH сървъра. Стандартно, в Linux дистрибуциите CentOS 7 и Scientific Linux 7, потребителсктие OpenSSH ключове се поставят във файла /home/username/.ssh/authorized_keys
(тук "username" трябва да се замести с актуалното име на потребителя). Пак стандартно, собственик на /home/username/.ssh/authorized_keys
трябва да е потребителя, чиято идентичност ще се определя на базата на ключовете в този файл. Причината е, че в процеса на удостоверяване, извършван с посредничеството на OpenSSH сървъра (чиито демон sshd
се изпълнява локално), демонът sshd
създава дъщерен процес, който се изпълнява с правата на потребителя, който ще бъде удостоверен (този механизъм на създаване на дъщерен процес в OpenSSH се нарича "privilege separation").
В сървърските системи, които са част от HPC инфраструктура обаче, потребителските SSH ключове НЕ БИВА да се съхраняват във файловете /home/username/.ssh/authorized_keys
. Причините за това са следните:
- Домашните директории на потребителите се монтират на всеки от изчислителните сървъри, върху които потребителя ще изпълнява задачи. Това означава, че той може да се удостовери и получи достъп до командния интерпретатор на всеки изчислителен сървър, ако OpenSSH сървъра работи базиран на стандартните настройки в
/etc/ssh/sshd_config
. Това е в разрез със сигурността в HPC инфраструктурата.
- Потребителят може да промени съдържанието на
/home/username/.ssh/authorized_keys
и да добави там още ключове, които не са одобрени от администратора на системата. С други думи, даден потребител може да добави "скрито" други потребители, представяйки ги за себе си, без при това да им дава копие от своя OpenSSH частен ключ (препродаване на изчислително време).
Реално, само порталният сървър на HPC инфраструктурата, през който потребителят изпраща задачата към мениджъра на опашката и следователно се удостоверява, трябва да оперира със съдържанието на файловете, които съдържат OpenSSH ключа на даден потребител. Самите изчислителни сървъри не удостоверяват (в повечето случаи) потребителите, доколкото мениджъра за управление на задачите стартира върху тях процеси с правата на съответния потребител и (в повечето случаи) единствената проверка, която се извършва там е дали домашната директория на потребителя присъства (и коя е тя) и какво е неговото UID и GID.
За да се реши този проблем, файловете с ключовете на обикновените потребители трябва да са достъпни за OpenSSH сървъра само на порталния HPC сървър - там, където процеса на удостоверяването се извършва. Съдържанието им трябва да бъде защитено и да не може да се променя от потребителите. То трябва да се управлява от мениджър на ключовете - приложение, което ги синхронизира периодично, изтегляйки ги от LDAP дирекориен сървър, където в DN-обектите на потребителите са добавени съответните SSH ключове (като атрибут). Ако потребителите са малко на брой, това управление може да бъде извършвано и ръчно.
Преди да продължите, направете настройките, които са препоръчани в документа "Настройки на OpenSSH сървър под CentOS 7 и Scientific Linux 7". След това, отворете файла /etc/ssh/sshd_config
и в него намерете следния ред:
AuthorizedKeysFile .ssh/authorized_keys
Преправете го на:
AuthorizedKeysFile /opt/ssh/authorized_keys/%u
и запазете промените. Създайте директорията /opt/ssh/authorized_keys
(за целта ще са ви нужни права на super user) и установете съответните права за достъп:
# mkdir /opt/ssh/authorized_keys
# chmod 755 /opt/ssh/authorized_keys
Рестартирайте демона sshd
:
# systemctl restart sshd
За да тествате дали настройките работят правилно, изберете потребителско име (съществуващо в системата) и създайте за този потребител файл в /opt/ssh/authorized_keys/username
:
# touch /opt/ssh/authorized_keys/username
# chown username:username /opt/ssh/authorized_keys/username
# chmod 600 /opt/ssh/authorized_keys/username
Поставете копие от OpenSSH ключа на потребителя в този файл. След това, направете така, че съдържанието на този файл да не може да бъде променено от потребителя:
# chattr +a /opt/ssh/authorized_keys/username
Проверете дали потребителя може да се удостовери на база своя OpenSSH ключ.
Обърнете внимание, че ако искате да промените пак съдържанието на файла /opt/ssh/authorized_keys/username
, трябва да го направите писаем отново, изпълнявайки:
# chattr -a /opt/ssh/authorized_keys/username