Например мы установили новый сервер и в целях безопасности хотим закрыть авторизацию под root, но всё же оставить рабочее пространство в виде папки юзера и необходимые права для работы с сервером по ssh. Или ssh авторизация под root на сервере уже закрыта до нас, и в терминале приходится юзать sudo авторизуясь каждый раз под суперпользователем. Но нам не мешало бы иметь свою историю bash комманд и так сказать свою рабочую область на этом сервере. Добавим пользователя с авторизацией по ключам, при этом предоставив ему необходимые sudo привилегии, не требующие постоянных вводов пароля. Последующие команды следует делать из под root. Поехали:
root@server:~# apt-get -y install sudo pwgen # установим sudo и генератор паролей, если его нет ещё root@server:~# useradd --create-home --uid 12345 --no-user-group --shell /bin/bash sshuser # добавляем нового юзера root@server:~# pwgen --capitalize --numerals --ambiguous --no-vowels 16 1 # генерируем сложный пароль и копируем его root@server:~# passwd sshuser # задаём пароль юзеру root@server:~# echo 'sshuser ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/sshuser # добавляем юзера в sudo и отключаем авторизацию по паролю root@server:~# chmod 0440 /etc/sudoers.d/sshuser # ставим правильные права root@server:~# echo -e 'Match User sshuser\n\tPasswordAuthentication no' >> /etc/ssh/sshd_config # отключаем парольную авторизацию, она теперь доступна только по ssh ключам root@server:~# sudo -u sshuser -i # входим под вновь созданным юзером в его рабочую область
Мы оказались в домашней директории /home/sshuser авторизованы под sshuser, теперь у себя на локальной машине нужно сгенерировать публичный и приватный ssh ключи. Публичный ключ запишем на сервер, а приватный сохраним на локалке и предъявляя его будем авторизовываться. Генерацию пар ключей можно выполнить командой
user@localhost:~$ ssh-keygen -t rsa -b 4096 -f sshuser
Или любым иным ssh клиентом, например PuTTy агентом. Содержимое файла sshuser.pub копируем в буфер обмена и возвращаемся в терминал к только что созданному пользователю sshuser
sshuser@server:~$ mkdir /home/sshuser/.ssh/ # создаём скрытую директорию хранения ключей sshuser@server:~$ chmod 0700 /home/sshuser/.ssh/ # ставим нужные права sshuser@server:~$ echo 'ssh-rsa AAAAB3NzaC1yc2EZXS2R5R4pADXUFZF0Pd6Ot3hVkR+HkUws81zNSwn4GEYNYl27UgPYwIES1UHYRstagApNUbCQcYQUpCQuMgmpcQuC9tzx0Ymn0V0UC34Ph33ekCNoMh1eLuZZzBF6GSU7fTRf9aq1d7RKGkWx48Uoh4LBX6bC0ebjA15jv5upyl9nOUDmizgMItRe6BIgmNtrcbykw7BvCYW9fglRfHY/nIlMqRUIAJv0I2T0FkyRxGpUKJNFw/NU9TM+N2QwdfIeOk9uGnpCYNaMrOMWd8IpIgsQa0G8vZlj06E2q7su0I7nP//9FIagEx2MzWgUoBSnMUNHqaacKt5UFpF4UeFjIAFSIMstc217BScKn6J+/UvtJ3nZ7ezD2Fg8oGY3xtGlEigcSIAkZDVJposXESnmyy5b2XNlYLmI6aDhF/QJLMyqR6/u4RXfAoXOoU/DAJ8kCoi4wMa29KALti/0MSIOltgatetBVz2lAkTrGT7K8bXTfyPRDohS5ao60tDFrdUizMYUViEPvYvy9BZ+wfIEGuPkn4N0tvqSPsYfKC5KKWMw== any comment' > /home/sshuser/.ssh/authorized_keys # вписываем публичный ssh ключ(содержимое sshuser.pub) sshuser@server:~$ chmod 0600 /home/sshuser/.ssh/authorized_keys # ставим права sshuser@server:~$ exit # выходим и возвращаемся в root
Почти готово. Вернувшись в root делаем рестарт ssh сервиса, чтобы подхватились все новые настройки:
root@server:~# systemctl restart sshd
На локалке в ssh клиенте добавляем приватный ключ и авторизуемся под пользователем. А если работаем из лолкального терминала, то:
sshuser@localhost:~$ eval `ssh-agent -s` # стартуем ssh-agent sshuser@localhost:~$ ssh-add ~/sshkeys/sshuser # добавляем ключ в агент sshuser@localhost:~$ ssh [email protected]:22 # подключаемся по ssh с портом 22(или иным)
Пробуем, работают ли sudo привилегии суперпользователя:
sshuser@localhost:~$ sudo whoami
Если система запрашивает пароль, скорей всего в файле /etc/sudoers не прописано включение конфигов из директории /etc/sudoers.d/ тогда пофиксим:
root@server:~# nano /etc/sudoers
ищем в открытом файле строку #includedir /etc/sudoers.d и если её там нет добавляем именно так, со слешем впереди. Теперь всё должно работать как надо.