Чи може користувач Linux змінити свій пароль, не знаючи поточного пароля?


25

Я встановлюю декілька ubuntuполів і використовую opscode chefяк інструмент конфігурації. Встановити відкриті ключі для кожного користувача на кожному з цих серверів було б досить просто та відключити автентифікацію паролів.

Однак користувачі також повинні мати sudoпривілеї, які за замовчуванням вимагають пароль.

Якщо я хочу використовувати відкриті ключі користувачів як метод управління доступом і дозволяти користувачам sudoпривілеї, чи це означає, що я також повинен налаштувати користувачів на NOPASSWD: ALLв visduo, або є спосіб, коли користувач може змінити свій власний пароль, якщо вони мають лише автентифікацію відкритих ключів?



@sr - не схоже, що це основний спосіб зробити це ...
cwd

Чому ви хочете, щоб ваші користувачі мали судо привілеїв? Я сподіваюся, що ви знаєте, що цим самим надаєте кореневий доступ. Тут може бути шанс вкласти якийсь час і дозволити використовувати лише підмножину команд у зв’язку з sudo (що може бути менш небезпечно). Go man sudoersдасть інформацію про те, що певні команди можуть працювати з sudo без потрібного пароля користувача. Ви можете навіть додати оболонку (/ shell) до / etc / sudoers, що дозволить налаштувати "власний пароль" для кожного користувача без необхідності попереднього пароля.
людствоANDpeace

@humanityANDpeace - я це усвідомлюю. Усі члени нашої команди потребують кореневого доступу до хмарних серверів, які ми підтримуємо. Зараз ми використовуємо шеф-кухаря для управління відкритими ключами користувачів, і у нас є група sysadmin NOPASSWD: ALL, до складу якої входять члени команди. Якщо ви можете запропонувати краще рішення, будь ласка, опублікуйте це як відповідь.
cwd

Відповіді:


21

Судо в своїй найбільш поширеній конфігурації вимагає від користувача ввести свій пароль. Зазвичай користувач вже використовував свій пароль для автентифікації в обліковому записі, а введення пароля - це спосіб підтвердити, що законний користувач не покинув консоль і був викрадений.

У вашому налаштуванні пароль користувача буде використовуватися лише для автентифікації на sudo. Зокрема, якщо ключ SSH користувача порушений, зловмисник не зможе підняти на сервер привілеї до root. Зловмисник може встановити в обліковий запис реєстратор ключів, але цей реєстратор буде виявлений іншими користувачами, і навіть за ним можна буде автоматично спостерігати.

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

тож, ви говорите 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Без поточного пароля користувача не обійтися.
kravemir

@Miro. Це, як ви кажете. Все-таки a sudo bashможе бути без паролем, враховуючи таку настройку у /etc/sudoersфайлі. Я думаю , що @jrg як сказав більше , зосередивши увагу на проблемі відсутності безпеки з Судо тут
humanityANDpeace

1
якщо чесно, вам не потрібно робити це sudo -i, ви можете перейти прямо до sudo passwd $username@Miro, вам не потрібно знати поточний пароль користувача. Вам потрібно знати лише корінний пароль, щоб користуватися sudo
Антонієм

0

Суть пароля полягає в тому, щоб хакери, які отримують ключ користувача або знаходять без нагляду термінал, не змогли отримати кореневий доступ. З цієї причини я б не рекомендував будь-яке рішення, яке передбачало бєро паролі.

Я пропоную вам тримати це просто: можливо , по електронній пошті користувачу пароль за замовчуванням з суворі інструкції , щоб змінити його якомога швидше, або ж вставити скрипт в їх .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) за допомогою цього пароля. Зауважте, що хитрість тут полягає в тому, щоб не повідомити користувачам якийсь фіктивний пароль, який вони потім повинні були б ввести під час входу, як тільки вони повинні змінити свій пароль ... У оболонці горіха немає зв’язку від адміністратора (root) фактичному користувачеві потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.