前段时间根据公司要求对部分服务器进行安全加固,加固内容中有一项是要设置用户口令周期时间的。事实证明,这个木有任务用处。下面是在虚拟机环境下一个小小滴测试:
  首先,登陆服务器,查看一下/etc/login.def
   安全策略修改密码_修改密码
  然后再查看一下/etc/shadow
   安全策略修改密码_修改密码_02
  发现两者口令策略是完全对的上的。
  然后,我们修改/etc/login.def
   安全策略修改密码_修改密码_03
  第一行,密码使用最长时间为90天,90天后会有提醒。
  第二行,密码使用最短时间为10天,10天之内是不能修改密码的。
  第三行,密码复杂度,最少8位
  第四行,密码过期后会提醒5天,5天之后还没改密码的话,帐号会被冻结失效。

  修改过后,再查看/etc/shadow,发现没有任何改变。然后我们再 useradd test 添加一个帐号,发现新加的帐号适应修改后的口令周期设置。

   安全策略修改密码_修改密码_04

  经过多次反复测试,发现无论是添加普通帐号还是管理员帐号,还是修改PASS_MIN_DAYS、PASS_MIN_LEN、PASS_WARN_AGE几个选项,都只适用于后来添加的帐号,对于之前已经存在的帐号不存在任何影响。



同事修改linux root密码时出现错误passwd: Authentication token manipulation error
发生该错误原因是:
1、分区没有空间导致。
2、/etc/passwd 和/etc/shadow不同步
但是这次上面两条却行不通,通过df查看根分区还有40%剩余。
 
1、尝试修改密码,出现错误
# passwd
Changing password for user root.
New UNIX password:
BAD PASSWORD: it is WAY too short
Retype new UNIX password:
passwd: Authentication token manipulation error
2、同步/etc/passwd 和/etc/shadow出错
 #pwconv
pwconv: can't lock passwd file
3、看权限没有异常,也没有进程锁定该文件
# ll /etc/passwd
-rwxr--r--  1 root root 2752 Dec 31 17:29 /etc/passwd
# fuser -u /etc/passwd
# lsof |grep passwd
4、cp lock文件出错,提示空间不足
# cp /tmp/.pwd.lock /etc/
cp: cannot create regular file `/etc/.pwd.lock': No space left on device
5、上面的错误惊醒了我,查看确实是inode满了,删除无用的文件
#df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda5            2562240 2562240       0  100% /
/dev/sda1              50200      47   50153    1% /boot
/dev/sda2            51300000      12 51299988    1% /data/cache1
/dev/sdb1            51300000 7080311 44219689   14% /data/cache2
/dev/sdb2            9863168      11 9863157    1% /data/proclog
none                  215907       1  215906    1% /dev/shm
/dev/sda3            3842720  305795 3536925    8% /usr
/dev/sda7            3162112    7893 3154219    1% /var
6、再次修改密码仍然出错,于是尝试修改/etc/passwd也出现错误
# chmod 777 /etc/passwd
chmod: changing permissions of `/etc/passwd': Operation not permitted
7、执行chattr 
#chattr -i  /etc/passwd
# lsattr -v /etc/passwd
2095582053 ------------- /etc/passwd
# chattr -i  /etc/shadow
8、同步文件
pwconv
9、成功修改密码
passwd
Changing password for user root.
New UNIX password:
BAD PASSWORD: it is WAY too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
#

 

修改密码时提示错误
[root@WS10111509 ~]# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: Authentication token manipulation error

2,修改权限时提示错误
[root@WS10111509 ~]# chmod 755 /etc/passwd
chmod: changing permissions of `/etc/passwd’: Operation not permitted

3,同步/etc/passwd 和/etc/shadow出错
#pwconv
pwconv: can’t lock passwd file

4,操做方法。
检查:
# fuser -u /etc/passwd //查看是否有写入权限
# lsof |grep passwd //查看是否有写入权限
# ll /etc/.pwd.lock //查看是否有此文件
# df -i //查看是否空间被占满
# lsattr /etc/shawr //查看是否被写保护

lsattr /etc/passwd
—i———- //被标记了i属性

chattr -i /etc/passwd
chmod 755 /etc/passwd

lsattr /etc/shawr
—-i——– //被标记了i属性

chattr -i /etc/shaw
chmod 755 /etc/shaw

#pwconv 同步/etc/passwd 和/etc/shadow

pawsswd root 不会出错了。修改密码后

5,加回保护

#chattr命令只能管理员使用,重新保护passwd文件
chattr +i /etc/passwd
chattr +i /etc/shaw

 

还有一种可能就是有的系统是限制了5天内不能修改密码,也会出现这样的错误。





基本的修改密码命令

1、passwd 简单说明;

我们已经学会如何添加用户了,所以我们还要学习设置或修改用户的密码;passwd命令的用法也很多,我们只选如下的几个参数加以说明;想了解更多,请参考man passwd或passwd --help ;

 [OPTION...]

passwd 作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,但前提是没有被root用户锁定;如果root用户运行passwd ,可以设置或修改任何用户的密码;

passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码;请看下面的例子;

[[email protected]

~]# passwd注:没有加任何用户,我是用root用户来执行的passwd 表示修改root用户的密码;下面也有提示;

Changing password for user root.

New UNIX password: 注:请输入新密码;

Retype new UNIX password: 注:验证新密码;

passwd: all authentication tokens updated successfully. 注:修改root密码成功;

如果是普通用户执行passwd 只能修改自己的密码;

如果新建用户后,要为新用户创建密码,则用 passwd 用户名 ,注意要以root用户的权限来创建;

[

~]# passwd beinan注:更改或创建beinan用户的密码;

Changing password for user beinan.

New UNIX password: 注:请输入新密码;

Retype new UNIX password: 注:再输入一次;

passwd: all authentication tokens updated successfully. 注:成功;

普通用户如果想更改自己的密码,直接运行passwd即可;比如当前操作的用户是beinan;

[

~]$ passwd

Changing password for user beinan. 注:更改beinan用户的密码;

(current) UNIX password: 注:请输入当前密码;

New UNIX password: 注:请输入新密码;

Retype new UNIX password: 注:确认新密码;

passwd: all authentication tokens updated successfully. 注:更改成功;

2、passwd 几个比较重要的参数;

[

beinan]# passwd --help

Usage: passwd [OPTION...] <accountName>

-k, --keep-tokens keep non-expired authentication tokens

注:保留即将过期的用户在期满后能仍能使用;

-d, --delete  delete the password for the named account (root only)

注:删除用户密码,仅能以root权限操作;

-l, --lock  lock the named account (root only)

注:锁住用户无权更改其密码,仅能通过root权限操作;

-u, --unlock  unlock the named account (root only)

注:解除锁定;

-f, --force force operation

注:强制操作;仅root权限才能操作;

-x, --maximum=DAYS  maximum password lifetime (root only) 注:两次密码修正的最大天数,后面接数字;仅能root权限操作;

-n, --minimum=DAYS  minimum password lifetime (root only) 注:两次密码修改的最小天数,后面接数字,仅能root权限操作;

-w, --warning=DAYS  number of days warning users receives before 注:在距多少天提醒用户修改密码;仅能root权限操作;

password expiration (root only)

-i, --inactive=DAYS number of days after password expiration when an 注:在密码过期后多少天,用户被禁掉,仅能以root操作;

account becomes disabled (root only)

-S, --status  report password status on the named account (root 注:查询用户的密码状态,仅能root用户操作;

only)

--stdin read new tokens from stdin (root only)

比如我们让某个用户不能修改密码,可以用-l 参数来锁定:

[

~]# passwd -l beinan注:锁定用户beinan不能更改密码;

Locking password for user beinan.

passwd: Success 注:锁定成功;

[[email protected] ~]# su beinan 注:通过su切换到beinan用户;

[[email protected] ~]$ passwd 注:beinan来更改密码;

Changing password for user beinan.

Changing password for beinan

(current) UNIX password: 注:输入beinan的当前密码;

passwd: Authentication token manipulation error 注:

,不能更改密码;

再来一例:

[

~]# passwd -d beinan注:清除beinan用户密码;

Removing password for user beinan.

passwd: Success  注:清除成功;

[[email protected]

~]# passwd -S beinan注:查询beinan用户密码状态;

Empty password. 注:空密码,也就是没有密码;

注意: 当我们清除一个用户的密码时,登录时就无需密码;这一点要加以注意;

3、chage 修改用户密码有效期限的命令;

chage 用语法格式:

chage [-l] [-m 最小天数] [-M 最大天数] [-W 警告] [-I 失效日] [-E 过期日] [-d 最后日] 用户

前面已经说的好多了,这个只是一笔带过吧,知道有这个命令就行,自己实践实践再说,大体和psswd有些参数的用法差不多;

密 码时效命令-----chage

格式为:chage [<选项>] <用户名>

下面列出了chage命令的选项说明:

-m days: 密码可更改的最小天数。为零时代表任何时候都可以更改密码。

-M days: 指定口令有效的最多天数。当该选项指定的天数加上-d选项指定的天数小于当前的日期时,用户在使用该帐号前就必须改变口令。

-d days: 指定从1970年1月1日起,口令被改变的天数。

-I days: 指定口令过期后,帐号被锁前不活跃的天数。如果值为0,帐号在口令过期后就不会被锁。

-E date: 指定帐号被锁的日期。日期格式YYYY-MM-DD。若不用日期,也可以使用自1970年1月1日后经过的天数。

-W days: 指定口令过期前要警告用户的天数。

-l: 列出指定用户当前的口令时效信息,以确定帐号何时过期。

例如下面的命令要求用户user1两天内不能更改口令,并且口令最长的存活期为30天,并且口令过期前5天通知用户

chage -m 2 -M 30 -W 5 user1

可以使用如下命令查看用户user1当前的口令时效信息:chage -l user1

提示:1)可以使用chage <用户名>进入交互模式修改用户的口令时效。

2)修改口令实质上就是修改影子口令文件/etc/shadow中与口令时效相关的字段值。

强制用户在下次登录时修改密码

每个Linux用户都关联这不同的密码相关配置和信息。比如,记录着上次密码更改的日期、最小/最大的修改密码的天数、密码何时过期等等。

一个叫chage的命令行工具可以访问并调整密码过期相关配置。你可以使用这个工具来强制用户在下次登录修改密码、

要查看特定用户的过期信息(比如:alice),运行下面的命令。注意的是除了你自己之外查看其他任何用户的密码信息都需要root权限。

$ sudo chage -l alice

 

强制用户修改密码

如果你想要强制用户去修改他/她的密码,使用下面的命令。

$ sudo chage -d <user-name>

原本“-d ”参数是用来设置密码的“年龄”(也就是上次修改密码起到1970/1/1起的天数)。因此“-d0”的意思是上次密码修改的时间是1970/1/1,这就让当前的密码过期了,也就强制让他在下次登录的时候修改密码了。

另外一个过期当前密码的方式是用passwd命令。

$ sudo passwd -e <user-name>

上面的命令和“chage -d0”作用一样,让当前用户的密码立即过期。

现在检查用户的信息,你会发现:

当你再次登录时候,你会被要求修改密码。你会在修改前被要求再验证一次当前密码。