用户和组

一、Linux的安全模型

1、用户

管理员:root,0
普通用户:1-60000自动分配

​ 系统用户:1-499(centos 6之前)、1-999(centos 7以后),对守护进程获取资源分配权限。
​ 登录用户:500+(centos 6之前)、1000+(centos 7以后),给用户进行交互式登录使用。

2、用户组

管理员组:root,0
普通组:

​ 系统组:1-499(CentOS 6以前), 1-999(CentOS7以后), 对守护进程获取资源进行权限分配 。

​ 普通组:500+(CentOS 6以前), 1000+(CentOS7以后), 给用户使用

3、用户和组的关系

​ 用户的主要组(primary group):用户必须属于且只属于一个组,默认创建用户时会自动创建一个和用户同名的组作为用户的主要组,又叫私有组。

​ 用户的附加组(supplementary):一个用户可以属于0个或多个辅助组,附属组。

4、安全上下文

Linux安全上下文Context:运行中的程序,即进程(process),以进程发起者的身份运行,进程所能够访问资源的权限取决于就进程的运行者的身份。

例:通过root和普通用户运行/etc/shadow,可以得到资源能否被访问室友运行者身份决定的,非程序本身

[14:45:00 root@zhang ~]#cat /etc/shadow
root:$6$2pesF.BWD8hL1Oho$VsFCIFF98OJRq/3lLMu3XDrbWwOxFjXKZwglimRV3Q1AatemwxOOTFx0pZ6bPmdLlHNtfvNy8Rzo0hr/hcm.L.::0:99999:7:::

zhang:$6$AL8zvDL3$liu4gHAlA.jWu1CumQ/bZgev9ABh.vLUYk8CkfBxEU7BV.AO5/uObIel876Hlfk1x7eP2otrPynLJfFK9DlYU0:1:0:99999:7:::
rpc:!!:18564:0:99999:7:::
[14:45:07 root@zhang ~]#su zhang 
[14:45:27 zhang@zhang root]$cat /etc/shadow

二、用户和组的配置文件

1、用户和组的主要配置文件路径

/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/shadow:用户密码及其相关属性
/etc/group:组及其属性信息
/etc/gshadow:组密码及其相关属性

2、passwd文件格式

[09:27:07 root@zhang ~]#head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

ogin name:登录用名
passwd:密码
UID:用户身份编号
GID:登录默认所在组编码
GECOS:用户全名或注释
home directory:用户主目录
shell:用户默认使用shell

3、shadow文件格式

[09:27:20 root@zhang ~]#head -1 /etc/shadow
root:$6$2pesF.BWD8hL1Oho$VsFCIFF98OJRq/3lLMu3XDrbWwOxFjXKZwglimRV3Q1AatemwxOOTFx0pZ6bPmdLlHNtfvNy8Rzo0hr/hcm.L.::0:99999:7:::

登录用名
用户密码:一般用sha512加密
从1970年1月1日起到密码最近一次被更改的时间
密码再过几天可以被变更(0表示随时可被变更)
密码再过几天必须被变更(99999表示永不过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后帐号会被锁定
从1970年1月1日算起,多少天后帐号失效

更改密码加密算法:

[08:45:37 root@zhang ~]#authconfig --passalgo=sha256 --update

4、group文件格式

[09:27:27 root@zhang ~]#head -1 /etc/group
root:x:0:gentoo

群组名称:就是群组名称
群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
GID:就是群组的 ID
以当前组为附加组的用户列表(分隔符为逗号)

5、gshdow文件格式

[09:27:33 root@zhang ~]#head -1 /etc/gshadow
root:::gentoo

群组名称:就是群的名称
群组密码:
组管理员列表:组管理员的列表,更改组密码和成员
以当前组为附加组的用户列表:多个用户间用逗号分隔

三、用户和组的管理命令

用户管理命令:useradd、usermod、userdel
组帐号维护命令:groupadd、groupmod、groupdel

1、用户管理

1.1 用户创建

useradd 创建新的用户

格式及选项

useradd [选项] LOGIN

-g:UID
-o:配合-u选项,不检查UID的唯一性
-g:GID 指明用户的所属基本组,可为组名也可GID
-c:"COMMENT" 用户的注释信息
-d:HOME_DIR 指定路径不存在的家目录
-s:SHELL 指明用户默认shell
-G:GROUP 为用户指明附属组
-N:不创建私用组做主组,使用users组做主组
-r:创建系统用户 CentOS 6之前: ID<500,CentOS 7以后: ID<1000
-m:创建家目录,用于系统用户
-M:不创建家目录,用于非系统用户

例:

[09:42:40 root@zhang ~]#useradd -r -u 321 -g wang -s /sbin/nologin -d /home/wang
gsir -c "wangsir" wang

[09:43:41 root@zhang ~]#id wang
uid=321(wang) gid=1116(wang) groups=1116(wang)

[09:43:44 root@zhang ~]#tail -1 /etc/passwd
wang:x:321:1116:wangsir:/home/wangsir:/sbin/nologin

新建用户的相关文件路径

/etc/default/useradd
/etc/skel/*
/etc/login.defs

1.2 用户属性修改

usermod 修改用户属性

格式及选项

usermod [选项] login

-u:UID 新UID
-g:GID 新主组
-G:GROUP 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使
用-a选项
-s:SHELL 新的默认SHELL
-c:'COMMENT' 新的注释信息
-d:HOME 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l:login_name: 新的名字
-L:lock指定用户,在/etc/shadow 密码栏的增加 !
-U:unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD:指明用户账号过期日期
-f INACTIVE:设定非活动期限,即宽限期

1.3 删除用户

userdel删除用户

格式及选项

userdel [选项] login

-f --force	强制
-r --remove	删除家目录及邮箱

1.4 查看用户相关的ID信息

id 可以查看用的的UID和GID信息

格式及选项

id [选项] login

-u:显示UID
-g:显示GID
-G:显示用户所属组的ID
-n:显示名称,配合ugG使用

1.5 用户身份切换

su:switch user,可以切换用户之间的身份,并以指定用户的身份执行命令

格式及选项

su [options] [-] [user [args]]

-l --login su -l username	相当于su - username
-c --command <command> 		pass a single command to the shell with -c

切换用户方式:

su - username:完全切换,会读取目标用户的配置文件,切换至自已的家目录。

su UserName:不完全切换,非登录式切换,不会读取目标用户的配置文件,不改变当前工作目录。

说明:root su至其他用户无须密码;非root用户切换时需要密码

**注意:su 切换新用户后,使用 exit 退回至旧的用户,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱 **

例:

[10:04:11 root@zhang ~]#su - zhang 
Last login: Tue Dec  1 10:03:48 CST 2020 on pts/0
[10:04:14 zhang@zhang ~]$echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/zhang/.local/bin:/home/zhang/bin

[10:04:30 root@zhang ~]#su zhang
[10:04:33 zhang@zhang root]$echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#不切换用户创建文件
[10:10:43 root@zhang ~]#su - zhang -c 'touch zhang.txt'
[10:11:27 root@zhang ~]#ll ~zhang/
-rw-rw-r--  1 zhang zhang    0 Dec  1 10:11 zhang.txt

1.6 设置密码

passwd修改用户密码

格式及选项

passwd [OPTIONS] UserName

-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码,Ubuntu无此选项

例:

Ubuntu:
[10:28:58 root@ubuntu ~]#echo -e '123321\n123321' | passwd zhang
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

CentOS:
[10:31:24 root@zhang ~]#echo -e '123321' |passwd zhang 
Changing password for user zhang.
New password: BAD PASSWORD: The password is a palindrome
Retype new password: Password change aborted.
New password: Password change aborted.
New password: Password change aborted.
passwd: Have exhausted maximum number of retries for service

#创建陈用户设置下次登录强制修改密码
[10:54:39 root@zhang ~]#useradd chen

[10:54:54 root@zhang ~]#echo 123456 | passwd --stdin chen
Changing password for user chen.
passwd: all authentication tokens updated successfully.

[10:55:14 root@zhang ~]#getent shadow chen
chen:$5$NbAH4dAa$daIBU5ndp887AXg0Iod5HXajmdpacKBQuQ9zcE7qRz8:18597:0:99999:7:::

[10:55:33 root@zhang ~]#passwd -e chen  #设置下次登录修改密码
Expiring password for user chen.
passwd: Success

[10:55:39 root@zhang ~]#getent shadow chen
chen:$5$NbAH4dAa$daIBU5ndp887AXg0Iod5HXajmdpacKBQuQ9zcE7qRz8:0:0:99999:7:::

[10:56:12 root@zhang ~]#su - zhang
Password: 
Last login: Tue Dec  1 10:11:27 CST 2020 on pts/0

[10:56:55 zhang@zhang ~]$su - chen
Password: 
You are required to change your password immediately (root enforced)
Changing password for chen.
(current) UNIX password: 
New password: 
BAD PASSWORD: The password is shorter than 8 characters

1.7 修改用户密码策略

chage 修改瀛湖密码策略

格式及选项

chage [选项] login

-d LAST_DAY #更改密码的时间
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-I --inactive INACTIVE #密码过期后的宽限期
-E --expiredate EXPIRE_DATE #用户的有效期
-l 显示密码策略

例:

[11:02:36 root@zhang ~]#chage -m 2 -M 42 -W 14 -I 7 -E 2020-12-1 chen
[11:02:47 root@zhang ~]#chage -l chen
Last password change					: password must be changed
Password expires					: password must be changed
Password inactive					: password must be changed
Account expires						: Dec 01, 2020
Minimum number of days between password change		: 2
Maximum number of days between password change		: 42
Number of days of warning before password expires	: 14
[11:02:55 root@zhang ~]#getent shadow chen
chen:$5$NbAH4dAa$daIBU5ndp887AXg0Iod5HXajmdpacKBQuQ9zcE7qRz8:0:2:42:14:7:18597

#设置下一次登录强制设置密码
[11:07:59 root@zhang ~]#chage -d 0 chen
[11:08:04 root@zhang ~]#getent shadow chen
chen:$5$NbAH4dAa$daIBU5ndp887AXg0Iod5HXajmdpacKBQuQ9zcE7qRz8:0:2:42:14:7:18597:
[11:08:15 root@zhang ~]#chage -l chen
Last password change					: password must be changed
Password expires					: password must be changed
Password inactive					: password must be changed
Account expires						: Dec 01, 2020
Minimum number of days between password change		: 2
Maximum number of days between password change		: 42
Number of days of warning before password expires	: 14

2、用户组管理

2.1 创建组

groupadd实现创建组

格式及选项

groupadd [选项] group_name

-g GID 指明GID号;[GID_MIN, GID_MAX]
-r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000

例:

[11:23:25 root@zhang ~]#groupadd -g 51 -r apache
[11:24:16 root@zhang ~]#tail -1 /etc/group
apache:x:51:

2.2 修改组

groupmod 修改组属性

格式及选项

groupmod [选项] group

-n group_name:新名字
-g GID:新的GID

例:

[14:09:27 root@zhang ~]#getent group admins
admins:x:1118:

[14:10:49 root@zhang ~]#groupmod -n admin123 -g 1111 admins

[14:11:29 root@zhang ~]#tail -1 /etc/group
admin123:x:1111:

[14:11:53 root@zhang ~]#getent group admin123
admin123:x:1111:

2.3 组删除

groupdel 删除组

格式及选项

groupdel [选项] GROUP

-f,--force:强制删除,用户的主组也会被强制删除

例:

[14:08:35 root@zhang ~]#groupdel -f admins 

2.4 更改组密码

gpasswd 修改组密码和修改附加组成员关系

格式及选项

gpasswd [选项] GROUP

-a user:将user添加至指定组中
-d user:从指定附加组中移除用户user
-A user1,user2,...:设置有管理权限的用户列表

例:

#怎加组成员
[13:43:19 root@zhang ~]#groupadd admins

[13:43:50 root@zhang ~]#id wang
uid=321(wang) gid=1116(wang) groups=1116(wang)

[13:43:53 root@zhang ~]#gpasswd -a wang admins
Adding user wang to group admins

[13:44:23 root@zhang ~]#id wang
uid=321(wang) gid=1116(wang) groups=1116(wang),1118(admins)

[13:44:54 root@zhang ~]#groups wang
wang : wang admins

[13:45:56 root@zhang ~]#getent group wang
wang:x:1116:

#删除组成员
[13:47:01 root@zhang ~]#gpasswd -d wang admins
Removing user wang from group admins

[13:47:13 root@zhang ~]#id wang
uid=321(wang) gid=1116(wang) groups=1116(wang)

[13:47:23 root@zhang ~]#groups wang
wang : wang

[13:47:28 root@zhang ~]#getent group wang 
wang:x:1116:

[13:47:52 root@zhang ~]#getent group admins
admins:x:1118:

2.5 临时切换主组

newgrp 临时切换主组,如果用户不属于该组在,则需要组密码

格式

newgrp [-] [group]

例:

[13:51:30 root@zhang ~]#su zhang

[13:51:33 zhang@zhang ~]$newgrp root
Password: 

[13:51:53 zhang@zhang ~]$id 
uid=1000(zhang) gid=0(root) groups=0(root),1000(zhang)

[13:52:51 zhang@zhang ~]$id zhang
uid=1000(zhang) gid=1000(zhang) groups=1000(zhang)

[13:53:05 zhang@zhang ~]$id
uid=1000(zhang) gid=0(root) groups=0(root),1000(zhang)

[13:53:16 zhang@zhang ~]$getent passwd zhang
zhang:x:1000:1000::/home/zhang:/bin/bash

[13:54:05 zhang@zhang ~]$touch zhang1.txt

[13:54:13 zhang@zhang ~]$ll
-rw-r--r--  1 zhang root     0 Dec  1 13:54 zhang1.txt

[13:54:16 zhang@zhang ~]$exit 
exit

[13:54:55 zhang@zhang ~]$id 
uid=1000(zhang) gid=1000(zhang) groups=1000(zhang)

[13:55:11 zhang@zhang ~]$touch zhang2.txt

[13:55:17 zhang@zhang ~]$ll
-rw-r--r--  1 zhang root     0 Dec  1 13:54 zhang1.txt
-rw-rw-r--  1 zhang zhang    0 Dec  1 13:55 zhang2.txt

2.6 更改和查看组成员

groupmems 管理和附加组成员

格式及选项

groupmems [选项] [action]

-g, --group groupname	#更改为指定组 (只有root)
-a, --add username 	#指定用户加入组
-d, --delete username 	#从组中删除用户
-p, --purge 		#从组中清除所有成员
-l, --list 		#显示组成员列表

groups 查看用户组关系

格式

groups [选项] [USERNAME]

例:

[14:02:54 root@zhang ~]#groupmems -l -g admins

[14:03:13 root@zhang ~]#groupmems -a zhang -g admins

[14:03:31 root@zhang ~]#id zhang
uid=1000(zhang) gid=1000(zhang) groups=1000(zhang),1002(zhangsan),1112(lisi),1118(admins)

[14:03:34 root@zhang ~]#groupmems -l -g admins
zhang 

[14:04:02 root@zhang ~]#groupmems -a wang -g admins

[14:04:08 root@zhang ~]#groupmems -l -g admins
zhang  wang 

[14:04:14 root@zhang ~]#groups wang
wang : wang admins

[14:04:39 root@zhang ~]#groups zhang
zhang : zhang zhangsan lisi admins

[14:05:06 root@zhang ~]#groupmems -p -g admins	#清除所有成员

[14:05:07 root@zhang ~]#groupmems -l -g admins
posted @ 2020-12-01 14:45  安尧  阅读(321)  评论(0)    收藏  举报