15

Я настроил .ssh/ авторизованный_кей и могу войти в систему с новым "пользователем", используя паб / закрытый ключ ... Я также добавил "пользователя" в список sudoers ... проблема, с которой я столкнулся сейчас, заключается в том, что я пытаюсь выполнить команду sudo, что-то простое, например:

$ sudo cd /root

мне будет предложено ввести пароль, который я ввожу, но он не работает (я использую пароль, который я установил)

Также я отключил пароль пользователя, используя

$ passwd -l user

Что мне не хватает?

Где-то мои первоначальные замечания были неправильно поняты ...

Я пытаюсь укрепить свою систему ... конечная цель - использовать публичные / закрытые ключи для входа в систему вместо простой аутентификации по паролю. Я выяснил, как все это настроить с помощью файла authorized_keys.

Кроме того, в конечном итоге я буду предотвращать вход на сервер через учетную запись root. Но прежде чем сделать это, мне нужно, чтобы sudo работал для второго пользователя (пользователя, который будет постоянно входить в систему).

Для этого второго пользователя я хочу запретить регулярные входы в систему с паролем и принудительно входить только в паб / закрытый ключ, если я не блокирую пользователя с помощью "passwd -l user ... то, если я не использую ключ, я все еще могу попасть на сервер с обычным паролем.

Но что более важно, мне нужно заставить sudo работать с настройкой паб / закрытый ключ с пользователем, у которого его / ее пароль отключен.


Редактировать: ОК, я думаю, что у меня есть (решение):

1) Я настроил /etc /ssh /sshd_config и установил PasswordAuthentication no Это предотвратит вход в систему с паролем ssh (убедитесь, что перед этим настроена работающая настройка открытого / закрытого ключа).

2) Я настроил список sudoers visudo и добавил

root      ALL=(ALL) ALL
dimas     ALL=(ALL) NOPASSWD: ALL

3) root - единственная учетная запись пользователя, которая будет иметь пароль, я тестирую с двумя учетными записями пользователей "dimas" и "sherry", для которых пароль не установлен (пароли пустые, passwd -d user)

Вышесказанное по сути запрещает всем входить в систему с паролями (необходимо установить открытый / закрытый ключ).

Кроме того, пользователи в списке sudoers имеют права администратора. Они также могут su для разных учетных записей. Таким образом, в основном "Димас" может sudo su sherry , однако «Димас не может делать su sherry . Точно так же любой пользователь, НЕ находящийся в списке sudoers, не может делать su user или sudo su user .

ПРИМЕЧАНИЕ . Вышеуказанное работает, но считается плохим. Любой сценарий, который может получить доступ к коду как "dimas" или "sherry" пользователи, сможет выполнить sudo для получения root-доступа. Ошибка в ssh, которая позволяет удаленным пользователям входить в систему, несмотря на настройки, удаленное выполнение кода в чем-то вроде Firefox или любой другой недостаток, который позволяет запускать нежелательный код, поскольку пользователь теперь может запускаться от имени пользователя root. Sudo всегда должен требовать пароль, иначе вы можете войти в систему как пользователь root, а не какой-либо другой пользователь.

4 ответа4

18

То, что вы хотите сделать, возможно, но это потребует некоторого опыта, так как вам нужно будет скомпилировать модуль PAM с именем pam-ssh-agent-auth.

Процесс достаточно прост:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

Редактирование конфигурации sudo:

$ sudo visudo

Добавьте следующее:

Defaults env_keep += SSH_AUTH_SOCK

Продолжите, изменив настройки sudo PAM:

$ sudo vi /etc/pam.d/sudo

Добавьте (чуть выше строк @include):

**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account
10

ssh и sudo имеют ничего общего друг с другом. Настройка метода аутентификации ssh ничего не сделает для sudo . sudo не собирается понимать пароль ssh .

passwd -l предназначен для блокировки учетной записи пользователя, чтобы он больше не мог проходить аутентификацию по паролю. Это в значительной степени противоположно тому, что вы хотите, что позволяет пользователю аутентифицироваться без пароля.

Я думаю, что вам нужна опция NOPASSWD в вашем файле sudoers.

(PS, нет причины запускать команду cd с помощью sudo . cd не распространяется на родительские процессы, поэтому, как только sudo завершит работу, вы вернетесь к тому, с чего начали)

Редактировать: Вы продолжаете говорить, что хотите заблокировать пароль учетной записи и хотите, чтобы sudo понимал открытые / закрытые ключи. Извините, sudo не собирается использовать ssh-ключи. Это не ssh. Если вы не хотите, чтобы пользователи могли войти в систему со своими паролями, я думаю, что ответ заключается в том, чтобы отключить аутентификацию по паролю ssh, а не блокировать учетную запись. Затем вы можете сохранить пароль для пользователей, который они могут использовать для sudo после того, как они войдут через ssh authorized_keys.

4

Ответ Андре де Миранды дает хорошее решение с использованием pam_ssh_agent_auth, но некоторые части устарели. В частности, инструкции /etc/pam.d/sudo при использовании многих текущих версий Linux.

Если вы используете Ubuntu 12.04, я упростил процесс, предоставив сборку pam_ssh_agent_auth из ppa: ppa: cpick/pam-ssh-agent-auth.

Вы можете установить пакет, запустив:

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

После установки, если вы хотите использовать этот модуль PAM с sudo, вам нужно будет настроить параметры sudo и конфигурацию PAM, в Ubuntu 12.04, точнее, вы можете сделать это, создав следующие два файла:

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

Если вы используете chef, описанный выше процесс можно автоматизировать с помощью моей кулинарной книги, которую можно найти в любом из двух следующих мест:
https://github.com/cpick/pam-ssh-agent-auth
http://community.opscode.com/cookbooks/pam-ssh-agent-auth.

Каталог files поваренной книги содержит описанные выше файлы /etc/pam.d/sudo и /etc/sudoers.d/pam-ssh-agent-auth , которые работают с Ubuntu 12.04 точно и должны быть полезной отправной точкой при использовании других версий / дистрибутивы.

-1

Я знаю, что единственный способ обойти ввод пароля - отключить его в файле sudoers .

Нечто подобное даст root и всем членам wheel полный доступ без пароля:

root    ALL=(ALL)   NOPASSWD: ALL
%wheel  ALL=(ALL)   NOPASSWD: ALL

Это абсолютно не рекомендуется, однако. Если у вас есть конкретная команда для выполнения этого сервера, предоставьте им доступ только к этой команде. Или еще лучше, найдите другой способ выполнить то, что вы хотите сделать, который не требует пробивать дыру в безопасности.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .