用户管理命令:useradd,usermod,userdel,chage,groupadd,groupdel,groupmod,newgrp,gpasswd
20.1.useradd
功能:添加新用户或更新新用户信息
语法: useradd 选项 用户名
常用参数:
-u:用户uid
-g:用户的主组
-G:附加组
-s:默认shell
-d:家目录
-D:变更预设值
-c:注释说明
-e:过期时间
-f: <缓冲天数> 指定在密码过期后多少天即关闭该账号。
-m:自动建立用户的家目录。
-M: 不要自动建立用户的家目录。
-n:取消建立以用户名为名的用户组。
-r: 建立系统账户。
在知道怎么使用这个命令前,先普及一些基础知识:
用户标识:UserID,UID,共65535个;
管理员(root):0
系统用户:
centos5,6:1-499
centos 7:1-999
普通用户:
centos5,6:500+
centos 7:1000+
用户管理相关的文件:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
说明:
系统默认给一个家 /home/$username 家里还添置了一些家具
指定默认shell(能不能登录操作系统)
# cat /etc/shells
/bin/sh 早期unxi
/bin/bash 系统默认的shell(可以登录操作系统)
/sbin/nologin 非交互式shell(不能登录操作系统)
/bin/dash
/bin/tcsh
/bin/csh
默认还会指定uid和gid(创建一个主组)
示例:
[root@localhost ~]# useradd -u 4294967295 user2 #不成功,报错,证明uid数超过最大值 useradd: invalid user ID ‘4294967295‘ [root@localhost ~]# useradd -u 4294967294 user2 #成功,这个数就是就是当前版本支持的最大uid数 [root@localhost ~]# [root@localhost ~]# useradd -u 1001 -g 1001 -d /home/abc/user03 user03 useradd: group ‘1001‘ does not exist [root@localhost ~]# id user03 id: user03: No such user [root@localhost ~]# useradd -u 1001 -g 1001 -d /home/abc/user03 user03 useradd: cannot create directory /home/abc/user03 [root@localhost ~]# id user03 id: user03: No such user [root@localhost ~]# mkdir /home/abc [root@localhost ~]# useradd -u 1001 -g 1001 -d /home/abc/user03 user03 [root@localhost ~]# id user03 uid=1001(user03) gid=1001(admin) groups=1001(admin) [root@localhost ~]# su - user03 [user03@localhost ~]$ pwd /home/abc/user03 [root@localhost ~]# useradd -s /sbin/nologin -d /rhome/abc/ -c ‘zidingyi‘ user04 useradd: warning: the home directory already exists. Not copying any file from skel directory into it. [root@localhost ~]# su - user04 This account is currently not available. [root@localhost ~]# usermod -s /bin/bash user04 [root@localhost ~]# su - user04 -bash-4.1$ pwd /rhome/abc/ -bash-4.1$ logout [root@localhost ~]# cp -a /etc/skel/. /rhome/abc/ [root@localhost ~]# su - user04
几个小实验:
(1)去掉/etc/passwd里root用户第二列的x,确认登录系统不需要密码,加回x,密码不变
[root@localhost ~]# sed -i ‘1s/x//‘ /etc/passwd 说明:验证登录是没有密码了 [root@localhost ~]# sed -i ‘1s/root::/root:x:/‘ /etc/passwd #加回去 [root@localhost ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash
(2)普通用户只能自己改自己的密码,还需要原密码才能改,改的密码还要一定的密码复杂度(最少8位,字母,数字,符号最好都有就没问题)
(3)用一个普通用户来测试/etc/shadow里的第四列
步骤一:第四列为0,这个普通用户随时可以修改自己的密码
步骤二:把0改为2,这个普通用户改密码会报You must wait longer to change your password的错误
步骤三:可以使用date -s "20140719"这样的命令把当前时间改成3天后,再去测试,发现可以改了,验证成功;时间改回来的例子# date -s "20140716 15:12:10"
以user04为例
[root@localhost ~]# tail -1 /etc/shadow #第四列为0 user04:$6$3Ujgmfgh$cbbnJKG24jTL2CjjbNngiknKJhGpbaITrakxGPxDu05aCGzCR.i/.nDUzvEB/.a4YbXw5tp4HXbkKh0eaIGf00:17339:0:99999:7::: [root@localhost ~]# tail -1 /etc/shadow #第四列改为2 user04:$6$3Ujgmfgh$cbbnJKG24jTL2CjjbNngiknKJhGpbaITrakxGPxDu05aCGzCR.i/.nDUzvEB/.a4YbXw5tp4HXbkKh0eaIGf00:17339:2:99999:7::: [user04@localhost ~]$ passwd #报错了 Changing password for user user04. Changing password for user04. (current) UNIX password: You must wait longer to change your password passwd: Authentication token manipulation error [root@localhost ~]# date -s "20170625 11:43:40" #修改日期 Sun Jun 25 11:43:40 CST 2017 [root@localhost ~]# date Sun Jun 25 11:43:42 CST 2017 [user04@localhost ~]$ passwd Changing password for user user04. Changing password for user04. (current) UNIX password: New password: Retype new password: Sorry, passwords do not match. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]# date -s "20170622 11:47:40" #改回日期 Thu Jun 22 11:47:40 CST 2017 [root@localhost ~]# date Thu Jun 22 11:47:42 CST 2017
(4)验证/etc/shadow里的第8列
步骤一:以测试user1用户为列,把它在shadow里的第8列改成16266(这相当于今天来说是昨天就过期了)
步骤二:先用su - test切换另一个普通用户,再用这个普通用户来su - user1切换user1,输入正确密码,但报下面的错误
$ su - user1 Password: Your account has expired; please contact your system administrator su: incorrect password
20.2.userdel
功能说明:删除用户账号。
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。删除一个已有的用户账号使用userdel命令。
语法:userdel 选项 用户名
参数:
-r 它的作用是把用户的主目录一起删除。
-f 删除用户家目录以及目录中所有文件。
示例
# userdel -r sam
20.3.usermod
功能说明:修改用户信息
语法:usermod 选项 用户名
常用选项:
-u:用户uid
-g:用户的主组
-G:附加组
-s:默认shell
-d:家目录
-c:注释说明
补充说明:
用户信息相关的配置文件:
/etc/passwd 存放用户相关信息
/etc/shadow 存放用户密码相关信息
$home 用户的家目录
man 5 passwd
/etc/passwd
account:password:UID:GID:GECOS:directory:shell
账号:密码:UID:GID:注释说明:家目录:默认的登录shell
--vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列: 用户名
第二列:密码 老版本这里放的就是密码,为了安全性考虑,密码放到了/etc/shadow的第二列
x代表/etc/shadow的第二列生效,去掉x就表示此用户登录的时候没有密码
第三列:uid 用户识别ID值,系统是通过这个值来确认是哪个用户
第四列:gid 组识别ID值
第五列:描述项 comment
第六列:家目录
第七个:bash 当前用户使用的bash
/bin/bash 表示此用户使用bash,用户可以登录系统,可以收邮件,可以登录FTP
/sbin/nologin 表示用户不能登录系统,可以收邮件,可以登录FTP
/bin/false 表示用户不能登录系统,可以收邮件,不能登录FTP
/etc/shadow
--vim /etc/shadow
root:$1$.1RfCu/n$ModWntxLJRC6SpgAXSDO81:14694:0:99999:7:::
与/etc/passwd相对应 (但这里有九列)
第一列:login name 用户名
第二列:encrypted password 密码 (这里以*号开头或!开头默认是不能登陆的)!!代表空密码,未设置密码
第三列:date of last password change 上一次修改密码的时间,linux以1970年1月1日到现在的天数来算的,等于0代表下一次登录操作系统强制修改密码
# date --date=‘1970-01-01 +16896days‘
Tue Apr 5 00:00:00 CST 2016
第四列:minimum password age 修改密码后几天内不允许再修改,如果这里为5,那改过密码后5天内不能再修改 0代表不限制(只对普通用户有效)
第五列:maximum password age 多少天内必须要求你改,30代表每隔30天更新一次密码; 默认永远不更新,99999代表不限制
第六列:password warning period 过期前几天给你一个告警信息,7代表密码过期前7天发出警告
第七列:password inactivity period,密码过期后还给的一个宽限天数,3代表密码过期后3天内依然可以登录操作系统;过了3天后帐号被封锁。
第8列: account expiration date 这里可以写一个过期天数,这里也是以1970年1月1日到现在的天数来计算的,多用于收费系统
第九列:reserved field 保留,留着以后功能扩展
20.4.passwd
功能说明:更新用户的身份验证令牌
语法:passwd 选项 用户名
补充说明:passwd指令让用户可以更改自己的密码,而系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
(1)passwd:修改当前用户密码;
(2)passwd username:修改其他用户的密码,仅root有此权限;
参数:
-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令,如果默认用户名,则修改当前用户的口令。
-k 设置只有在密码过期失效后,方能更新。
-s 列出密码的相关信息。
--stdin:从标准输入接收密码;
echo "PASSWORD" |passwd --stdin USERNAME
如下图:
示例:
[root@localhost ~]# passwd -d user03 #删除用户密码 Removing password for user user03. passwd: Success # passwd -l sam [root@localhost ~]# passwd -l user04 #锁定用户 Locking password for user user04. passwd: Success
20.5.chage
功能说明:更改用户密码过期信息
# chage --help
Usage: chage [options] [LOGIN]
常用选项:
-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 密码过期前几天发出警告
示例:
[root@localhost ~]# chage -l user03 #列出用户密码的信息 Last password change: Jun 22, 2017 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@localhost ~]# chage -d 0 user03用户下一次登录操作系统强制修改密码
20.6.groupadd
功能:增加用户组
语法:groupadd 选项 用户组
常用选项:
-g:指定gid
-o:指定相同的gid, 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同
-r:指定组管理员
groupadd --help 查看
/etc/group 组信息
组名:组密码:组id:组成员
示例:
[root@localhost ~]# groupadd group1 [root@localhost ~]# groupadd -g 101 group2
20.7.groupdel
功能:删除用户组
语法:groupdel 用户组
示例:
[root@localhost ~]# groupdel group1
20.8.groupmod
功能:修改组属性
语法:groupmod 选项 用户组
常用选项:
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n 新用户组 将用户组的名字改为新名字
示例:
[root@localhost ~]# groupmod -g 102 group2 [root@localhost ~]# groupmod -g 10000 -n group3 group2
20.9.newgrp
功能:登陆到一个新组
语法:newgrp [-] [group]
示例:
[root@localhost ~]# usermod -G root user03 [root@localhost ~]# id user03 uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root) [user03@localhost ~]$ newgrp root #一个用户有多个组,就可以用newgrp进行切换当前组
20.10.gpasswd
功能:为组添加密码
组密码文件:/etc/gshadow
gpasswd 【选项】 group
常用参数:
-a USERNAME:把用户添加至组中;
-d USERNAME:从此组中移除此用户;
-r USER_NAMEG : 删除组的密码
# gpasswd --help
示例:
[root@localhost ~]# groupadd -g 10015 group1 [root@localhost ~]# gpasswd -a user03 group1 Adding user user03 to group group1 [root@localhost ~]# id user03 uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root),10015(group1) [root@localhost ~]# gpasswd -d user03 group1 Removing user user03 from group group1 [root@localhost ~]# gpasswd -M user03,user04 group1 [root@localhost ~]# id user03 uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root),10015(group1) [root@localhost ~]# id user04 uid=1002(user04) gid=1002(user04) groups=1002(user04),10015(group1)
练习一:
1、建立一个组,名字为admin,组id为900
groupadd admin groupmod -g 900 admin 或者 groupadd -g 900 admin
2、建立一个用户tom,并且将admin组作为tom用户的附加组(建立用户的时候完成),密码是123
useradd -G 900(或者admin)tom echo 123 |passwd --stdin tom
3、建立一个用户为jack,要求在建立用户后将jack加入到admin组里,密码为123
useradd jack gpasswd -a jack admin echo 123 |passwd --stdin jack
4、给admin组设置一个密码,为123
gpasswd admin 测试: newgrp admin
5、把tom用户设定为admin组的管理员
gpasswd -A tom admin 测试: su - tom gpasswd -d user1 admin
练习二:
1、添加3个用户,harry,natash,sarsh。要求harry,natash用户的附加组为admin组,sarsh用户的默认shell为非交互式,密码均为123.
方法一:
useradd -G admin harry useradd -G admin natash useradd -s /sbin/nologin sarsh echo 123 |passwd --stdin harry 方法二: useradd harry usermod -G admin harry 。。。
2、修改haryy用户的家目录为/home/world/redhat/harry
mkdir /home/world/redhat -p usermod -m -d /home/world/redhat/harry harry
或者练习:
1、将/etc/passwd文件拷贝到/tmp目录下面。在/tmp/passwd文件的第15行下添加“hello world”,并复制其下5行,粘贴在文件的最下面,保存。然后全文搜索将“/bin/bash”替换成world,并保存后面20行到/tmp/passwd.bak文件中,退出编辑。
2、找出/etc/下面的所有目录并将其重定向到/tmp/etcdir文件里
3、在/tmp/etcdir文件中追加“好好学习,天天向上”,然后把/etc/passwd文件的内容添加到/tmp/etcdir文件里,并重命名为newetcdir
mkdir /home/world/redhat/harry usermod -d /home/world/redhat/harry harry cp -a /etc/skel/. /home/world/redhat/harry
说明:
usermod命令修改家目录,家目录的上一级目录必须存在,家目录本身系统会自动创建;如果不存在需要创建。
3、修改natash,sarsh用户的主组为world,并且可以登录操作系统
groupadd world usermod -g world natash usermod -g world -s /bin/bash sarsh
练习三:
1、新建一个公司world,该公司有3个部门cw、rs、sc;每个部门要求建立2个用户,如cw01,cw02..;boss01管理公司所有部门,所有用户的密码均为123456
groupadd world groupadd cw groupadd rs groupadd sc useradd cw01 -g cw -G world useradd boss01 -g world -G cw,rs,sc echo 123456|passwd --stdin cw01
2、所有用户帐号的有效期为3个月(90天),第一次登录操作系统强制修改密码,每隔15天更新一次密码
chage -l cw01 chage -E "$(date +%Y%m%d --date=‘90 days‘)" -d 0 -M 15 cw01 或者 date +%F --date=‘90 days‘ 2016-07-04 # chage -E ‘2016-07-04‘ -d 0 -m 3 cw01
本文出自 “烂笔头” 博客,请务必保留此出处http://lanbitou.blog.51cto.com/9921494/1941301
原文地址:http://lanbitou.blog.51cto.com/9921494/1941301