配置的Debian系统,先是用root账户apt-get install sudo安装sudo命令;然后通过useradd命令建立子账户;最后修改sudoers通过添加相应账户名来开放执行sudo的权限。
本以为做完一切万事大吉,可以切换到子账户痛快的用sudo了。其实不然,当我切换到刚才建立的子账户并执行sudo命令时出现了下面的错误提示:
$ sudo ls sudo: unable to initialize PAM: No such file or directory |
无法初始化PAM,什么是PAM?引用百度百科上的描述:
PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。
实际上这是通过配置模块实现认证的认证模式,PAM的配置文件均位于Debian下/etc/pam.d目录下,通过ls列出该目录当前文件,发现sudo果然在其中。使用cat /etc/pam.d/sudo出现以下信息:
# cat /etc/pam.d/sudo #%PAM-1.0 @include common-auth @include common-account @include common-session-noninteractive |
这里分别通过@include指令包含了三类共享的认证模块配置文件,这些文件也处于/etc/pam.d目录下,好,问题也来了,我竟然没有找到common-session-noninteractive这个配置文件,联想到刚才PAM错误的No such file or directory消息,基本可以推断是这个配置文件丢失导致PAM无法引导sudo启动。
上网搜索了一下,得知关于common-session-noninteractive配置文件的内容如下:
session [default=1] pam_permit.so session requisite pam_deny.so session required pam_permit.so session required pam_unix.so
当然我们可以根据上述内容自己建立一个common-session-noninteractive配置文件,好了,做完这些我们再一次进入子账户,然后尝试sudo ls,呵呵,发现sudo能够正常使用了,问题已经解决!
参考文档:
《PAM configuration guide for Debian》
《Quick solution for sudo issue with missing pam configuration file》