一、新增用户:useradd
1、useradd 命令介绍
useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户账号名
参数:
-u :后面接的是 UID,是一组数字。直接指定一个特定的 UID 给这个账号;
-g :后面接的是那个用户组名,初始的用户组。
该用户组的GID 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的组名则是这个账号还可以加入的用户组。
这个参数会修改 /etc/group 内的相关数据。
-M :强制!不要创建用户主文件夹(系统账号默认值)!
-m :强制!要创建用户主文件夹(一般账号默认值)!
-c :这个就是 /etc/passwd 的第五列的说明内容。可以随便我们设置的。
-d :指定某个目录成为主文件夹,而不要使用默认值。务必使用绝对路径!
-r :创建一个系统的账号,这个账号的 UID 会有限制。
-s :后面接一个 shell,若没有指定则默认是 /bin/bash 。
-e :后面接一个日期,格式为“YYYY-MM-DD”,此选项可写入 shadow 第八字段,即账号失效日的设置选项。
-f :后面接 shadow 的第七字段选项,指定密码是否会失效。0为立刻失效,-1为永远不失效(密码只会过期而强制于登录时重新设置而已)。
2、案例一:完全使用默认值新建一个用户,名称为 flysheep
[root@www ~]# useradd flysheep
[root@www ~]# ll -d /home/flysheep
drwx------ 3 flysheep flysheep 74 9月 7 08:22 /home/flysheep
# 默认会创建用户主文件夹,且权限为700!这是重点!
[root@www ~]# grep flysheep /etc/passwd /etc/shadow /etc/group
/etc/passwd:flysheep:x:1003:1003::/home/flysheep:/bin/bash
/etc/shadow:flysheep:!!:17416:0:99999:7:::
/etc/group:flysheep:x:1003:
主要设置了以下默认值:
- 在 /etc/passwd 里面创建一行与账号相关的数据,包括创建 UID/GID/主文件夹等;
- 在 /etc/shadow 里面将此账号的密码相关参数写入,但是尚未有密码;
- 在 /etc/group 里面加入一个与账号名称一模一样的组名;
- 在 /home 下面创建一个与账号同名的目录作为用户主文件夹,且权限为700
3、案例二:假设我已知道我的系统当中有个用户组名为 flysheep,且 UID 1004 并不存在,请用 flysheep 为初始用户组,以及 UID 为 1004 创建一个名为 flysheep2 的账号
[root@www ~]# useradd -u 1004 -g flysheep flysheep2
[root@www ~]# ll -d /home/flysheep2
drwx------ 3 flysheep2 flysheep 74 9月 7 08:40 /home/flysheep2
[root@www ~]# grep flysheep2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:flysheep2:x:1004:1003::/home/flysheep2:/bin/bash
/etc/shadow:flysheep2:!!:17416:0:99999:7:::
# UID 与 初始用户组确实改变成我们需要的了!
4、案例三:创建一个系统账号,名称为 flysheep3
[root@www ~]# useradd -r flysheep3
[root@www ~]# ll -d /home/flysheep3
ls: 无法访问/home/flysheep3: 没有那个文件或目录 <== 不会主动创建主文件夹
[root@www ~]# grep flysheep3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:flysheep3:x:984:984::/home/flysheep3:/bin/bash
/etc/shadow:flysheep3:!!:17416::::::
/etc/group:flysheep3:x:984:
二、设置账号的密码:passwd
使用 useradd 创建了账号之后,在默认的情况下,该账号是无法登陆的,需要设置新密码才可以登陆。设置密码就使用 passwd。
passwd [--stdin] <== 所有人均可使用来改自己的密码
passwd [-l] [-u] [--stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 <== root 功能
参数:
--stdin:可以通过来自前一个管道的数据,作为密码输入,对 shell script 有帮助!
-l:是 Lock 的意思,会将 /etc/shadow 第二列最前面加上 ! 使密码失效。
-u:与 -l 相对,是 Unlock 的意思!
-S:列出密码相关参数,即 shadow 文件内的大部分信息。
-n:后面接天数,shadow 的第4字段,多久不可修改密码天数。
-x:后面接天数,shadow 的第5字段,多久内必须要改动密码。
-w:后面接天数,shadow 的第6字段,密码过期前的警告天数。
-i:后面接“日期”,shadow 的第7字段,密码失效日期。
1、案例一:请 root 给予 flysheep 密码
[root@www ~]# passwd flysheep
更改用户 flysheep 的密码 。
新的 密码: <== 这里直接输入新的密码,屏幕不会有任何反应
无效的密码: 密码少于 8 个字符 <== 密码太简单或过短的错误!
重新输入新的 密码: <== 再输入一次同样的密码
passwd:所有的身份验证令牌已经成功更新。 <==竟然还是成功修改了!
2、案例二:用 flysheep 登录后,修改 flysheep 自己的密码
[flysheep@www ~]$ passwd <== 后面没有加账号,就是改自己的密码!
3、案例三:使用 standard input 新建用户的密码
[root@www ~]# echo "123456" | passwd --stdin flysheep
更改用户 flysheep 的密码 。
passwd:所有的身份验证令牌已经成功更新。
这个动作会直接更新用户的密码而不用再次手动输入!
4、案例四:管理 flysheep 的密码,使其具有60天更改、10天密码失效的设置
[root@www ~]# passwd -S flysheep
flysheep PS 2017-09-11 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
# 上面说明密码新建时间(2017-09-11)、最小天数(0)、更改天数(99999)、警告天数(7)、密码不会失效(-1)
[root@www ~]# passwd -x 60 -i 10 flysheep
调整用户密码老化数据flysheep。
passwd: 操作成功
[root@www ~]# passwd -S flysheep
flysheep PS 2017-09-11 0 60 7 10 (密码已设置,使用 SHA512 算法。)
5、案例五:让 flysheep 的账号失效,查看完毕后再让他生效
[root@www ~]# passwd -l flysheep
锁定用户 flysheep 的密码 。
passwd: 操作成功
[root@www ~]# passwd -S flysheep
flysheep LK 2017-09-11 0 60 7 10 (密码已被锁定。)
# 状态变成“LK,Lock”,就无法登陆了。
[root@www ~]# grep flysheep /etc/shadow
flysheep:!!$6$AcmFrTq4$K0xLQSZeBoAICIqWVBfQHGjP12.1dWGS/KJidAfQP8NNjsIoEWDZ.vG.FvS4jSWYJatkvtxT8k4nBu18XK1zz0:17420:0:60:7:10::
# 其实只是在这里加上!!而已!
[root@www ~]# passwd -u flysheep
解锁用户 flysheep 的密码。
passwd: 操作成功
[root@www ~]# grep flysheep /etc/shadow
flysheep:$6$AcmFrTq4$K0xLQSZeBoAICIqWVBfQHGjP12.1dWGS/KJidAfQP8NNjsIoEWDZ.vG.FvS4jSWYJatkvtxT8k4nBu18XK1zz0:17420:0:60:7:10::
三、列出账号的详细密码参数:chage
chage [-ldEImMW] 账号名
参数:
-l:列出该账号的详细密码参数。
-d:后面接日期,修改 shadow 的第三字段(最近一次更改密码的日期),格式:YYYY-MM-DD。
-E:后面接日期,修改 shadow 的第八字段(账号失效日),格式:YYYY-MM-DD。
-I:后面接天数,修改 shadow 的第七字段(密码失效日期)。
-m:后面接天数,修改 shadow 的第四字段(密码最短保留天数)。
-M:后面接天数,修改 shadow 的第五字段(密码多久需要进行更改)。
-W:后面接天数,修改 shadow 的第六字段(密码过期前警告日期)。
1、案例一:列出 flysheep 的详细密码参数
[root@www ~]# chage -l flysheep
最近一次密码修改时间 :9月 11, 2017
密码过期时间 :11月 10, 2017
密码失效时间 :11月 20, 2017
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :60
在密码过期之前警告的天数 :7
2、案例二:新建一个名为 flysheep2 的账号,该账号第一次登录后使用默认密码,但必须更改过密码后使用新密码才能够登录系统使用 bash 环境
[root@www ~]# useradd flysheep2
[root@www ~]# echo "flysheep2" | passwd --stdin flysheep2
[root@www ~]# chage -d 0 flysheep2
# 此时此账号的密码新建时间会被修改为 1970/1/1,所以会有问题!
[root@www ~]# chage -l flysheep2
最近一次密码修改时间 :密码必须更改
密码过期时间 :密码必须更改
密码失效时间 :密码必须更改
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
四、修改账号数据:usermod
usermod [-cdegGlsuLU] username
参数:
-c:后面接账号的说明,即 /etc/passwd 第五列的说明,可以加入一些账号的说明。
-d:后面接账号的主文件夹,即修改 /etc/passwd 的第六列。
-e:后面接日期,格式是 YYYY-MM-DD,也就是在/etc/shadow 内的第八个字段数据。
-f:后面接天数,为 shadow 的第七字段。
-g:后面接初始用户组,修改 /etc/passwd 的第四个字段,即是 GID 的字段!
-G:后面接次要用户组,修改这个用户能够支持的用户组,修改的是 /etc/group。
-a:与 -G 合用可增加次要用户组的支持而非设置。
-l:后面接账号名称,即是修改账号名称,/etc/passwd 的第一列!
-s:后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等。
-u:后面接 UID 数字,即 /etc/passwd 第三列的数据。
-L:暂时将用户的密码冻结,让他无法登陆。其次仅改 /etc/shadow 的密码。
-U:将 /etc/shadow 密码列的 ! 去掉。
1、案例一:修改用户 flysheep 的说明列,加上“flysheep’s test”的说明
[root@www ~]# usermod -c "flysheep's test" flysheep
[root@www ~]# grep flysheep /etc/passwd
flysheep:x:1003:1003:flysheep's test:/home/flysheep:/bin/bash
2、案例二:用户 flysheep 密码在 2017/12/31失效。
[root@www ~]# usermod -e "2017-12-31" flysheep
[root@www ~]# grep flysheep /etc/shadow
flysheep:$6$AcmFrTq4$K0xLQSZeBoAICIqWVBfQHGjP12.1dWGS/KJidAfQP8NNjsIoEWDZ.vG.FvS4jSWYJatkvtxT8k4nBu18XK1zz0:17420:0:60:7:10:17531:
3、案例三:我们新建 flysheep3 这个系统账号时并没有给予主文件夹,请新建他的主文件夹
[root@www ~]# ll -d ~flysheep3
ls: 无法访问/home/flysheep3: 没有那个文件或目录 <==确认一下,确实没有主文件夹的存在!
[root@www ~]# cp -a /etc/skel /home/flysheep3
[root@www ~]# chown -R flysheep3:flysheep3 /home/flysheep3
[root@www ~]# chmod 700 /home/flysheep3
[root@www ~]# ll -a ~flysheep3
总用量 16
drwx------. 3 flysheep3 flysheep3 74 10月 19 2016 . <==用户主文件夹权限
drwxr-xr-x. 9 root root 4096 9月 12 08:33 ..
-rw-r--r-- 1 flysheep3 flysheep3 18 8月 3 2016 .bash_logout
-rw-r--r-- 1 flysheep3 flysheep3 193 8月 3 2016 .bash_profile
-rw-r--r-- 1 flysheep3 flysheep3 231 8月 3 2016 .bashrc
drwxr-xr-x. 4 flysheep3 flysheep3 37 7月 14 2016 .mozilla
五、删除用户数据:userdel
用户的数据包括:
- 用户账号/密码相关参数:/etc/passwd,/etc/shadow
- 用户组相关参数:/etc/group,/etc/gshadow
- 用户个人文件数据:/home/username,/var/spool/mail/username..
userdel [-r] username
参数:
-r:连同用户的主文件夹也一起删除
如果想要完整地将某个账号删除,最好可以在执行 userdel -r username 之前,先以“find / -user username”查出整个系统内属于 usernamed 文件,然后再进行删除。
1、案例一:删除 flysheep ,连同主文件夹一起删除
[root@www ~]# userdel -r flysheep
六、新增用户组:groupadd
groupadd [-g gid] [-r] 用户组名
参数:
-g:后面接某个特定的 GID,用来直接给予某个 GID。
-r:新建系统用户组。与 /etc/login.defs 内的 GID_MIN 有关。
1、案例一:新建一个用户组,名称为 group1
[root@www ~]# groupadd group1
[root@www ~]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:1003:
/etc/gshadow:group1:!::
七、修改用户组:groupmod
跟 usermod 类似,这个命令仅是在进行 group 相关参数的修改而已。
groupmod [-g gid] [-n group_name] 用户组名
参数:
-g:修改既有的 GID 数字;
-n:修改既有的组名。
1、案例一:将刚才上个命令新建的 group1 名称改为 mygroup,GID 为 201
[root@www ~]# groupmod -g 201 -n mygroup group1
[root@www ~]# grep mygroup /etc/group /etc/gshadow
/etc/group:mygroup:x:201:
/etc/gshadow:mygroup:!::
八、删除用户组:groupdel
groupdel [groupname]
1、案例一:将刚才的 mygroup 删除
[root@www ~]# groupdel mygroup
九、用户组管理员:gpasswd
# 关于系统管理员(root)做的动作:
gpasswd groupname
gpasswd [-A user1,...] [-M user3,...] groupname
gpasswd [-rR] groupname
参数:
若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)
-A:将 groupname 的主控权交由后面的用户管理(该用户组的管理员)。
-M:将某些账号加入这个用户组当中!
-r:将 groupname 的密码删除。
-R:让 groupname 的密码栏失效。
# 关于用户组管理员做的操作
gpasswd [-ad] user groupname
参数:
-a:将某位用户加入到 groupname 这个用户组当中!
-d:将某位用户删除出 groupname 这个用户组当中!