Используйте один пароль для администрирования, а другой для входа в систему.
Как я могу дать пользователю один пароль для обычного использования при входе в систему и другой пароль для системного администрирования и доступа sudo? Я хочу, чтобы у одного пользователя было два пароля.
2 ответа
Есть способ сделать это путем переопределения настроек PAM (Pluggable Authentication Module) для службы sudo. Делайте это с большим риском для вашей машины - не просто копируйте и вставляйте, если вы не понимаете, что делает команда, и всегда держите корневой терминал открытым - тестовый тестовый тест! - перед выходом из системы, на случай, если вам нужно вернуться и что-то исправить.
Я рекомендую прочитать некоторую информацию о том, как работает PAM, чтобы вы знали, что делать, если он сломался. Я также рекомендую большинству пользователей подходить к этой проблеме под другим углом (создавая отдельную учетную запись пользователя для администрирования), поскольку решение может быть подвержено атакам хеш-таблиц на ваш пароль, если вы не правильно установили свои разрешения.
Если вы решили продолжить, вам нужно установить новый модуль PAM. pam_pwdfile использует файл типа /etc/passwd старого типа для аутентификации, который отлично подходит для использования разных паролей для разных сервисов. Он не обеспечивает распознавание учетной записи - вы можете создавать пары имя пользователя / пароль для пользователей, которых нет в системе. Поскольку мы будем использовать его для sudo, это не имеет значения, так как мы просто позволим sudo проверить, что учетная запись существует обычным способом.
sudo apt-get install libpam-pwdfile
Я также рекомендую взять удобный редактор файлов htpasswd. Бенджамин Швейцер создал удобный редактор на python, который работает хорошо. Возьмите его с http://benjamin-schweizer.de/htpasswd_editor.html и установите его зависимость:
sudo apt-get install python-newt
Создайте файл формата htpasswd с помощью инструмента - sudo python htpasswd_editor sudo.passwd
, Введите имя пользователя и пароль, используя то же имя, которое вы будете использовать для sudo - по одному для каждого пользователя, который будет его использовать. Скопируйте его в безопасное место (при тестировании я помещаю его в /etc/sudo.passwd) и делаю его нечитаемым для обычных пользователей: chmod 660 /etc/sudo.passwd
как корень.
Убедитесь, что файл принадлежит пользователю root и не доступен для чтения другим пользователям. Это уязвимость, так как файл содержит хешированный пароль, и, если он доступен для чтения или записи другим пользователям, это сильно нарушает вашу безопасность. Именно по этой причине я не рекомендую этот метод на машине, которая должна быть защищена.
Наконец, отредактируйте /etc/pam.d/sudo
файл. Добавьте следующую строку над другой @include ...
линии:
auth required pam_pwdfile.so pwdfile /etc/sudo.passwd
Очевидно, заменив последний аргумент на путь к созданному вами файлу htpasswd. Закомментируйте следующую строку: #@include common-auth
чтобы убедиться, что он использует новый метод аутентификации.
Слово предостережения - вам нужно будет отредактировать /etc/pam.d/sudo
файл из корневого терминала. Не закрывайте это без тестирования! Если вы это сделаете, вы не сможете войти в систему (если вы что-то сломали), и вам придется загрузиться с диска восстановления, чтобы восстановить вашу систему. Проверьте перед выходом из системы, открыв новый терминал, и попробуйте использовать sudo
, Вы должны обнаружить, что он больше не будет работать с вашим обычным паролем для входа, а вместо этого потребует нового пароля, который вы использовали при создании файла passwd. Чтобы обновить файл, снова используйте полезный инструмент.
Существует гораздо более простое решение исходного вопроса, и это способ, которым я бегу:
- создать одного пользователя без прав администратора
- создать пользователя с правами администратора
Всегда входите в систему как пользователь без прав администратора, и всякий раз, когда пользователь без прав администратора должен делать что-либо "adminy", просто:
fab-user@fab-ux:/media/Data/Temp
$ su - fab-root
Password:
fab-root@fab-ux:~
$ sudo smartctl --all /dev/sdc
Да, это не то, что вы хотите, но это то, что вам действительно нужно