7.7-9 chage、chpasswd、su
阅读原文时间:2023年07月12日阅读:2

chage命令用于查看或修改用户密码的有效期,有些参数和passwd的功能相同。

-d    设置上一次密码更改的日期

-E    账号过期的日期。日期格式为YYYY-MM-DD

-I    设置密码过期多少天后禁用账户

-l    显示账号有效期的信息

-m    密码可更改的最小天数。默认为0,表示任何时候都可以更改密码

-M    密码保持有效的最大天数

-W    密码到期前,提前收到警告信息的天数

要求oldboy用户7天之内不能更改密码,60天以后必须修改密码,过期前10天通知oldboy用户,过期后30天后禁止用户登录。

[root@cs6 ~]# chage -m 7 -M 60 -W 10 -I 30 lewen
[root@cs6 ~]# chage -m7 -M60 -W10 -I30 lewen
[root@cs6 ~]# chage -l lewen
Last password change : May 11, 2019
Password expires : Jul 10, 2019
Password inactive : Aug 09, 2019
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 60
Number of days of warning before password expires : 10

    chpasswd命令用于从标准输入中读取一定格式的用户名、密码来批量更新用户的密码,其格式为“用户名:密码”。

-e    默认格式是明文密码,使用e参数则需要加密的密码

命令行批量修改密码

[root@cs6 ~]# chpasswd
root:123456
lewen:123456
[root@cs6 ~]# #<==在新的空行输入Ctrl+D结束输入。

生产案例

范例7-18:批量创建10个用户stu0l-stul0,并且设置8位随机密码,要求不能使用Shell的循环(例如:for、while等),只能用Linux命令及管道实现,此题前面也用passwd的方法实现过,本例将采用chpasswd方法来实现。

1)添加10个用户:

[root@cs6 ~]# echo stu{01..10}|xargs -n 1 useradd
[root@cs6 ~]# tail /etc/passwd
stu01❌1001:1001::/home/stu01:/bin/bash
stu02❌1002:1002::/home/stu02:/bin/bash
stu03❌1003:1003::/home/stu03:/bin/bash
stu04❌1004:1004::/home/stu04:/bin/bash
stu05❌1005:1005::/home/stu05:/bin/bash
stu06❌1006:1006::/home/stu06:/bin/bash
stu07❌1007:1007::/home/stu07:/bin/bash
stu08❌1008:1008::/home/stu08:/bin/bash
stu09❌1009:1009::/home/stu09:/bin/bash
stu10❌1010:1010::/home/stu10:/bin/bash

2)以“用户名:密码”的格式将新添加的用户写入pass.txt文件:

[root@cs6 ~]# echo stu{01..10}:$((RANDOM+10000000))|tr " " "\n" >pass.txt #将空格变成换行符\n
[root@cs6 ~]# cat pass.txt
stu01:10027070
stu02:10027493
stu03:10013323
stu04:10023959
stu05:10001639
stu06:10003292
stu07:10018430
stu08:10012448
stu09:10022958
stu10:10011925

3)chpasswd将从文件pass.txt中读取相关的数据,为对应的用户设置冒号后面的密码:

[root@cs6 ~]# chpasswd <pass.txt
测试所设置密码的有效性:
[root@cs6 ~]# su - stu08
[stu08@cs6 ~]$ su - stu10
Password:
[stu10@cs6 ~]$ whoami
stu10

su命令用于将当前用户切换到指定用户或者以指定用户的身份执行命令或程序。

若省略了命令后面的用户名,则默认切换为root用户。

从root用户切换到普通用户时,不需要任何密码;从普通用户切换到root用户时,需要输入root 密码。

-,-l,-login    切换用户的同时,将用户的家目录、系统环境等重新按切换后的用户初始化*

-c             向Shell传递单个命令

[lewen@cs6 ~]$ whoami
lewen

[lewen@cs6 ~]$ su - root
Password:
[root@cs6 ~]# env |egrep "USER|MAIL|PWD|LOGNAME"
USER=root
MAIL=/var/spool/mail/root
PWD=/root
LOGNAME=root

从上面的范例可以得出如下结论:

“su 用户名”虽然能够切换到对应的用户,但是登录后的环境变量信息还是切换之前用户的环境变量信息。

“su - 用户名”不但能切换到相应的用户,还能将登录后的环境变量一并切换,这是标准规范的操作方法。

如何让系统在每一次开机时都能自动以普通用户启动指定的服务脚本?

[root@cs6 ~]# taiL -1 /ete/rc.local #<==在开机启动文件/etc/rc.local中写入启动命令。
su - lewen -c '/bin/sh /service/scripts/deploy.sh'

    通过普通用户运行服务是一个很好地提升系统安全性的办法,在生产环境中,大多数服务都可以通过普通用户来启动(不用特权端口),而不用root用户启动服务。这样就可以使系统的安全性又提高一个等级,同时管理时使用普通户管理就可以了,管理者不需要有root权限。

su命令总结

1)普通用户切换到root用户,可使用su- 或su - root,但必须输入root密码才能完成切换。

2)root用户切换到普通用户,可使用“su - 普通用户名”的写法。不需要输入任何密码就能完成切换。在CentOS5.X系统中,切换到普通用户后,再执行一些命令如ifconfig时,可能会遭遇环境变量PATH的路径问题,也会因此找不到某些系统命令(一般是/sbin,/usr/sbin等下面的命令),这时就需要使用全路径执行或者调整配置普通用户的PATH变量内容,CentOS6和CentOS7不存在这方面的问题。

3)如果仅希望在某用户下执行命令,而不用直接切换到该用户下来操作,可以使用su - 用户名 -c ”命令” 的方式。