5.用户和用户组管理
5.1.用户配置文件
越是对服务器安全性要求高的服务器,越是需要建立合理的用户权限等级制度和服务器操作规范。
在Linux中主要是通过用户配置文件 来查看和修改用户信息
5.1.1.用户信息文件/etc/passwd
每一行代表一个用户,通过冒号分隔出7个字段
root:x:0:0:root:/root:/bin/bash
第1个字段:root 用户名称
第2个字段:x 密码标识,相当于密码占位符,真正存储在/etc/shadow中
第3个字段:0 UID,用户UID
0:超级用户,系统以ID来识别是否为超级用户,默认为root,如果一个用户变成超级用户,只需要将其UID改为0即可。
1-499:系统用户,伪用户,这些用户不能删除,不能登录
500-65535:普通用户,的centos7中添加了一个普通用户,默认ID是1000
第4个字段:0 GID 用户初始组ID
初始组:就是指用户一登录就立刻拥有这个用户组相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。不建立修改初始组,不符合常用规范。初始组只能有一个。
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。
第5个字段:root 用户说明
第6个字段:/root 家目录
普通用户:/home/用户名/
超级用户:/root/
第7个字段:/bin/bash 登录之后的Shell
Shell就是Linux的命令解释器
在/etc/passwd当中,除了标准的Shell是/bin/bash之外,还可以是/sbin/nologin,表示禁止登录。
这个Shell如果改错了,就麻烦了,命令就解释不了,就无法登录了。
5.1.2.影子文件/etc/shadow
shadow只有root用户才能改
[root@localhost etc]# ll shadow
----------. 1 root root 686 Apr 26 23:22 shadow
可以理解为passwd的影子,保存的是用户的经过加密的密码
每一行代表一个用户的密码信息,通过冒号分隔出9个字段
test:$6$10O6OnRx$zWQIJ3sdfassdN6pE/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVasdh1:17647:0:99999:7:::
第1个字段:test 用户名
第2个字段:表示的是加密密码
$6$10O6OnRx$zWQIJ3sdfassdN6pE/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVasdh1
加密算法升级为SHA512散列加密算法
如果密码位是!!或* 代表没有密码,不能远程登录。ssh协议禁止空密码远程登录
可以加密密码前加上!号,把密码换算失败,相当于临时禁用用户登录。
第3个字段:17647 密码最后一次修改日期
使用1970-01-01作为标准时间,每过1天 时间戳加1,17647表示从1970-01-01年到修改密码的那1天总共过的天数。
第4个字段:0 两次密码修改间隔时间的天数,和第3个字段相比
第5个字段:99999 密码有效期的天数,和第3个字段相比
第6个字段:7 密码修改到期前后警告天数,和第5个字段相比
第7个字段:密码过期之后宽限的天数,如果没有用户过期则直接禁止
0:代表密码过期后立即失效,和不写是一样的
-1:则代表密码永远不会失效
第8个字段:帐号失效时间
要用时间戳表示。
把时间戳换算为日期:
date -d "1970-01-01 17647 days"
[root@localhost ~]# date -d "1970-01-01 17647 days"
Thu Apr 26 00:00:00 CST 2018
[root@localhost ~]#
把日期换算为时间戳:
echo $(($(date --date="2018/04/30" +%s)/86400+1))
[root@localhost ~]# echo $(($(date --date="2018/04/30" +%s)/86400+1))
17651
[root@localhost ~]# echo $(($(date --date="2018/04/26" +%s)/86400+1))
17647
[root@localhost ~]#
第9个字段:保留
5.1.3.组信息文件/etc/group和组密码文件/etc/gshadow
组信息文件/etc/group
root:x:0:
第1个字段:root 组名,默认和用户名是一样的
第2个字段:x 组的密码标志位,密码是在gshadow文件中存放
第3个字段:GID,组ID
第4个字段:组中附加用户
密码文件/etc/gshadow
root:::
第1个字段:组名
第2个字段:组密码
第3个字段:组管理员用户名
第4个字段:组中附加用户
组管理员一般不使用
5.2.用户管理相关文件
用户的家目录:
普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
超级用户:/root/,所有者和所属组都是root用户,权限是550
把test用户变成超级用户
在passwd中,将其UID修改为0即可
超级用户的提示符是:#
普通用户的提示符是:$
[root@localhost ~]#
用户的邮箱
/var/spool/mail/用户名/
添加用户时,邮件默认自动创建
[root@localhost ~]# cd /var/spool/mail
[root@localhost mail]# ls
root test
用户模板目录
当创建一个用户,用户自动创建许多目录和文件,都是从这个模板里面生成的。
用户的home目录都是从这里复制过来的,所以放在这里面的文件会复制到新创建用户的家目录中
/etc/skel
5.3.用户管理命令
5.3.1.用户添加命令useradd
useradd [选项] 用户名
-u UID 手工指定用户的UID号
-d 家目录 手工指定用户的家目录,不建议手动指定。
-c 用户说明,手工指定用户的说明
-g 组名,手工指定用户的初始组
-G 组名,指定用户的附加组
-s sheel,指工指定用户的登录shell,默认是/bin/bash
添加用户test
user test
添加用户时,系统都执行什么操作?
1、passwd文件
[root@localhost skel]# grep test /etc/passwd
test:x:1000:1000::/home/test:/bin/bash
2、shadow文件
[root@localhost skel]# grep test /etc/shadow
test:$6$10O6OnRx$zWQIJ3WtmLRN6pE/asdfsadfs.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVph1:17647:0:99999:7:::
3、组文件
[root@localhost skel]# grep test /etc/group
test:x:1000:
4、gshadow文件
[root@localhost skel]# grep test /etc/gshadow
test:!::
5、家目录
[root@localhost skel]# ll -d /home/test/
drwx------. 2 test test 83 Apr 26 23:04 /home/test/
6、邮件
[root@localhost skel]# ls /var/spool/mail
root test
用户默认值文件
/etc/default/useradd
[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 #用户默认组
HOME=/home #用户家目录
INACTIVE=-1 #密码过期宽限天数,shadow文件的7字段
EXPIRE= #密码失效时间,shadow文件的字段8
SHELL=/bin/bash #默认shell
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否建立邮箱
用户默认值文件
/etc/login.defs
[root@localhost ~]# cat /etc/login.defs
#
# 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_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 #密码有效期,shadow文件字段5
PASS_MIN_DAYS 0 #密码修改间隔,shadow文件字段4
PASS_MIN_LEN 5 #密码最小5位,PAM
PASS_WARN_AGE 7 #密码到期警告,shadow文件字段6
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000 #UID最小值
UID_MAX 60000 #UID最大值
# System accounts
SYS_UID_MIN 201
SYS_UID_MAX 999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
GID_MAX 60000
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 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
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512 #密码加密模式
[root@localhost ~]#
5.3.2.修改用户密码passwd
语法:
passwd [选项] 用户名
-S 查询用户密码的密码状态,仅root用户可以用。
-l 暂时锁定用户。仅root可用。
-u 解锁用户。仅root可用。
--stdin 可以通过管道符输出的数据作为用户的密码
查询test用户密码的密码状态
[root@localhost ~]# passwd -S test
test PS 2018-04-26 0 99999 7 -1 (Password set, SHA512 crypt.)
test 用户名
PS
2018-04-26 密码最后修改时间
0密码修改间隔时间
99999 密码有效期
7 密码过期前几天提示警告
-1 密码失效时间,-1表示不失效
锁定用户时,是在密码前增加了两个感叹号:!!,相当于暂时锁定用户
[root@localhost ~]# passwd -l test
Locking password for user test.
passwd: Success
[root@localhost ~]# grep test /etc/shadow
test:!!$6$10O6OnRx$sSDFSDAF/Bc0Lwiw.3xmFkbXt2SF8gwNLB7IEu2.zWZQ7Mra6QCw5/IFfBQEIaFDwPLLc3dgBnKVph1:17647:0:99999:7:::
解锁用户时,是把!!去掉就行了,可以用命令,也可以直接修改shadow文件
管道设置密码
echo "123" | passwd --stdin test
这种方式一般在脚本文件中使用,这种密码是明文,需要登录后修改,确保安全。
普通用户只能改自己的密码,超级用户可以自己和别人的密码。
给当前用户设置密码时,用户名就不需要输入了
5.3.3.修改用户信息usermod
英文原意:user modify
语法:
usermod [选项] 用户名
-u UID 手工指定用户的UID号
-c 用户说明,手工指定用户的说明
-G 组名,指定用户的附加组
-L 临时锁定用户Lock
-U 解锁用户Unlock
useradd中的选项在usermod中基本都可以使用
用户test的用户说明修改:
[root@localhost ~]# usermod -c "This is a test user" test
[root@localhost ~]# grep test /etc/passwd
test:x:1000:1000:This is a test user:/home/test:/bin/bash
5.3.4.修改用户密码状态chage
语法:
chage [选项] 用户名
-l 列表用户的详细密码状态
-d 日期:修改密码最后一次更改日期,shadow文件字段3
-m 天数:两次密码修改间隔,shadow文件字段4
-M 天数:密码有效期,shadow文件字段5
-W 天数:密码过期前警告天数,shadow文件字段6
-I 天数:密码过期后宽限天数,shadow文件字段7
-E 日期:帐号失效时间,shadow文件字段8
[root@localhost ~]# chage -l test
Last password change : Apr 26, 2018
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 ~]#
把密码最后修改日期设置为0,shadow文件字段3,这样用户一登录就要修改密码。
chage –d 0 test
5.3.5.删除用户userdel
英文愿意:user delete
语法:
userdel [选项] 用户名
-r 删除用户时,同时删除用户的家目录
手工删除用户,这样删除并不方便,这里只是说明一下删除时都删除什么内容
vim /etc/passwd
vim /etc/shadow
vim /etc/group
vim /etc/gshadow
rm –rf /var/spool/mail/test
rm –rf /home/test
id命令
查看用户ID
id 用户名
[root@localhost ~]# id test
uid=1000(test) gid=1000(test) groups=1000(test)
5.3.6.用户切换命令su
英文愿意:switch user?
语法:
su [选项] 用户名
<!--[if !supportLists]-->- <!--[endif]-->表示将用户的环境变量一起切换。如果不加个选项,会导致只切换了一部分过去,例如家目录,邮件等信息还是切换之前用户的。
-c 仅执行一次命令,而不切换用户身份
不切换root用户的身份,只是执行root用户的命令,添加一个用户test2
su - root -c "useradd test2"
5.4.用户组管理命令
添加用户组
groupadd [选项] 组名
-g GID 指定组ID
groupadd group1
修改用户组
groupmod [选项] 组名
-g GID 修改组ID
-n 新组名:修改组名
groupmod –n newgroup group1
删除用户组
groupdel 组名
如果组中有初始用户存在,则组是删除不掉的。
把用户添加入组或从组中删除
gpasswd 选项 组名
-a 用户名:把用户加入组
-d 用户名:把用户从组中删除