Linux无法更改密码的解决办法--passwd: User not known

hehuistudent 2010-12-21

公司内部有台记录客户信息的小系统,搭建在Linux平台,平时一切都很正常,公司搞程序开发的需要修改内容了就通过ftp上去直接修改文件,但是今天通过ftp就是无法登陆上去,ftp是用proftpd搭建的,开始还以为是proftpd配置出了问题,但是经检查一点问题都没有,再接着修改密码,可是改密码的时候提示一个以前没见过的信息:passwd: User not known to the underlying authentication module
在网上查了N久资料也没搞清楚,之后看到有说pwck,pwconv命令可以解决。
pwck 的作用就是检查 /etc/passwd 这个帐号设定档内的内容,与实际的家目录是否存在等, 还可以比对 /etc/passwd /etc/shadow 的内容是否一致,另外, 如果 /etc/passwd 内的资料栏位错误时,会提示使用者修订。
# pwck
用户 adm:目录 /var/adm 不存在
用户 news:目录 /etc/news 不存在
用户 uucp:目录 /var/spool/uucp 不存在
用户 gopher:目录 /var/gopher 不存在
用户 pcap:目录 /var/arpwatch 不存在
用户 sabayon:目录 /home/sabayon 不存在
无效的用户名“#tom”
pwck:无改变
上面仅是告知我,这些帐号并没有家目录,由于那些帐号绝大部分都是系统帐号, 确实也不需要家目录的,所以,那是‘正常的错误!’,相对应的群组检查可以使用 grpck 这个指令。
pwck 确保系统鉴认信息的完整性,pwck 对每一项的以下域进行检查:
-是否有唯一的用户名
-是否有合法的用户ID和组ID
-是否有合法的主组-是否有合法的家目录
-是否有合法的壳(命令解释器,如bash)
对于每一项的域数目和唯一用户名字的检查是至关重要的.如果某一项的域数目不正确,用户将被提示是否删除整行,如果用户没有肯定的回答,pwck将不再继续进行检查.如果有重复的用户名,用户将被提示是否删除该项,pwck将继续进行检查.其他的错误都只会警告用户,并且鼓励用户运行usermod命令去把错误改正.
一些对/etc/passwd文件进行操作的命令,如果无法对遭到破坏或者有重复项进行修改的话,pwck就要在这些情况下进行操作,把这些项删除.
# pwconv
这个指令主要的目的是在‘将/etc/passwd 内的帐号与密码,移动到/etc/shadow 当中!’ 早期的 Unix 系统当中并没有/etc/shadow ,所以,使用者的登入密码早期是在/etc/passwd 的第二栏,后来为了系统安全,才将密码资料移动到/etc/shadow 内的。 使用 pwconv 后,可以:
    * 比对/etc/passwd 及/etc/shadow ,若/etc/passwd 内存在的帐号并没有对应的/etc/shadow 密码时,则pwconv 会去/etc/login.defs 取用相关的密码资料,并建立该帐号的 /etc/shadow 资料;
    * 若/etc/passwd 内存在加密后的密码资料时,则pwconv 会将该密码栏移动到/etc/shadow 内,并将原本的/etc/passwd 内相对应的密码栏变成 x !
一般来说,如果正常使用useradd 增加使用者时,使用 pwconv 并不会有任何的动作,因为/etc/passwd 与/etc/shadow 并不会有上述两点问题啊! 不过,如果手动设定帐号,这个 pwconv 就很重要!
在执行前,密码文件中的内容如下:

执行之后的如下:

当再次修改密码时提示正确:
# passwd ftpadmin
Changing password for user ftpadmin.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
通过FTP已经能够连上去。
顺便附上proftpd的配置,仅供参考:

Linux无法更改密码的解决办法--passwd: User not known

相关推荐