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

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

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

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

26
30.04.2012, 18:42
5 ответов

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

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

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

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

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

21
27.01.2020, 19:40
  • 1
    , который один удобный способ использовать PAM в сочетании с ключевой аутентификацией SSH через pam_ssh_agent_auth, который имеет преимущество замены подсказки пароля (теоретически еще более безопасный) ключевая аутентификация SSH, может использовать так или иначе –  Tobias Kienzler 23.10.2014, 22:19
  • 2
    , таким образом, Вы говорите sudo passwd изменил бы пароль для текущего пользователя, не для sudo пользователя? –  still_dreaming_1 28.03.2017, 18:43
  • 3
    @still_dreaming_1 нет, я говорю, что пользователь, который может выполнить команды с sudo может изменить их собственный пароль. Точная команда действительно не имеет значения, но вдаваться в большее количество подробностей, это было бы sudo passwd bob где bob имя пользователя или что-то эквивалентное. Без аргумента, sudo passwd действительно изменил бы пароль для корня. –  Gilles 'SO- stop being evil' 28.03.2017, 23:47

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

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

$ sudo -i

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

# passwd $username

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

Введите новый пароль UNIX:

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

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

1
27.01.2020, 19:40
  • 1
    выглядит хорошим, но можно уточнить то, что продолжается здесь? –  cwd 01.05.2012, 01:27
  • 2
    Не возможно сделать sudo -i без текущего пароля пользователя. –  kravemir 01.05.2012, 22:51
  • 3
    @Miro. Это - как Вы говорите. Все еще a sudo bash могло быть без пароля, учитывая, что установка так в /etc/sudoers файл. Я думаю, что @jrg как сказан больше фокусировки на проблеме ненадежности с sudo здесь –  humanityANDpeace 08.01.2013, 14:19
  • 4
    честно, Вы не должны делать sudo -i, можно перейти прямо к sudo passwd $username @Miro, Вы не должны знать текущий пароль пользователя. Только необходимо знать, что пароль root использует sudo –  Antony 06.01.2014, 05:40

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

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

0
27.01.2020, 19:40

Можно использовать pam_ssh_agent_auth модуль. Довольно просто скомпилировать, и затем просто добавить запись

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 вызов, по крайней мере, потребует некоторого подтверждения.

8
27.01.2020, 19:40
  • 1
    По сопутствующему вопросу, существует pam_ssh, который позволяет использовать пароль SSH вместо Unix один для входа в систему, автоматически запуская агент и добавляя ключ - таким образом предоставление Вам с возможностью единой точки входа. –  Tobias Kienzler 08.01.2013, 11:43
#% 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) в использование тот пароль. Обратите внимание, что прием здесь не сказать пользователям некоторый фиктивный пароль, который они затем требовались бы ввести во время входа в систему, после того как они обязаны для изменения их пароля... В оболочке гайки не требуется никакая коммуникация от администратора (корень) фактическому пользователю.

0
27.01.2020, 19:40

Теги

Похожие вопросы