ユーザーのパスワードではなく、ルートパスワードを要求する場合は、に入力できるオプションがあります/etc/sudoers
。rootpw
特に、rootパスワードを要求するようになります。ある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)に代替パスワードソースを使用させることができます。common-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
owner / group root:shadow
、mode を作成しました2750
。その中に、db5.1_load
(Debian Wheezyで使用されているBerkeley DBのバージョンです)を使用して、パスワードデータベースファイルを作成しました。
#umask 0027
#db5.1_load -h / var / local / sudopass -t hash -T passwd.db
アンソニー
WMaEFvCFEFplI
^D
そのハッシュはmkpasswd -m des
、パスワード「password」を使用して生成されました。非常に安全です!(残念ながら、pam_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 working'
[sudo]アンソニーのパスワード: passwordRETURN
出来た