Пользователь Linux может изменить их пароль, не зная текущего пароля?
=====================================================================

Я настраиваю некоторых `ubuntu` поля, и opscode's использования `chef` как инструмент конфигурирования. Было бы довольно легко установить открытые ключи для каждого пользователя на каждом из этих серверов и отключить аутентификацию по паролю.

Однако пользователи должны также иметь `sudo` полномочия, хотя, который по умолчанию требует пароля.

Если я хочу использовать открытые ключи пользователей в качестве метода управления доступом и позволить пользователям `sudo` полномочия, делает это означает, что я должен также настроить пользователей с `NOPASSWD: ALL` в `visduo`, или **есть ли способ, которым пользователь может изменить их собственный пароль, если у них только есть аутентификация с открытым ключом?**

 

Sudo, в его наиболее распространенной конфигурации, требует, чтобы пользователь ввел свой пароль. Как правило, пользователь уже использовал свой пароль для аутентификации в учетную запись, и ввод пароля снова является способом подтвердить, что законный пользователь не отказался от своей консоли и был похищен.

В Вашей установке пароль пользователя использовался бы только для аутентификации к sudo. В частности, если бы ключ пользователя SSH поставлен под угрозу, взломщик не смог бы поднять до полномочий пользователя root на сервере. Взломщик мог привить клавиатурный перехватчик в учетную запись, но этот клавиатурный перехватчик будет обнаруживаем другими пользователями и мог даже наблюдаться за автоматически.

Пользователь обычно должен знать, что его текущий пароль изменяет его на другой пароль. `passwd` программа проверяет это (она может быть настроена не к, но это не полезно или вообще желательно в Вашем сценарии). Однако корень может изменить пароль любого пользователя, не зная старый; следовательно пользователь с sudo полномочиями может изменить свой собственный пароль, не вводя его в `passwd` подсказка путем выполнения `sudo passwd $USER. Если sudo настроен для требования пароля пользователя, затем пользователь, должно быть, ввел пароль к sudo так или иначе.

Можно отключить аутентификацию по паролю выборочно. В Вашей ситуации Вы отключили бы аутентификацию по паролю в ssh, и возможно в других сервисах. Большинство сервисов на большинство современных нельдов (включая Ubuntu) использует [PAM](http://en.wikipedia.org/wiki/Pluggable_Authentication_Modules) для конфигурирования методов аутентификации. На Ubuntu конфигурационные файлы PAM живут в /etc/pam.d. Для отключения аутентификации по паролю прокомментируйте auth … pam_unix.so строка в /etc/pam.d/common-auth. Кроме того, удостоверьтесь, что Вы имеете PasswordAuthentication no в /etc/ssh/sshd_config отключить встроенную аутентификацию по паролю sshd.

Можно хотеть позволить некоторым административным пользователям входить в систему с паролем или позволять аутентификацию по паролю на консоли. Это возможно с PAM (это довольно гибко), но я не мог сказать Вам как первое, что пришло на ум; задайте отдельный вопрос, если Вы нуждаетесь в помощи.

 

Да, это невероятно небезопасно и также позволяет пользователю получать доступ к другим пользовательским паролям, но так как у них есть sudo, не очень можно сделать.

В основном Вы делаете следующее:

$ sudo -i`

Теперь, мы - корень. У нас есть доступ ко всему.

`# passwd $username

$username может быть чьим-либо именем пользователя.

> 
> Введите новый пароль UNIX:
> 
> 
> Перепечатайте новый пароль UNIX:пароль: пароль обновляется успешно
> 
> 
> 

Бум, измененный пароль. Снова, невероятно небезопасный, потому что можно изменить anyones, но он работает, но он работает. Я не рекомендую это, а скорее предлагаю этот ответ как пример того, какой *не* сделать.

 

Точка пароля должна гарантировать, что хакеры, которые получают ключ пользователя, или находят, что необслуживаемый терминал не может получить корневой доступ. Поэтому я не рекомендовал бы решения, которое включает sudo без пароля.

Я предлагаю, чтобы Вы сохранили это простым: возможно, пошлите пользователю по электронной почте пароль по умолчанию со строгими инструкциями изменить его как можно скорее или иначе вставить сценарий в их `.profile` или `.login` или что-то таким образом, что это требует нового пароля на их первом входе в систему. Это могло отключить себя при завершении, и Вы могли использовать `expect` для ввода текущего пароля так, они никогда не должны знать это.

 

Можно использовать [pam\_ssh\_agent\_auth](http://pamsshagentauth.sourceforge.net/) модуль. Довольно просто скомпилировать, и затем просто добавить запись

```
auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys

```

*перед* другим `auth` (или `include`) записи в `/etc/pam.d/sudo`

и

```
Defaults    env_keep += "SSH_AUTH_SOCK"

```

кому: `/etc/sudoers` (через `visudo`).

Теперь каждый пользователь может или пройти проверку подлинности к `sudo` через (переданный или локальный) агент SSH *или* их пароль. Может быть мудро попросить, чтобы Ваши пользователи использовали `ssh-add -c` таким образом, что каждый `sudo` вызов, по крайней мере, потребует некоторого подтверждения.

 

```
#% useradd -g somegroup someuser
#% usermod -p "" someuser
#% chage -d 0 someuser
#% sed -i "s/^.*PasswordAuthentication .*/PasswordAuthentication no/" /etc/sshd/sshd_config
#% /sbin/service sshd restart
#% cp -r ~/.ssh `echo ~someuser`
#% chown -R someuser `echo ~someuser`/.ssh
#% chgrp -R somegroup `echo ~someuser`/.ssh
#% echo "%somegroup  ALL=(ALL)   ALL" >> /etc/sudoers

```

> Это должно позволить Вам иметь пользователей, которые могут войти только в открытые ключи использования и не могут использовать пароли для входа в систему. Однако он будет вынужден изменить пароль в первый раз, когда он входит в систему..., но не имея необходимость говорить ему somedummy пароль впереди... Пользователей просто попросят изменить пароль, и впоследствии они могут использовать его только для sudo, но не смогут войти (ssh) в использование тот пароль. Обратите внимание, что прием здесь не сказать пользователям некоторый фиктивный пароль, который они затем требовались бы ввести во время входа в систему, после того как они обязаны для изменения их пароля... В оболочке гайки не требуется никакая коммуникация от администратора (корень) фактическому пользователю.