1.1 useradd:创建用户
【功能说明】
命令useradd可用于创建新的用户或者更改用户的信息
【语法格式】
useradd [options] [login]
useradd [选项] [用户名]
useradd -D [options]
在使用useradd命令时,若不加任何参数选项,后面直接跟所添加的用户名,那么系统首先会读取/etc/login.defs(用户定义文件)和/etc/default/useradd(用户默认配置文件)文件中所定义的参数和规则,然后根据所设置的规则添加
【选项说明】
参数选项 |
解释说明(带*的为重点) |
-c comment |
新用户password文件中的说明栏(冒号分隔后的第五列) |
-d home_dir |
新用户每次登入时所使用的家目录 |
-e expire_data |
用户终止日期。日期的指定格式为YYYY-MM-DD |
-f inactive_days |
用户过期几日后永久停权。当值为0时用户立即被停权,而当值为-1时则关闭此功能,预设值为-1. |
-g initial_group |
指定用户对应的用户组,用户组名必须为系统现已存在的名称(*) |
-G group,[...] |
定义此用户为多个不同组的成员,每个用户组使用逗号(,)分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。 |
-m |
用户目录如不存在则自动建立 |
-M |
不建立家目录,优先于/etc/login.dfs文件设定。创建虚拟化用户时一般不需要建立家目录,部署应用服务时则需要创建虚拟用户。 |
-n |
默认情况下用户的用户与组用户的名称是相同的,如果命令添加了-n参数,就不会生成与用户同名的用户组了。 |
-r |
此参数是用来建立 |
-s shell |
用户登录后使用的shell名称,默认值为不填写,这样系统会帮助指定预设的登录shell(根据/etc/default/useradd预设的值) |
-u uid |
用户的ID值,这个值必须是唯一的,除非用-o选项,数字不可为负值(*) |
不加选项-D的参数选项及说明
命令useradd加-D选项参数及说明:改变新建用户的预设值
参数选项 |
解释说明(带*的为重点) |
-b default_home |
定义用户家目录的基本目录,当前用户家目录不存在时,此目录将作为家目录生效 |
-e default_expire_data |
用户账号停止日期,格式为YYYY-MM-DD,同useradd的-e参数 |
-f default_inactive |
用户过期后几日停权。同useradd -f参数 |
-g default_group |
新用户起始用户名或ID,用户组名必须为现已存在的名称。用户组ID也必须为现已存在的用户组。同useradd的-g参数 |
-s default_shell |
用户登录后使用的shell名称,修改后新加入的用户都将使用此shell类型,同useradd -s |
【使用范例】
不加任何参数添加用户
[root@A ~]# useradd yanhh [root@A ~]# ls -ld /home/yanhh drwx------ 3 yanhh yanhh 4096 1月 29 10:34 /home/yanhh [root@A ~]# grep -w yanhh /etc/passwd yanhh:x:506:506::/home/yanhh:/bin/bash [root@A ~]# grep -w yanhh /etc/shadow yanhh:!!:17560:0:99999:7::: [root@A ~]# grep -w yanhh /etc/group yanhh:x:506: [root@A ~]# grep -w yanhh /etc/gs gshadow gshadow- gssapi_mech.conf [root@A ~]# grep -w yanhh /etc/gshadow yanhh:!::
命令useradd的-g、-u参数,执行useradd[参数] username添加用户。
[root@A ~]# groupadd -g 801 sb [root@A ~]# useradd -g sb -u 901 yanhuih [root@A ~]# id yanhuih uid=901(yanhuih) gid=801(sb) 组=801(sb)
命令useradd的-M、-s参数的例子
[root@A ~]# useradd -M -s /sbin/nologin yanyan [root@A ~]# ls -ld /home/yanyan ls: 无法访问/home/yanyan: 没有那个文件或目录 [root@A ~]# grep -w yanyan /etc/passwd yanyan:x:902:902::/home/yanyan:/sbin/nologin
命令useradd的-c、-u、-G、-s、-d、-m、-e、-f等多个参数组合的综合例子
添加用户inca,并设置用户注释信息为“SYSUser”,UID指定为806,归属为用户组root、sb组成员,其shell类型为/bin/sh,设置家目录为/tmp/inca,用户过期时间为20180202,过期两天后停权。
[root@A ~]# useradd -u 806 -s /bin/sh -c SysUser -G root,sb -e "2018/02/02" -f 2 -d /tmp/inca inca [root@A ~]# tail -1 /etc/passwd inca:x:806:806:SysUser:/tmp/inca:/bin/sh
inca |
:x |
:806 |
:1002 |
:SysUser |
:/tmp/inca |
:/bin/sh |
账号名称 |
:账号密码 |
:账号UID |
:账户组GID |
:用户说明 |
:用户家目录 |
:shell解释器 |
[root@A ~]# id inca uid=806(inca) gid=806(inca) 组=806(inca),0(root),801(sb) [root@A ~]# change -l inca -bash: change: command not found [root@A ~]# id inca uid=806(inca) gid=806(inca) 组=806(inca),0(root),801(sb) [root@A ~]# chage -l inca Last password change : Jan 29, 2018 Password expires : never Password inactive : never Account expires : Feb 02, 2018 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@A ~]# tail -1 /etc/passwd inca:x:806:806:SysUser:/tmp/inca:/bin/sh [root@A ~]# tail -1 /etc/shadow inca:!!:17560:0:99999:7:2:17564:
命令useradd -D参数的使用说明及案例实践
[root@A ~]# 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 #配置新用户家目录的默认文件存放路径。前文提到的/etc/skell,就是在这 里配置生效的,即当我们用useradd添加用户时,家目录下的文件,都是 从这里配置的目录中复制过去的 CREATE_MAIL_SPOOL=yes #创建mail文件
修改实践
[root@A ~]# cp /etc/default/useradd{,.bak} [root@A ~]# useradd -D -s /bin/sh [root@A ~]# diff /etc/default/useradd{,.bak} 6c6 < SHELL=/bin/sh --- > SHELL=/bin/bash [root@A ~]# useradd -D -e "2018/07/12" [root@A ~]# diff /etc/default/useradd{,.bak} 5,6c5,6 < EXPIRE=2018/07/12 < SHELL=/bin/sh --- > EXPIRE= > SHELL=/bin/bash
添加一个新用户
[root@A ~]# useradd nihao [root@A ~]# tail -1 /etc/passwd nihao:x:903:903::/home/nihao:/bin/sh [root@A ~]# chage -l nihao Last password change : Jan 29, 2018 Password expires : never Password inactive : never Account expires : Jul 12, 2018 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@A ~]# cp /etc/default/useradd{.bak,}
1.2命令usermod:修改用户信息
【功能说明】
命令usermod用于修改系统用户已经存在的账户信息
【语法格式】
useradd [options] [login]
useradd [选项] [用户名]
【选项说明】
命令usermod的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-c comment |
修改password文件中的说明栏(冒号分隔后的第五列) |
-d home_dir |
修改户每次登入时所使用的家目录 |
-e expire_data |
修改用户终止日期。日期的指定格式为YYYY-MM-DD |
-f inactive_days |
修改用户过期几日后永久停权。当值为0时用户立即被停权,而当值为-1时则关闭此功能,预设值为-1. |
-g initial_group |
修改指定用户对应的用户组,用户组名必须为系统现已存在的名称(*) |
-G group,[...] |
定义此用户为多个不同组的成员,每个用户组使用逗号(,)分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。 |
-m |
用户目录如不存在则自动建立 |
-M |
不建立家目录,优先于/etc/login.dfs文件设定。创建虚拟化用户时一般不需要建立家目录,部署应用服务时则需要创建虚拟用户。 |
-n |
默认情况下用户的用户与组用户的名称是相同的,如果命令添加了-n参数,就不会生成与用户同名的用户组了。 |
-r |
此参数是用来建立 |
-s shell |
修改用户登录后使用的shell名称,默认值为不填写,这样系统会帮助指定预设的登录shell(根据/etc/default/useradd预设的值) |
-u uid |
修改用户的ID值,这个值必须是唯一的,除非用-o选项,数字不可为负值(*) |
-a |
追加用户到用户组,仅与-G参数连用 |
-l |
修改用户的账号名称 |
-L |
锁定用户密码,不让用户修改密码 |
-U |
解除密码锁定 |
【使用范例】
命令useradd的-c、-u、-G、-s、-d、-m、-e、-f等多个参数组合的综合例子
修改用户inca,并设置用户注释信息为“TmpUser”,UID指定为999,归属为用户组root、sb、tech组成员,其shell类型为/sbin/nologin,设置家目录为/homeinca,用户过期时间为20190202,过期30天后停权。
[root@A ~]# groupadd tech [root@A ~]# usermod -u 999 -s /sbin/nologin -c TmpUser -G root,sb,tech -e "2019/02/02" -f 30 -d /home/inca inca [root@A ~]# grep -w inca /etc/passwd inca:x:999:806:TmpUser:/home/inca:/sbin/nologin [root@A ~]# id inca uid=999(inca) gid=806(inca) 组=806(inca),0(root),801(sb),904(tech) [root@A ~]# grep -w inca /etc/shadow inca:!!:17560:0:99999:7:30:17929: [root@A ~]# chage -l Usage: chage [options] [LOGIN] Options: -d, --lastday LAST_DAY set date of last password change to LAST_DAY -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE -h, --help display this help message and exit -I, --inactive INACTIVE set password inactive after expiration to INACTIVE -l, --list show account aging information -m, --mindays MIN_DAYS set minimum number of days before password change to MIN_DAYS -M, --maxdays MAX_DAYS set maximim number of days before password change to MAX_DAYS -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
1.3 命令userdel:删除用户
【功能说明】
命令userdel命令用于删除指定的用户及与该用户相关的文件
【语法格式】
useradd [options] [login]
useradd [选项] [用户名]
命令userdel参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-f |
强制删除用户,即使用户当前已登录 |
-r |
删除用户的同时,删除与用户相关的所有文件 |
【使用案例】
不加参数删除用户
[root@A ~]# tail -4 /etc/passwd yanhuih:x:901:801::/home/yanhuih:/bin/bash yanyan:x:902:902::/home/yanyan:/sbin/nologin inca:x:999:806:TmpUser:/home/inca:/sbin/nologin nihao:x:903:903::/home/nihao:/bin/sh [root@A ~]# ll -d /home/yanhuih drwx------ 3 yanhuih sb 4096 1月 29 10:51 /home/yanhuih [root@A ~]# userdel yanhuih [root@A ~]# grep -w yanhuih /etc/passwd [root@A ~]# ll -d /home/yanhuih drwx------ 3 901 sb 4096 1月 29 10:51 /home/yanhuih
加参数-r删除用户及家目录
root@A ~]# tail -6 /etc/passwd yhh2:x:504:504::/home/yhh2:/bin/bash yhh3:x:505:505::/home/yhh3:/bin/bash yanhh:x:506:506::/home/yanhh:/bin/bash yanyan:x:902:902::/home/yanyan:/sbin/nologin inca:x:999:806:TmpUser:/home/inca:/sbin/nologin nihao:x:903:903::/home/nihao:/bin/sh [root@A ~]# userdel -r yhh3 [root@A ~]# grep -w yhh3 /etc/paaswd grep: /etc/paaswd: 没有那个文件或目录 [root@A ~]# ll -d /home/yhh3 ls: 无法访问/home/yhh3: 没有那个文件或目录
1.4 命令groupadd:创建新的用户组
【功能说明】
命令groupadd用于创建新的用户组。
【语法格式】
groupadd [options] [login]
groupadd [选项] [用户名]
【选项说明】
命令groupadd参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-g gid |
指定用户GID,除非接-o参数,否则GID值唯一且不为负,如果不指定-g,GID从500开始 |
-f |
新增一个账户,强制覆盖一个已经存在的组账户 |
【使用范例】
[root@A ~]# tail -1 /etc/group tech:x:904:inca [root@A ~]# groupadd -g 666 test1 [root@A ~]# tail -1 /etc/group test1:x:666: [root@A ~]# tail -1 /etc/gshadow test1:!::
1.5 命令groupdel:删除用户组
【功能说明】
命令groupdel用于删除指定的用户组,此命令的使用频率极低。
【语法格式】
groupadd [login]
groupadd [用户名]
【使用案例】
[root@A ~]# groupdel root groupdel: cannot remove the primary group of user 'root' [root@A ~]# groupdel test1 [root@A ~]# grep -w test1 /etc/group
1.6 命令passwd:修改用户密码
【功能说明】
命令passwd可以修改用户及密码过期时间等内容,是工作中经常用到的命令,普通用户和超级用户都可以运行passwd命令,但普通用户只能更改自身的用户密码,超级用户root则可以设置或所有用户密码。
【语法格式】
passwd [options] [username]
passwd [选项] [用户名]
【选项说明】
参数选项 |
解释说明(带*的为重点) |
-k |
为密码已经过期的用户更新有效期 |
-l |
锁定用户,被锁定的用户将不能登录,仅root用户有权使用该选项 |
--stdin |
从标准输入读取密码字符串(*) |
-u |
解除对用户的锁定。仅root用户有权使用该选项 |
-d |
删除用户密码,使密码为空,仅root权限使用 |
-e |
使用用户密码立即过期,将在用户下次登录时强制要求用户修改密码,仅root使用 |
-n |
设置修改密码的最短天数,仅root用户使用 |
-x |
设置修改密码的最长天数,仅root使用 |
-w |
设置用户在密码过期前收到警告信息的天数,仅root使用 |
-i |
设置密码过期多少天数禁用用户,仅root使用 |
-S |
显示用户密码相关的简单描述,仅root使用 |
【使用范例】
修改用户自身密码
[root@A ~]# passwd 更改用户 root 的密码 。 新的 密码: 无效的密码: 过于简单化/系统化 无效的密码: 过于简单 重新输入新的 密码: passwd: 所有的身份验证令牌已经成功更新
设置及修改普通用户的密码
[root@A ~]# passwdyhh2 -bash: passwdyhh2: command not found [root@A ~]# passwd yhh2 更改用户 yhh2 的密码 。 新的 密码: 无效的密码: 过于简单化/系统化 无效的密码: 过于简单 重新输入新的 密码: passwd: 所有的身份验证令牌已经成功更新。 [root@A ~]# su - yhh2 [yhh2@A ~]$ passwd 更改用户 yhh2 的密码 。 为 yhh2 更改 STRESS 密码。 (当前)UNIX 密码: 新的 密码: 重新输入新的 密码: passwd: 所有的身份验证令牌已经成功更新。
显示密码的信息
[root@A ~]# su - yhh2 [yhh2@A ~]$ passwd -S yhh2 只有根用户才能进行此操作。 [yhh2@A ~]$ su - root 密码: [root@A ~]# passwd -S yhh2 yhh2 PS 2018-01-29 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)
一条命令设置密码(批量设置密码)
[root@A ~]# echo "123456"|passwd --stdin yhh2 更改用户 yhh2 的密码 。 passwd: 所有的身份验证令牌已经成功更新。
要求yhh1用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知用户,过期后30天禁止用户登录。
[root@A ~]# passwd -n 7 -x 60 -w 10 -i 30 yhh1 调整用户密码老化数据yhh1。 passwd: 操作成功 [root@A ~]# chage -l yhh1 Last password change : Jan 23, 2018 Password expires : Mar 24, 2018 Password inactive : Apr 23, 2018 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
【生产案例】
批量建立10个用户stu01-stu10,并设置8位随机密码,要求不能使用shell的循环,只能使用命令及管道
第一步:生成符合题意10个用户名
[root@A ~]# echo stu{01..10} stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
第二步:使用tr命令将上述10个用户名竖行显示
[root@A ~]# echo stu{01..10}|tr " " " " stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
第三步:在每行的前面加上useradd命令。既可以拼出添加用户的所有命令
[root@A ~]# echo stu{01..10}|tr " " " "|sed 's#(.*)#useradd 1#g' sed:-e 表达式 #1,字符 19:“s”命令的RHS非法引用1 [root@A ~]# echo stu{01..10}|tr " " " "|sed -r 's#(.*)#useradd 1#g' useradd stu01 useradd stu02 useradd stu03 useradd stu04 useradd stu05 useradd stu06 useradd stu07 useradd stu08 useradd stu09 useradd stu10
第四步:定义随机8位随机变量
[root@A ~]# pass=$((RANDOM+88888888)) [root@A ~]# echo $pass 88904790
第五步:以第三步为基础,拼出 echo "随机密码"|passwd --stdin 用户名
[root@A ~]# echo stu{01..10}|tr " " " "|sed -r 's#(.*)#useradd 1 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin 1 #g' useradd stu01 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu01 useradd stu02 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu02 useradd stu03 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu03 useradd stu04 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu04 useradd stu05 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu05 useradd stu06 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu06 useradd stu07 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu07 useradd stu08 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu08 useradd stu09 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu09 useradd stu10 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu10
第六步:为了建立用户后更好登录,把用户和密码重定向保存在文件中(红色)
[root@A ~]# echo stu{01..10}|tr " " " "|sed -r 's#(.*)#useradd 1 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin 1;echo -e "1`echo "$pass"`">>/tmp/test #g' useradd stu01 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu01;echo -e "stu01`echo "$pass"`">>/tmp/test useradd stu02 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu02;echo -e "stu02`echo "$pass"`">>/tmp/test useradd stu03 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu03;echo -e "stu03`echo "$pass"`">>/tmp/test useradd stu04 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu04;echo -e "stu04`echo "$pass"`">>/tmp/test useradd stu05 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu05;echo -e "stu05`echo "$pass"`">>/tmp/test useradd stu06 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu06;echo -e "stu06`echo "$pass"`">>/tmp/test useradd stu07 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu07;echo -e "stu07`echo "$pass"`">>/tmp/test useradd stu08 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu08;echo -e "stu08`echo "$pass"`">>/tmp/test useradd stu09 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu09;echo -e "stu09`echo "$pass"`">>/tmp/test useradd stu10 ; pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu10;echo -e "stu10`echo "$pass"`">>/tmp/test
第七步把拼出的命令交给bash运行
[root@A ~]# echo stu{01..10}|tr " " " "|sed -r 's#(.*)#useradd 1 ; pass=$((RANDOM+10000000));echo "$pass"|passwd --stdin 1;echo -e "1`echo "$pass"`">>/tmp/test #g'|bash 更改用户 stu01 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 更改用户 stu02 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 更改用户 stu03 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 更改用户 stu04 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 更改用户 stu05 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 更改用户 stu06 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 更改用户 stu07 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 更改用户 stu08 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 更改用户 stu09 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 更改用户 stu10 的密码 。 passwd: 所有的身份验证令牌已经成功更新。
拼接后命令解析
拼接后的命令拆解解析(最终命令) |
解释说明 |
echo stu{01..10} |
添加用户 |
pass=$((RANDOM+10000000) |
密码随机数定义 |
echo "$pass"|passwd --stdin 1 |
非交互式设置密码 |
echo -e "1`echo "$pass"`">>/tmp/test |
将密码生成到文件并记录 |
1.7命令chage:修改用户密码的有效期
【功能说明】
命令chage用于查看修改密码有效期,和passwd命令一样。
【语法格式】
chage [options] [username]
chage [选项] [用户名]
【选项说明】
命令chage的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-d |
设置上一次密码更改日期 |
-E |
账号过期的日期。日期格式为YYYY-MM-DD |
-I |
设置密码过期多少天后禁用账号 |
-l |
显示账号有效期的信息(*) |
-m |
密码可更改的最小天数。默认为0,表示任何时候都可以更改密码 |
-M |
密码保持有效的最大天数 |
-W |
密码到期前,提前收到警告信息的天数 |
【使用范例】
要求yhh用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知用户,过期后30天禁止用户登录。
[root@A ~]# chage -m 7 -M 60 -W 10 -I 30 yhh [root@A ~]# chage -l yhh Last password change : Jan 20, 2018 Password expires : Mar 21, 2018 Password inactive : Apr 20, 2018 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
1.8 命令chpasswd:批量更新新用户密码
【功能说明】
命令chpasswd用于从标准输入中读取一定格式的用户名,密码来批量更新新用户的密码
【语法格式】
chpasswd [options]
chpasswd [选项]
【选项说明】
命令chpasswd的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-e |
默认格式是明文密码,使用-e参数则需要加密的密码 |
【使用范例】
命令批量修密码
[root@A ~]# chpasswd root:5tgb%TGB yhh:123456 yhh1:123456 yhh2:123456 #Ctrl+D结束
【生产案例】
批量建立10个用户stu01-stu10,并设置8位随机密码,要求不能使用shell的循环,只能使用命令及管道
第一步:生成符合题意10个用户名
第一步:添加10个用户
[root@client ~]# echo stu{01..10}|xargs -n 1 useradd [root@client ~]# tail /etc/passwd stu01:x:501:501::/home/stu01:/bin/bash stu02:x:502:502::/home/stu02:/bin/bash stu03:x:503:503::/home/stu03:/bin/bash stu04:x:504:504::/home/stu04:/bin/bash stu05:x:505:505::/home/stu05:/bin/bash stu06:x:506:506::/home/stu06:/bin/bash stu07:x:507:507::/home/stu07:/bin/bash stu08:x:508:508::/home/stu08:/bin/bash stu09:x:509:509::/home/stu09:/bin/bash stu10:x:510:510::/home/stu10:/bin/bash
以“用户名”:密码的格式将添加的用户写入pass.txt
[root@client ~]# echo stu{01..10}:$((RANDOM+10000000))|tr " " " ">pass.txt [root@client ~]# cat pass.txt stu01:10009601 stu02:10028735 stu03:10027066 stu04:10025467 stu05:10018531 stu06:10001398 stu07:10013916 stu08:10025178 stu09:10002575 stu10:10024838
第三步:chpasswd将文件pass.txt中读取相关的数据,为对应的用户设置冒号后免得密码
[root@client ~]# chpasswd <pass.txt [root@client ~]# su - stu01 [stu01@client ~]$ su - stu02 密码: [stu02@client ~]$
1.9 su:切换用户
【功能说明】
命令su 用于将当前用户切换到指定用户或者以指定用户的身份执行命令或程序
【语法格式】
su [options] [username]
su [选项] [用户名]
【选项说明】
参数选项 |
解释说明(带*的为重点) |
-,-l,--login |
切换用户的同时,将用户的家目录、系统环境等重新按切换后的用户初始化(*) |
-c |
向shell传递单个命令(*) |
【使用范例】
切换用户例子
[root@A ~]# whoami root [root@A ~]# su yhh [yhh@A root]$ pwd /root [yhh@A root]$ env|egrep "USER|MALL|PWD|LOGNAME" USER=yhh PWD=/root LOGNAME=yhh
带- 切换后再测试
[root@A ~]# su - yhh [yhh@A ~]$ env|egrep "USER|MALL|PWD|LOGNAME" USER=yhh PWD=/home/yhh LOGNAME=yhh
如何让系统在每一天开机时都能自动以普通用户启动指定的服务脚本
[root@A ~]# echo "su - yhh -c " /bin/sh /service/scripts/mac.py>> /etc/rc.local [root@A ~]# tail -1 /etc/rc.local su - yhh -c /bin/sh /service/scripts/mac.py
1.10 命令visudo:编辑sudoers文件
【功能说明】
命令visudo是专门用来编辑/etc/sudoers这个文件的,同时提供语法检查等功能。/etc/sudoers文件是sudo命令的配置文件。
【语法格式】
visudo [options]
visudo [选项]
【选项说明】
命令visudo的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-c |
手动执行语法检查 |
【使用范例】
执行visudo命令,既可以打开sudo的配置文件进行编辑。
[root@A ~]# visudo root ALL=(ALL) ALL stu01 ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel stu02 ALL=(ALL) ALL
命令sudo提权配置说明
待授权的用户或组 |
机器=(授权) |
可执行的命令 |
user |
MACHINE= |
COMMANDS |
Stu02 |
ALL=(ALL) |
/usr/sbin/useradd,/usr/sbin/userdel |
检查sudoer文件语法的例子
[root@A ~]# echo "su - yhh -c " /bin/sh /service/scripts/mac.py su - yhh -c /bin/sh /service/scripts/mac.py [root@A ~]# echo "su - yhh -c " /bin/sh /service/scripts/mac.py>> /etc/rc.local [root@A ~]# tail -1 /etc/rc.local su - yhh -c /bin/sh /service/scripts/mac.py [root@A ~]# visudo -c /etc/sudoers:解析正确
1.11 命令sudo:以另外用户身份执行命令
【功能说明】
通过sudo命令,可以让普通用户在执行指令的命令或程序上,拥有超级用户的授权,进行分类,并且有针对地将不同的命令授予指定的普通用户,同时普通用户不需要知道root密码就可以得到授权,这个授权可以用visudo配置管理。
【语法格式】
sudo [options]
sudo [选项]
命令sudo的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-l |
列出当前用户可以执行的命令,只有在sudoer文件里的用户才能使用该选项(*) |
-h |
列出使用方法,并退出 |
-H |
将环境变量的HOME(家目录)指定为要变更身份的使用者家目录(如果不加-u参数就是系统管理者root) |
-V |
显示版本信息,并退出 |
-v |
Sudo在第一次执行时,或者在N分钟内没有执行(N预设为五),则会询问密码,这个参数用于重新做一次确认 |
-u |
以指定用户的身份执行命令,后面是除root以外用户,可以是用户,也是可以uid |
-k |
清除时间戳上的时间,下次再使用sudo时要再次输入密码 |
-K |
与-k类似,同时还要删除时间戳文件 |
-b |
在后台执行指令的命令 |
-p |
可以更改询问密码时的提示语 |
-e |
不执行命令,而是修改文件,相当于命令sudo edit |
【使用范例】
查看用户被visudo授权后拥有的权限
[yhh@A ~]$ ls /root ls: 无法打开目录/root: 权限不够 [yhh@A ~]$ sudo ls /root aa data3 eth0 file2 hard_link install.log.syslog test test.txt yanhuihuang1 anaconda-ks.cfg dir1 eth1 file3 hello.txt md5.log test1 yan yanhuihuang2 data dir2 file1 g install.log soft_link test2.txt yanhuihuang yhh
1.12命令id:显示用户与用户组的信息
【功能说明】
命令id能够显示指定用户真实有效的用户ID(UID)和组ID(GID)等信息
【语法格式】
id [options] [username]
id [选项] [用户名]
【选项说明】
命令id的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-g |
显示用户组ID |
-G |
显示用户所属附加群组ID |
-n |
显示用户,所属群组或附加群组的名称,不显示数字 |
-r |
显示实际ID |
-u |
显示用户ID |
【使用范例】
[root@A ~]# id uid=0(root) gid=0(root) 组=0(root) [root@A ~]# id yhh uid=500(yhh) gid=500(yhh) 组=500(yhh) [root@A ~]# id -gn root [root@A ~]# id -u 0 [root@A ~]# id -un root
1.13命令w:显示已登录用户信息
【功能说明】
命令w可以显示已经登录系统的用户,并显示用户正在执行的命令
【选项说明】
命令w的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-h |
不显示前面行标题信息 |
-u |
忽略执行程序的名称,以及CPU时间的信息 |
-s |
使用短输入格式 |
【使用范例】
[root@A ~]# w 10:02:20 up 12 days, 13:36, 2 users, load average: 0.07, 0.06, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.16.50.4 23Jan18 11:24m 0.34s 0.34s -bash root pts/1 10.16.50.4 24Jan18 0.00s 0.83s 0.00s w [root@A ~]# w -h root pts/0 10.16.50.4 23Jan18 11:24m 0.34s 0.34s -bash root pts/1 10.16.50.4 24Jan18 0.00s 0.83s 0.00s w -h
1.14 命令who:显示已登录用户信息
【功能说明】
命令who能够显示已登录系统的用户,以及系统的启动时间等信息
【语法格式】
who [options]
who [选项]
【选项说明】
命令who的参数及说明
参数选项 |
解释说明(带*的为重点) |
-a |
显示所有信息,相当于-b-d --login -p -r-t-T-u |
-b |
显示系统的启动时间 |
-d |
显示已死进程 |
-H |
显示标题,默认不显示 |
-l |
显示登录进程 |
【使用范例】
[root@A ~]# who root pts/0 2018-01-23 17:25 (10.16.50.4) root pts/1 2018-01-24 09:20 (10.16.50.4) [root@A ~]# who -b 系统引导 2018-01-17 20:26 [root@A ~]# who -l 登录 tty1 2018-01-17 20:26 1946 id=1 登录 tty2 2018-01-17 20:26 1949 id=2 登录 tty3 2018-01-17 20:26 1956 id=3 登录 tty4 2018-01-17 20:26 1959 id=4 登录 tty5 2018-01-17 20:26 1962 id=5 登录 tty6 2018-01-17 20:26 1964 id=6 [root@A ~]# who -H 名称 线路 时间 备注 root pts/0 2018-01-23 17:25 (10.16.50.4) root pts/1 2018-01-24 09:20 (10.16.50.4) [root@A ~]# who -H -a 名称 线路 时间 空闲 进程号 备注 退出 系统引导 2018-01-17 20:26 运行级别 3 2018-01-17 20:26 登录 tty1 2018-01-17 20:26 1946 id=1 登录 tty2 2018-01-17 20:26 1949 id=2 登录 tty3 2018-01-17 20:26 1956 id=3 登录 tty4 2018-01-17 20:26 1959 id=4 登录 tty5 2018-01-17 20:26 1962 id=5 登录 tty6 2018-01-17 20:26 1964 id=6 root + pts/0 2018-01-23 17:25 11:34 31982 (10.16.50.4) root + pts/1 2018-01-24 09:20 . 2820 (10.16.50.4) [root@A ~]# who -d [root@A ~]#
1.15 users:显示已登录用户
【功能说明】
命令users可以显示已经登录系统的用户,如果是同一用户登录多次,则登录几次就会显示几次用户名
【使用范例】
显示已经登录用户
[root@A ~]# users
root root
1.16 whoami:显示当前登录的用户名
【功能说明】
命令whoami用于显示当前登录的用户名。
【使用范例】
[root@A ~]# whoami
root
1.17 命令last:显示用户登录列表
【功能说明】
命令last能够从日志文件/var/log/wtmp读取信息并显示用户最近的登录列表
【语法格式】
last [options]
last [选项]
【选项说明】
命令last的参数及说明
参数选项 |
解释说明(带*的为重点) |
-num -n num |
指定显示结果的行数(*) |
【使用范例】
显示用户最近登录的列表
[root@A ~]# last -10 root pts/1 10.16.50.4 Wed Jan 24 09:20 still logged in root pts/0 10.16.50.4 Tue Jan 23 17:25 still logged in root pts/1 10.16.50.4 Sun Jan 21 21:07 - 17:25 (1+20:17) root pts/0 10.16.50.4 Sat Jan 20 20:53 - 16:59 (1+20:05) root pts/0 10.16.50.4 Thu Jan 18 09:29 - 20:47 (2+11:17) reboot system boot 2.6.32-504.el6.x Wed Jan 17 20:26 - 10:25 (12+13:59) root pts/0 10.16.50.4 Wed Jan 17 20:24 - down (00:01) reboot system boot 2.6.32-504.el6.x Wed Jan 17 20:22 - 20:25 (00:03) root pts/0 10.16.50.4 Wed Jan 17 20:02 - down (00:16) root pts/1 10.16.50.4 Sun Dec 24 23:25 - 15:57 (9+16:32) wtmp begins Tue Jul 5 11:12:08 2016
1.18 命令lastab:显示用户登录失败的记录
【功能说明】
命令lastab可以从日志文件/var/log/btmp中读取信息,并显示用户登录失败的记录,用于发现系统登录异常
【语法格式】
lastb [options]
lastb [选项]
【选项说明】
命令lastb的参数及说明
参数选项 |
解释说明(带*的为重点) |
-num -n num |
指定显示结果的行数(*) |
【使用范例】
显示用户登录失败的列表
[root@A ~]# lastb root ssh:notty 10.16.50.4 Tue Jan 30 10:31 - 10:31 (00:00) btmp begins Tue Jan 30 10:31:04 2018
1.19 命令lastlog:显示所有用户的最近登录记录
【功能说明】
命令lastlog从日志文件/var/log/lastlog中读取信息,并显示所有用户的最近登录信息,用于查看系统是否有异常登录。
【使用范例】
显示所有用户的最近登陆记录
[root@A ~]# lastb root ssh:notty 10.16.50.4 Tue Jan 30 10:31 - 10:31 (00:00) btmp begins Tue Jan 30 10:31:04 2018 [root@A ~]# lastlog 用户名 端口 来自 最后登陆时间 root pts/2 10.16.50.4 二 1月 30 10:30:34 +0800 2018 bin **从未登录过** daemon **从未登录过** adm **从未登录过** lp **从未登录过** sync