Может ли пользователь linux изменить свой пароль, не зная текущего пароля?


25

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

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

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



@ sr - не похоже, что это основной способ сделать это ...
cwd

Почему вы хотите, чтобы ваши пользователи имели привилегии sudo? Я надеюсь, что вы знаете, что этим вы отдаете root-доступ. Здесь может быть шанс потратить некоторое время и разрешить использовать только подмножество команд, связанных с sudo (что может быть менее небезопасно). Go man sudoersвыдаст информацию о том, что некоторые команды могут запускаться с помощью sudo без необходимости ввода пароля пользователя. Вы даже можете добавить шеллскрипт в / etc / sudoers, который позволил бы установить для каждого пользователя параметр «self-password» без необходимости предварительного пароля.
человечествоANDpeace

@humanityANDpeace - я это понимаю. Всем членам нашей команды необходим root-доступ к облачным серверам, которые мы поддерживаем. Теперь мы используем chef для управления открытыми ключами пользователей, и у нас есть группа сисадминов NOPASSWD: ALL, членами которой являются члены команды. Если вы можете предложить лучшее решение, пожалуйста, опубликуйте его как ответ.
cwd

Ответы:


21

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

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

Пользователь обычно должен знать свой текущий пароль, чтобы изменить его на другой пароль. passwdПрограмма проверяет это (он может быть настроен не, но это не полезно или вообще желательно в вашем сценарии). Однако root может изменить любой пароль пользователя, не зная старого; следовательно, пользователь с полномочиями 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 (это довольно гибко), но я не могу сказать вам, как у меня в голове; задать отдельный вопрос, если вам нужна помощь.


Одним из удобных способов использования PAM в сочетании с аутентификацией по ключу SSH является использование pam_ssh_agent_auth , преимущество которого заключается в замене запроса пароля (теоретически даже более надежной) аутентификацией ключа, которую SSH может использовать в любом случае
Тобиас Кинцлер,

Вы говорите, sudo passwdчто изменили бы пароль для текущего пользователя, а не для пользователя sudo?
still_dreaming_1

1
@ still_dreaming_1 Нет, я говорю, что пользователь, который может запускать команды, sudoможет изменить свой собственный пароль. Точная команда на самом деле не имеет значения, но, если говорить более подробно, это будет sudo passwd bobгде bobимя пользователя или что-то подобное. Без аргументов sudo passwdдействительно изменил бы пароль для root.
Жиль "ТАК - перестань быть злым"

7

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


В связи с этим есть pam_ssh , который позволяет использовать вашу парольную фразу SSH вместо unix для логина, автоматического запуска агента и добавления ключа - таким образом, вы получаете возможность единой регистрации.
Тобиас Кинцлер

1

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

По сути, вы делаете следующее:

$ sudo -i

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

# passwd $username

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

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

Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлен

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


выглядит хорошо, но не могли бы вы уточнить, что здесь происходит?
cwd

4
Невозможно обойтись sudo -iбез текущего пароля пользователя.
Кравемир

@Miro. Это как вы говорите. Тем sudo bashне менее, может быть без пароля, учитывая, что настройки в /etc/sudoersфайле. Я думаю, что @jrg, как уже говорилось, больше фокусируется на проблеме безопасности с sudo здесь
humanityANDpeace

1
честно говоря, вам не нужно ничего делать sudo -i, вы можете сразу перейти к sudo passwd $username@Miro, вам не нужно знать текущий пароль пользователя. Вам нужно знать только пароль пользователя root, чтобы использовать sudo
Antony

0

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

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


0
#% 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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.