Добавление юзера sudo на сервер с авторизацией по SSH ключам

Например мы установили новый сервер и в целях безопасности хотим закрыть авторизацию под 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 и если её там нет добавляем именно так, со слешем впереди. Теперь всё должно работать как надо.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *