Якщо ви хочете запитати корінний пароль, на відміну від пароля користувача, є варіанти, які ви можете ввести /etc/sudoers
. rootpw
зокрема змусить запросити пароль для кореня. Є runaspw
і targetpw
як; див. детальну інформацію про сторінку "sudoers (5)".
Крім цього, sudo робить аутентифікацію (як і все інше) через PAM. PAM підтримує конфігурацію програми. Конфігурація Sudo знаходиться в (принаймні, в моїй системі Debian) /etc/pam.d/sudo
і виглядає так:
$ cat sudo
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
Іншими словами, за замовчуванням він автентифікує, як і все, що в системі. Ви можете змінити цей @include common-auth
рядок, і PAM (і, таким чином, sudo) використовувати альтернативне джерело паролів. Рядки, коментовані без коментування, у загальному auth виглядають приблизно так (за замовчуванням це буде інакше, якщо ви використовуєте, наприклад, LDAP):
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
Ви можете використовувати, наприклад, pam_userdb.so
замість pam_unix.so
, а також зберігати альтернативні паролі в базі даних Berkeley DB.
приклад
Я створив каталог /var/local/sudopass
, власника / групу root:shadow
, режим 2750
. Всередині нього я пішов вперед і створив файл бази даних паролів за допомогою db5.1_load
(яка є версією Берклі БД, що використовується в Debian Wheezy):
# umask 0027
# db5.1_load -h / var / local / sudopass -t хеш -T passwd.db
антоній
WMaEFvCFEFplI
^D
Цей хеш був створений за mkpasswd -m des
допомогою пароля "пароль". Дуже високобезпечно! (На жаль, схоже, пам_userdb не підтримує нічого кращого, ніж древнє crypt(3)
хешування).
Тепер відредагуйте /etc/pam.d/sudo
та видаліть @include common-auth
рядок, а замість цього поставте:
auth [success=1 default=ignore] pam_userdb.so crypt=crypt db=/var/local/sudopass/passwd
auth requisite pam_deny.so
auth required pam_permit.so
Зауважте, що pam_userdb додає .db
розширення до переданої бази даних, тому потрібно залишити .db
вимкнено.
За словами dannysauer у коментарі , можливо, вам доведеться зробити таку саму редакцію/etc/pam.d/sudo-i
.
Тепер для sudo я повинен використовувати password
замість реального пароля вхід:
anthony @ sudotest: ~ $ sudo -K
anthony @ sudotest: ~ $ sudo echo -e '\ nit працював'
[sudo] пароль для антоні: passwordRETURN
це спрацювало