Day18 课堂笔记
1. 调试cron定时任务的技巧总结
1)、查看错误日志
/var/log/cron
学会最小化排除:先清空
>/var/log/cron
然后在测试和观察。
2)、增加执行任务频率调试任务
把频率调快。比如:每天执行的任务,可以修改为每分钟等执行。
3)、把定时任务执行时间比当前时间拖后几分钟
比如需要凌晨三点执行定时任务,而当前系统时间为15:00,咱们就把定时任务时间调整15:05执行 ,有个5分钟的提前量。
4)、调整系统时间(测试环境还凑合,不要用于生产环境)
比如需要凌晨三点执行定时任务,就把系统时间调整到2:55。
5)、通过脚本日志输出调试定时任务
定时任务输出
* * * * * /bin/sh /server/scripts/bak.sh &>/tmp/bak.log
脚本输出:
tar zcvf oldboy.tar.gz ./data &>/tmp/tar.log
注意:
有时候程序只能执行一次。一定要在测试环境测试好,然后直接复制到正式。
一般企业代码发布流程:
办公室测试环境===>IDC机房测试环境===>IDC机房正式环境
这样可以防止在正式环境发生错误,从而影响用户体验,业务稳定。
2. crontab生产故障案例分析及解决
2.1 No space left on device常见企业故障案例
磁盘满的报错,原因往往是inode
被占满了。查看用df -i
因为定时任务没有加&>/dev/null
,定时任务执行的时候把输出给系统root
发邮件。
邮件服务器postfix
服务默认不开,这些给系统发的邮件就会堆在临时目录(大量小文件存在)
CentOS6 /var/spool/clientmqueue/
CentOS7 /var/spool/postfix/maildrop/
预防方法:
1)、尽量将cron
任务里面的命令或脚本中的结尾加上&>/dev/null
,或在写定时任务执行脚本时,把输出定向到文件中(适合所有的情况)
2)、开启邮件服务,不过最好不做,因为邮件服务会带来额外的安全问题
3)、加定时清理任务,比如,将find /var/spool/postfix/maildrop/ -type f -mtime +30|xargs rm -f
放入定时任务,每周处理一次。
2.2 crond export变量生产故障案例
程序通过手动可以执行,放定时任务里不执行
定时任务在执行脚本的时候,多数情况没办法加载环境变量,特别是/etc/profile
。
登录后怎么操作都对,但是就是放到定时任务不行。那是因为以下原因:
命令行中:bash
登录方式
1.手工登录后,加载所有环境变量(~/.bash_profile
,~/.bash_rc
,/etc/profile
,/etc/bashrc
)
2.定时任务执行脚本属于非登录状态,可能加载环境变量(/etc/bashrc
)。
所有运维都会把变量放到此文件/etc/profile
,把这个文件里的变量定义
解决方法:
在执行的脚本中 重新定义。
具体为crond
执行Shell
时只能识别为数不多的系统环境变量,普通环境变量一般是无法识别的,如果在编写的脚本中需要使用变量,最好使用export
重新声明下该变量,以确保脚本正确执行。以后要将其作为一个开发基本规范写上。
3 用户管理知识与应用实践
3.1 信息文件相关
3.1.1 存储用户信息文件/etc/passwd
作用:存储系统用户的信息,/etc/passwd
文件实际内容如下(前五行):
[root@oldboyedu ~]# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
下面以root一行为例介绍各个字段的作用:
root | :x | :0 | :0 | :root | :/root | :/bin/bash |
---|---|---|---|---|---|---|
用户名称 | :用户密码 | :用户UID | :用户GID | :用户说明 | :用户家目录 | :shell解释器 |
3.1.2 存储用户密码信息文件/etc/shadow
/etc/shadow
文件的权限:
[root@oldboyedu ~]# ll /etc/shadow
---------- 1 root root 750 Mar 28 21:00 /etc/shadow
其文件内容为(前5行):
[root@oldboyedu ~]# head -5 /etc/shadow
root:$6$ti9fY3/V$dyKX77ydwxj1FgU1IdITVrn/F//SrQPWtKLX04.qQp2ce20BvGuvs.gC0YyMZepScy9ittLiOU12X7rhM5DRf0:17972:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
下面以bin
为例对各个字段的详细说明:
字段名称 | 注释说明 |
---|---|
bin | 用户名称 |
:* | 用户密码(如果有密码,是加密过的字符串) |
:17834 | 最近更改密码的时间 |
:0 | 禁止修改密码的天数 |
:99999 | 用户必须更改口令的天数 |
:7 | 警告更改密码的期限 |
: | 不活动时间 |
: | 失效时间 |
: | 标志,保留 |
提示:
- 使用useradd命令添加用户会更改/etc/passwd、/etc/shadow、/etc/group、//etc/gshadow文件。
- 使用passwd为用户设置密码会更改/etc/shadow文件。
3.1.3 用户组信息文件/etc/group
/etc/group
文件时存储用户组相关信息的文件,实际内容格式为下:
[root@oldboyedu ~]# head -5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
下面以root一行为例介绍各个字段的作用:
字段名称 | 注释说明 |
---|---|
root | 用户组的名称 |
:x | 用户组密码,通常不设置密码 |
:0 | 用户组ID |
: | 用户组成员 |
提示:
- 使用groupadd添加用户组会更改/etc/group、/etc/gshadow文件。
3.1.4 用户组密码文件/etc/gshadow
/etc/gshadow
是存储用户组密码信息的文件,在实际运维工作中,一般不用这个功能,因此了解即可,在此略过。
md5sum 给文件设置指纹(计算和检查MD5数字信息)
[root@oldboyedu ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
2fe9f002726ed0a138d67cd44722f1a6 /etc/passwd
c2ca41415dca17f1a3dc3c286a9b9bff /etc/shadow
c475144a13d87a400b5e16fe6bd70baf /etc/group
659ef4f533df0fa7e457f87755fb1c27 /etc/gshadow
文件发生变化:
[root@oldboyedu ~]# useradd bingbing
[root@oldboyedu ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
39d60eff90ecd0326fe59e6464b464ad /etc/passwd
0aa8d3b157f042876ec0190a2808a377 /etc/shadow
cee8bc6e85f9dfb9dc0a04e452e834f4 /etc/group
cdfd26351f409ee32fca53a22ad15912 /etc/gshadow
3.2 常见命令汇总
3.2.1 有关用户管理的常见命令汇总
1)和用户直接相关的命令
- useradd 添加用户
- usermod 修改用户信息
- userdel 删除用户及和用户相关联的配置或文件
2)和用户密码直接相关的命令
passwd 为用户设置密码
chage 修改用户密码属性信息
3)其他用户相关命令
id 查看用户的UID、GID及所归属的用户信息
su 切换用户角色工具
sudo 以一个其它用户身份(主要是root用户)执行命令的工具,普通用户用来提权的工具
visudo 用来编辑suders配置文件(sudo授权文件)的工具
3.2.2 有关用户组管理的常见命令汇总
命令 | 注释说明 |
---|---|
groupadd | 添加用户组 |
groupdel | 删除用户组 |
groupmod | 修改用户组信息 |
gpasswd | 为用户组设置密码 |
groups | 显示用户组所属的用户组 |
newgrp | 更改用户所属的有效用户组 |
3.3 添加用户命令useradd
1. useradd命令的工作原理介绍
不带参数添加用户时,首先会读取/etc/login.defs
和/etc/default/useradd
配置文件中的预定义规则,并根据设置的规则添加用户,同时会向/etc/passwd
和/etc/group
文件添加新建的用户和用户组记录。当然,/etc/shadow
和/etc/gshadow
也会同步生成记录,同时系统还会根据/etc/login.defs
和/etc/default/useradd
配置文件中的信息建立用户的家目录,并复制/etc/skel
中的所有隐藏的环境配置文件到新用户的家目录中,以完成对用户环境的初始化设置。
1.1)和创建用户组相关的文件/etc/login.defs
下面是CentOS 7.6版本的/etc/login.defs文件内容及注释说明
[root@oldboyedu ~]# cat /etc/login.defs|grep -v "^$"
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail <-->设定用户对应的mail文件所在路径
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999 <-->密码最长可以使用的天数
PASS_MIN_DAYS 0 <-->更换密码的最小天数
PASS_MIN_LEN 5 <-->密码的最小长度
PASS_WARN_AGE 7 <-->密码失效前提前多少天开始警告
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000 <-->普通用户默认最小UID为1000
UID_MAX 60000 <-->普通用户默认最大UID为60000
# System accounts
SYS_UID_MIN 201 <-->系统用户默认最小UID为201
SYS_UID_MAX 999 <-->系统用户默认最大UID为999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000 <-->普通用户组默认最小GID为1000
GID_MAX 60000 <-->普通用户组默认最大GID为60000
# System accounts
SYS_GID_MIN 201 <-->系统用户组默认最小GID为201
SYS_GID_MAX 999 <-->系统用户组默认最大GID为999
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME yes <-->是否创建用户家目录
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077 <-->家目录对应的umask默认值
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes <-->删除用户同时删除用户组(该组没有其他成员)
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512 <-->密码加密算法SHA512
1.2)和创建用户相关的文件/etc/default/useradd
内容如下:
[root@oldboyedu ~]#
[root@oldboyedu ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 <-->依赖于/etc/login.defs的USERGROUPS_ENAB参数,如果为no,则此处控制
HOME=/home <-->把用户的家目录建在/home目录下
INACTIVE=-1 <-->是否启用用户过期停权,-1表示不启用
EXPIRE= <-->用户终止日期,不设置表示不启用
SHELL=/bin/bash <-->新用户默认所用的shell解释器类型
SKEL=/etc/skel <-->配置新用户家目录的默认环境变量存放路径
CREATE_MAIL_SPOOL=yes <-->创建mail文件
1.3)和创建用户相关的目录/etc/skel
内容如下:
[root@oldboyedu ~]# ls -lA /etc/skel/
total 12
-rw-r--r--. 1 root root 18 Oct 31 01:07 .bash_logout <-->用户环境变量,退出时加载
-rw-r--r--. 1 root root 193 Oct 31 01:07 .bash_profile <-->用户环境变量,登录时加载
-rw-r--r--. 1 root root 231 Oct 31 01:07 .bashrc <-->用户环境变量,登录时加载
企业面试案例:
使用oldboy用户登录到Linux系统后,发现提示符为如下所示异常情况,请问该如何恢复到正常的Linux命令行提示符情况?
-bash-4.2$
-bash-4.2$
解答:
首先模拟故障重现,如下步骤:
[root@oldboyedu ~]# su - oldboy <--> 切换oldboy用户下
Last login: Sat Mar 30 09:42:31 CST 2019 from 10.0.0.1 on pts/0
[oldboy@oldboyedu ~]$ rm -f .bash* <-->故障原因就是用户家目录下的环境变量不存在了
[oldboy@oldboyedu ~]$ logout <-->快捷键(Ctrl+d)退出当前环境
[root@oldboyedu ~]# su - oldboy <-->重新切到oldboy用户下
Last login: Sat Mar 30 12:19:06 CST 2019 on pts/0
-bash-4.2$ <-->故障重现
下面是故障恢复方案及步骤:
方法1:永久生效(正确方法)
-bash-4.2$ cp /etc/skel/.bash* ~/ <-->从/etc/skel中将所有环境变量文件复制回来,注意用户
-bash-4.2$ logout <-->快捷键(Ctrl+d)退出当前环境
[root@oldboyedu ~]# su - oldboy <-->重新切到oldboy用户下
Last login: Sat Mar 30 12:19:55 CST 2019 on pts/0
[oldboy@oldboyedu ~]$ <-->故障排除
-bash-4.2$ source ./.bash_profile ./.bashrc <-->若还未生效,则执行此命令。
[oldboy@oldboyedu ~]$ <-->故障排除
-bash-4.2$ cp /etc/skel/.bash* . <-->没权限拷贝怎么办
cp: cannot create regular file ‘./.bash_logout’: Permission denied
cp: cannot create regular file ‘./.bash_profile’: Permission denied
cp: cannot create regular file ‘./.bashrc’: Permission denied
-bash-4.2$ logout <-->重新切到oldboy用户下
[root@oldboyedu ~]# cd /home/oldboy
[root@oldboyedu /home/oldboy# cp /etc/skel/.bash* .
[root@oldboyedu /home/oldboy]# su - oldboy
Last login: Sat Mar 30 17:00:52 CST 2019 on pts/0
[oldboy@oldboyedu ~]$
方法2:临时生效(不推荐)
执行以下命令:
export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\] \w\[\e[0m\]]\$'
useradd命令的常用参数介绍
如表所示:
参数选项 | 注释说明 |
---|---|
-c | 设置新用户在passwd文件中的说明字段的信息 |
-d | 新用户每次登入时使用的家目录 |
-e | 用户终止日期。日期指定格式为MM/DD/YY |
-f | 用户过期几日后永久停权 |
-g | 指定新用户所属的用户组(须系统存在) |
-G | 指定新用户所属的多个不同的用户组,用“,”隔开 |
-m | 创建并指定用户家目录 |
-M | 不建立用户的家目录 |
-s | 指定解释器 |
-u | 指定用户ID |
范例1: 不加任何参数,添加用户alex
[root@oldboyedu ~]# useradd alex
[root@oldboyedu ~]# ls -ld /home/alex/
drwx------ 2 alex alex 62 Mar 30 14:56 /home/alex/
[root@oldboyedu ~]# ls -la /home/alex/
total 12
drwx------ 2 alex alex 62 Mar 30 14:56 .
drwxr-xr-x. 4 root root 32 Mar 30 14:56 ..
-rw-r--r-- 1 alex alex 18 Oct 31 01:07 .bash_logout
-rw-r--r-- 1 alex alex 193 Oct 31 01:07 .bash_profile
-rw-r--r-- 1 alex alex 231 Oct 31 01:07 .bashrc
[root@oldboyedu ~]# grep -w 'alex' /etc/passwd
alex:x:1001:1001::/home/alex:/bin/bash
[root@oldboyedu ~]# tail -1 /etc/group
alex:x:1001:
[root@oldboyedu ~]# tail -1 /etc/shadow
alex:!!:17985:0:99999:7:::
[root@oldboyedu ~]# tail -1 /etc/gshadow
alex:!::
范例2: useradd的-g、-u参数的使用示例
[root@oldboyedu ~]# useradd zuma -u 1111 -g root
[root@oldboyedu ~]# id zuma
uid=1111(zuma) gid=0(root) groups=0(root)
范例3: useradd的-M、-s参数的使用示例
[root@oldboyedu ~]# useradd mysql -s /sbin/nologin -M
[root@oldboyedu ~]# tail -1 /etc/passwd
mysql:x:1112:1112::/home/mysql:/sbin/nologin
范例4: useradd的-e参数的使用示例
[root@oldboyedu ~]# date +%F
2019-03-30
[root@oldboyedu ~]# useradd pig -e "2019/04/30"
[root@oldboyedu ~]# chage -l pig
Last password change : Mar 30, 2019
Password expires : never
Password inactive : never
Account expires : Apr 30, 2019 <-->修改成功
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
范例5: useradd的-c、-u、-G、-s、-d、-m参数的使用示例
[root@oldboyedu ~]# useradd -c "good training" -u 2222 -G root,oldboy,sa -s /bin/sh -d /home/luffy oldboyedu
[root@oldboyedu ~]# grep 'oldboyedu' /etc/passwd
oldboyedu:x:2222:2222:good training:/home/luffy:/bin/sh
[root@oldboyedu ~]# id oldboyedu
uid=2222(oldboyedu) gid=2222(oldboyedu) groups=2222(oldboyedu),0(root),1000(oldboy),1114(sa)
[root@oldboyedu ~]# ls -ld /home/luffy/
drwx------ 2 oldboyedu oldboyedu 62 Mar 30 15:09 /home/luffy/
useradd命令的-D参数介绍
useradd -D的作用是改变配置文件/etc/default/useradd文件的默认设置值,也可直接编辑。
范例1:设置添加用户时的默认解释器类型为/sbin/nologin
[root@oldboyedu ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
[root@oldboyedu ~]# grep -w "SHELL" /etc/default/useradd
SHELL=/bin/bash
[root@oldboyedu ~]# useradd -D -s /sbin/nologin
[root@oldboyedu ~]# grep -w "SHELL" /etc/default/useradd
SHELL=/sbin/nologin
[root@oldboyedu ~]# useradd newuser
[root@oldboyedu ~]# grep 'newuser' /etc/passwd
newuser:x:2223:2223::/home/newuser:/sbin/nologin
[root@oldboyedu ~]# useradd -D -s /bin/bash
[root@oldboyedu ~]# grep -w "SHELL" /etc/default/useradd
SHELL=/bin/bash
2.usermod:用户信息修改相关命令
usermod命令的功能很强大,但在生产场景中使用的频率并不是很高,参数和useradd参数大多数相同。
范例1: usermod的-c、-u、-G、-s、-d、参数的使用示例
[root@oldboyedu ~]# grep 'oldboyedu' /etc/passwd
oldboyedu:x:2222:2222:good training:/home/luffy:/bin/sh
[root@oldboyedu ~]# id oldboyedu
uid=2222(oldboyedu) gid=2222(oldboyedu) groups=2222(oldboyedu),0(root),1000(oldboy),1114(sa)
[root@oldboyedu ~]# ls -ld /home/luffy/
drwx------ 2 oldboyedu oldboyedu 62 Mar 30 15:09 /home/luffy/
[root@oldboyedu ~]# usermod -c "good" -u 3333 -G sa -s /sbin/nologin -d /home/oldboyedu oldboyedu
[root@oldboyedu ~]# grep 'oldboyedu' /etc/passwd
oldboyedu:x:3333:2222:good:/home/oldboyedu:/sbin/nologin
[root@oldboyedu ~]# id oldboyedu
uid=3333(oldboyedu) gid=2222(oldboyedu) groups=2222(oldboyedu),1114(sa)
[root@oldboyedu ~]# ls -l /home/
total 0
drwx------ 2 alex alex 62 Mar 30 14:56 alex
drwx------ 2 2222 oldboyedu 62 Mar 30 15:09 luffy
drwx------ 2 newuser newuser 62 Mar 30 15:23 newuser
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
drwx------ 2 pig pig 62 Mar 30 15:04 pig
drwx------ 2 zuma root 62 Mar 30 15:00 zuma
[root@oldboyedu ~]#
从上面可以发现-d参数并未创建新的家目录,下图为演示效果:
可以理解为:-m -d 参数将原家目录改个名字而已
[root@oldboyedu ~]# ll /home/
total 0
drwxr-xr-x 2 root root 80 Mar 30 17:02 abc
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
[root@oldboyedu ~]# ll /home/abc/
total 0
-rw-r--r-- 1 root root 0 Mar 30 16:14 oldboy.txt
[root@oldboyedu ~]# usermod -md /home/123 oldboyedu
[root@oldboyedu ~]# ll /home/
total 0
drwxr-xr-x 2 root root 80 Mar 30 17:02 123
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
[root@oldboyedu ~]# ll /home/123/
total 0
-rw-r--r-- 1 root root 0 Mar 30 16:14 oldboy.txt
[root@oldboyedu ~]# usermod -md /home/456 oldboyedu
[root@oldboyedu ~]# ll /home
total 0
drwxr-xr-x 2 root root 80 Mar 30 17:02 456
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
[root@oldboyedu ~]# ll /home/456/
total 0
-rw-r--r-- 1 root root 0 Mar 30 16:14 oldboy.txt
3.userdel:删除用户相关命令
参数:
- -f 强制删除用户,即使用户当前已登录
- -r删除用户的同时,删除与用户相关的所有文件
提示:在生产环境中,最好不要直接删除用户,而是修改/etc/passwd配置文件,将要删除的用户用#号注释掉即可,从而防止出现无法弥补的错误。
4.groupadd:添加用户组命令
参数:
- -g gid 指定用户组的gid
- -f 新增一个账户,强制覆盖一个已存在的用户组
5.groupdel:删除用户组命令
略
6.passwd:修改用户密码命令
参数:
- -stdin 从标准输入读取密码字符串
使用范例:
范例1:修改用户密码示例:
(1)修改自身用户:
root用户修改自身,不需要提供原始密码
[root@oldboyedu ~]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
非root用户修改自身,需要提供原始密码
[oldgirl@oldboyedu ~]$ whoami
oldgirl
[oldgirl@oldboyedu ~]$ passwd
Changing password for user oldgirl.
Changing password for oldgirl.
(current) UNIX password: <-->提供原始密码
New password:
BAD PASSWORD: The password is too similar to the old one <-->密码太简单
New password:
BAD PASSWORD: The password is shorter than 8 characters <-->密码短
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
(2)修改普通用户:
[root@oldboyedu ~]# useradd oldgirl
[root@oldboyedu ~]# passwd oldgirl
Changing password for user oldgirl.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
范例2:显示账号密码信息示例:
[oldgirl@oldboyedu ~]$ passwd -S oldgirl
Only root can do that. <-->只有root用户才能执行
[oldgirl@oldboyedu ~]$ logout
[root@oldboyedu ~]# passwd -S oldgirl
oldgirl PS 2019-03-30 0 99999 7 -1 (Password set, SHA512 crypt.)
范例3:一条命令非人工交互式设置密码(生产使用技巧)
[root@oldboyedu ~]# echo "12345678" |passwd --stdin oldgirl
Changing password for user oldgirl.
passwd: all authentication tokens updated successfully.
范例4:多个参数的示例
[root@oldboyedu ~]# chage -l oldgirl
Last password change : Mar 30, 2019
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
[root@oldboyedu ~]# passwd -n 7 -x 60 -w 10 -i 30 oldgirl
Adjusting aging data for user oldgirl.
passwd: Success
[root@oldboyedu ~]# chage -l oldgirl
Last password change : Mar 30, 2019
Password expires : May 29, 2019
Password inactive : Jun 28, 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
企业场景下用户及密码管理思路
- 用户密码要足够复杂,多种字符组合
- 统一管理(采用微软活动目录或openLDAP开源工具)
- 动态密码:动态口令等
7.chpasswd:批量更新用户的密码命令
范例1:批量修改密码的实践
系统存在的用户:oldboy1和oldboy2(没有需创建)
[root@oldboyedu ~]# useradd oldboy1
[root@oldboyedu ~]# useradd oldboy2
[root@oldboyedu ~]# id oldboy1
uid=3335(oldboy1) gid=3335(oldboy1) groups=3335(oldboy1)
[root@oldboyedu ~]# id oldboy2
uid=3336(oldboy2) gid=3336(oldboy2) groups=3336(oldboy2)
方法1:命令行直接输入并执行
[root@oldboyedu ~]# chpasswd
oldboy1:123456 <-->一行一行输入
oldboy2:123456 <-->一行一行输入
<-->空行处,按Ctrl+d结束输入
[root@oldboyedu ~]#
方法2:把用户和密码写入文件里执行
[root@oldboyedu ~]# cat >user.txt < oldboy1:12345678
> oldboy2:12345678 <-->格式:用户名:密码,一行一个用户
> EOF
[root@oldboyedu ~]# cat user.txt
oldboy1:12345678
oldboy2:12345678
[root@oldboyedu ~]# chpasswd
范例2:批量创建用户、批量修改密码、批量删除用户(不需脚本实现)。
批量创建用户:
[root@oldboyedu ~]# ls /home/
oldboy
[root@oldboyedu ~]# seq -w 20|sed -nr 's#(.*)#useradd oldboy\1#gp'|bash
[root@oldboyedu ~]# ls /home/|xargs -n7
oldboy oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06
oldboy07 oldboy08 oldboy09 oldboy10 oldboy11 oldboy12 oldboy13
oldboy14 oldboy15 oldboy16 oldboy17 oldboy18 oldboy19 oldboy20
[root@oldboyedu ~]# tail -2 /etc/passwd
oldboy19:x:3355:3355::/home/oldboy19:/bin/bash
oldboy20:x:3356:3356::/home/oldboy20:/bin/bash
批量修改密码:
[root@oldboyedu ~]# tail -2 /etc/shadow
oldboy19:!!:17985:0:99999:7:::
oldboy20:!!:17985:0:99999:7:::
[root@oldboyedu ~]# seq -w 20|sed -nr 's#(.*)#oldboy\1:123456#gp'|chpasswd
[root@oldboyedu ~]# tail -2 /etc/shadow
oldboy19:$6$jFht4/j7xhsJBX5$HVD1fg2y5rxwlNmZIAvZehgp.klwt5WEE7Mh6x67ASgpsK3o12sOfdplfqbmlA6Rpzq7JOGHysdqI7rvryb1L/:17985:0:99999:7:::
oldboy20:$6$WYEUw/WyJ$vrGmOtFniEnHSgcWVGZZfcmci/KJ9.MWzO3OkjI74aRiU/UUzbZ0W2h/n1LanHxFGURRfC.538n2DJ04zQR0D.:17985:0:99999:7:::
or
[root@oldboyedu ~]# seq -w 20|sed -nr 's#(.*)#echo "123456"|passwd --stdin oldboy\1#gp'|bash &>1.txt
[root@oldboyedu ~]# tail -6 1.txt
Changing password for user oldboy18.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy19.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy20.
passwd: all authentication tokens updated successfully.
批量删除用户:
[root@oldboyedu ~]# ls /home/|xargs -n7
oldboy oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06
oldboy07 oldboy08 oldboy09 oldboy10 oldboy11 oldboy12 oldboy13
oldboy14 oldboy15 oldboy16 oldboy17 oldboy18 oldboy19 oldboy20
[root@oldboyedu ~]# seq -w 20|sed -nr 's#(.*)#userdel -r oldboy\1#gp'|bash
[root@oldboyedu ~]# ls /home/|xargs -n7
oldboy
[root@oldboyedu ~]# tail /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
alex:x:1001:1001::/home/alex:/bin/bash
zuma:x:1111:0::/home/zuma:/bin/bash
mysql:x:1112:1112::/home/mysql:/sbin/nologin
pig:x:1113:1113::/home/pig:/bin/bash
oldboyedu:x:3333:2222:good:/home/456:/bin/bash
newuser:x:2223:2223::/home/newuser:/sbin/nologin
oldgirl:x:3334:3334::/home/oldgirl:/bin/bash
oldboy1:x:3335:3335::/home/oldboy1:/bin/bash
oldboy2:x:3336:3336::/home/oldboy2:/bin/bash
8.chage:修改用户密码有效期命令
参数:
- -l 显示用户有效期信息
范例1:多个参数示例
[root@oldboyedu ~]# useradd range
[root@oldboyedu ~]# chage -m7 -M60 -w10 -I30 range
[root@oldboyedu ~]# chage -l range
Last password change : Mar 30, 2019
Password expires : May 29, 2019
Password inactive : Jun 28, 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
9 用户查询相关命令