4.用户、组和权限

1.Linux安全模型

资源分派:

  • Authentication:认证,验证用户身份
  • Authorization:授权,不同的用户设置不同权限
  • Accouting |Audition:审计

当用户登录成功时,系统会自动分配令牌token,包括:用户标识和组成员等信息

1.1用户

Linux系统中每个用户是通过uid来唯一标识。

  • 管理员root,0
  • 普通用户1-60000自动分配
    • 系统用户:centos6,1-499;centos7,1-999
    • 登陆用户:centos6,500+;centos7,1000+ 

1.2用户组

Linux系统中可以将用户加入一个或多个用户组中,用户组是通过gid来唯一标识的。

  • 管理员组root,0
  • 普通组:
    • 系统组:centos6,1-499;centos7,1-999
    • 普通组:centos6,500+;centos7,1000+ 

1.3用户和组的关系

  • 用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
  • 用户的附加组(supplementary group):一个用户可以属于零个或多个辅助组,附属组

范例:

[13:55:48 root@centos7 ~]#id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)

1.4安全上下文

Linux安全上下文Context:运行中的程序,即进程,以进程发起者的身份运行,进程所能够访问资源的权限由进程发起者的权限决定

比如:分别以root和wang的身份运行cat /etc/shadow,得到的结果是不同的,资源能否被访问,是由运行着身份决定,而非程序本身

范例:

[14:02:41 root@centos7 ~]#su - wang
Last login: Thu Apr  8 14:01:11 CST 2021 on pts/0
 Hi,dangerous!
[14:02:47 wang@centos7 ~]$cat /etc/shadow
cat: /etc/shadow: Permission denied
[14:02:52 wang@centos7 ~]$exit
logout
[14:02:55 root@centos7 ~]#cat /etc/shadow
root:$6$dxtFO.cqDIya8w4Z$TpE4lkJFlLEnwlZ9Megon97iAGqCUmukQBYsg3f3bLnKXwSRcX673CURpn1pc032lvuz5LXuykddfyWZuj86k/::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::

2.用户和组的配置文件

 2.1用户和组的主要配置文件

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

2.2passwd文件格式

[14:08:58 root@centos7 ~]#cat /etc/passwd | head -1
root:x:0:0:root:/root:/bin/bash

login name:登陆用户名(wang)

passwd:密码(x)

uid:用户身份编号(1000)

gid:登陆默认所在组编号(1000)

gecos:用户全名或注释

home directory:用户家目录

shell:用户默认使用shell

2.3shadow文件格式

登陆用户名

用户密码:一般用sha512加密

从1970年1月1日起到密码最近一次被更改的时间

密码再过几天可以被变更(0表示随时可以被变更)

密码再过几天必须变更(99999表示永不过期)

密码过期前几天系统提醒用户(默认为一周)

密码过期几天后账号会被锁定

从1970年1月1日起,多少天后账号失效

密码的安全策略

  • 足够长
  • 使用数字、大写字母、小写字母及特殊字符中至少3种
  • 使用随机密码
  • 定期更换,不要使用最近曾经使用过的密码

范例:生成随机密码

[14:09:49 root@centos7 ~]#tr -dc '[:alnum:]' < /dev/urandom | head -c 12
CmsovRieC6h1[14:13:42 root@centos7 ~]#openssl rand -base64 9
0RFgCdAOCLmL
[14:13:58 root@centos7 ~]#

2.4group文件格式

[14:14:31 root@centos7 ~]#cat /etc/group | grep webs
webs:x:1002:nginx,varnish

群组名称

群组密码:通常不需要设定,密码是被记录在/etc/gshadow

gid:就是群组的id

以当前组为附加组的用户列表(逗号分隔)

2.5gshadow文件格式

群组名称

群组密码

组管理员列表:组管理员的列表,更改组密码和成员

以当前组为附加组的用户列表:多个用户间用逗号分隔

3用户和组管理命令

用户管理命令

  • useradd
  • usermod
  • userdel

组账号维护命令

  • groupadd
  • groupmod
  • groupdel

3.1用户创建

useradd 命令可以创建新的Linux用户

格式

useradd [option] login

常见选项:

-u uid

-o 配合-u选项,不检查uid的唯一性

-g gid 指明用户所属基本组,可为组名,也可以gid

-c comment 用户的注释信息

-d home_dir 以指定的路径(不存在)为家目录

-s shell 知名用户的默认shell程序,可用列表在/etc/shells文件中

-G 为用户知名附加组,组必须事先存在

-N 不创建私用组做主组,使用users组做主组

-r 创建系统用户

-m 创建家目录,用于系统用户

-M 不创建家目录,用于非系统用户

范例:

[14:28:50 root@centos7 ~]#useradd -r -u 49 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache2

useradd命令默认值设定由/etc/default/useradd定义

[14:28:55 root@centos7 ~]#cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1 #对应/etc/shadow文件第7列,即用户密码过期的宽限期
EXPIRE=   #对应/etc/shadow文件第8列,即用户账号的有效期
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

新建用户的相关文件

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

批量修改用户口令

echo username:passwd | chpasswd

3.2用户属性修改

usermod命令可以修改用户属性

格式:

usermod [option] login

常见选项:

-u uid 新uid

-g gid 新主组

-G group1;新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用 -a选项

-s shell;新的默认shell

-c 新的注释信息

-d 新家目录不会自动创建,若要创建新家目录并移动原家数据,同时使用-m选项

-l 新的用户名

-L lock指定用户,在/etc/shadow密码兰增加!

-U unlock指定用户,将/etc/shadow密码兰的!拿掉

-e YYYY-MM-DD 知名用户账号过期日期

-f 设定非活动期限,即宽限期

3.3删除用户

userdel可以删除Linux用户

常见选项:

-f 强制删除

-r 删除用的家目录和邮箱

3.4查看用户相关的ID信息

id命令可以查看用户的uid,gid等信息

id [option] [user]

常见选项:

-u 显示uid

-g 显示gid

-G 显示用户所属组的id

-n 显示名称,需配合ugG使用

[14:33:52 root@centos7 ~]#id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[14:41:46 root@centos7 ~]#id -u
0
[14:41:47 root@centos7 ~]#id -g
0
[14:41:51 root@centos7 ~]#id -G
0
[14:41:57 root@centos7 ~]#id -n
id: cannot print only names or real IDs in default format
[14:42:00 root@centos7 ~]#id -nu
root

3.5切换用户或以其他用户身份执行命令

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

格式:

su [options] [-] [user]

常见选项:

-l --login su -l username  相当于 su - username
-c --command <command> 

切换用户的方式:

  • su username:非登陆时切换,既不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
  • su - username:登陆式切换,会读取目标用户的配置文件,切换至自己的家目录,即完全切换

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

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

换个身份执行命令:

su [-] username -c 'COMMAND' 

范例:

[14:42:07 root@centos7 ~]#su wang
[14:51:27 wang@centos7 root]$whoami
wang
[14:51:41 wang@centos7 root]$exit
exit
[14:51:43 root@centos7 ~]#su - wang
Last login: Thu Apr  8 14:51:27 CST 2021 on pts/0
 Hi,dangerous!
[14:51:51 wang@centos7 ~]$pwd
/home/wang
[14:51:54 wang@centos7 ~]$whoami
wang
[14:51:58 wang@centos7 ~]$

3.6设置密码

passwd可以修改用户密码

格式:

passwd [options] username 

常见选项:

-d 删除指定用户密码

-l 锁定指定用户

-u 解锁制定用户

-e 强制用户下次登陆修改密码

-f 强制操作

-n 指定最短使用期限

-x 最大使用期限

-w 提前多少天开始警告

-i 非活动期限

--stdin 从标准输入接受用户密码,ubuntu无此选项

范例:非交互式修改用户密码

#此方式更通用,适用于各种Linux版本,如ubuntu
[14:55:27 root@centos7 ~]#echo -e '123456
123456' | passwd wang
Changing password for user wang.
New password: BAD PASSWORD: The password is shorter than 8 characters
Retype new password: passwd: all authentication tokens updated successfully.
#适用于红帽系列的Linux版本
[14:55:39 root@centos7 ~]#echo '123456' | passwd --stdin wang
Changing password for user wang.
passwd: all authentication tokens updated successfully.

范例:设置用户下次必须更改密码

[14:56:02 root@centos7 ~]#passwd -e wang
Expiring password for user wang.
passwd: Success
[14:57:27 root@centos7 ~]#getent shadow wang
wang:$6$ZO5Lohep$FcHn72Z7QFLo.g6NfJO9Ow0pzNDFgsxVw8zPBW/Mjc1b1XrsCJ/iR8SoUOnEjaw.dvkh8Ie4Uh3Nk5Peh.a8l.:0:0:99999:7:::
[14:57:41 root@centos7 ~]#su - wang
Last login: Thu Apr  8 14:51:51 CST 2021 on pts/0
 Hi,dangerous!
[14:58:33 wang@centos7 ~]$exit
logout
[14:58:51 root@centos7 ~]#su lisi
[14:58:54 lisi@centos7 root]$su - wang
Password: 
You are required to change your password immediately (root enforced)
Changing password for wang.
(current) UNIX password: 

3.7修改用户密码策略

chage 可以修改用户密码策略

格式:

chage [option] login

常见选项:

-d last_day 更改密码的时间

-m min_days

-M max_days

-W warn_days

-I INACTIVE 密码过期后的宽限期

-l 显示密码策略

[15:02:59 root@centos7 ~]#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 maximum number of days before password
                                change to MAX_DAYS
  -R, --root CHROOT_DIR         directory to chroot into
  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS

3.9 创建组

groupadd 实现创建组

格式:

groupadd [option] group_name

常见选项:

-g 指明gid号

-r 创建系统组

范例:

groupadd -g 48 -r apache

3.11 删除组 

groupdel 可以删除组

格式:

groupdel group

常见选项:

-f,--force 强制删除,即使是用户的主组也强制删除组

3.12 更改和查看组成员

groupmems 可以管理附加组的成员关系

格式:

groupmems [option] [action]

常见选项: 

-g,--group groupname 更改为制定组(只有root)

-a,--add username 指定用户加入组

-d,--delete username 从组中删除用户

-p,--purge 从组中清楚所有成员

-l,--list 显示组成员列表

groups 可查看用户组关系

格式:

groups [option] [username]

范例:

[15:12:37 root@centos7 ~]#groupmems -l -g admins
groupmems: group 'admins' does not exist in /etc/group
[15:13:52 root@centos7 ~]#groupmems -l -g webs
nginx  varnish 
[15:13:58 root@centos7 ~]#groupmems -a wang -g webs
[15:14:11 root@centos7 ~]#groupmems -l -g webs
nginx  varnish  wang 
[15:14:22 root@centos7 ~]#groupmems -d wang -g webs
[15:14:42 root@centos7 ~]#groups wang
wang : wang
[15:14:47 root@centos7 ~]#

4 文件权限管理

 4.1 文件所有者和属组属性操作

4.1.1 设置文件的所有者 chown

chown 命令可以修改文件的属主,也可以修改文件属组

格式:

chown [option]... [owner][:[group]] file

用法说明:

owner 只修改所有者

owner:group 同时修改所有者和属组

:group 只修改属组,冒号也可以用.替换

--reference=rfile 参考指定的属性,来修改

-R 递归修改

范例:

[15:29:40 root@centos7 data]#cp /etc/fstab f1.txt
[15:29:48 root@centos7 data]#ll f1.txt 
-rw-r--r--. 1 root root 595 Apr  8 15:29 f1.txt
[15:29:55 root@centos7 data]#chown wang f1.txt 
[15:30:02 root@centos7 data]#ll f1.txt 
-rw-r--r--. 1 wang root 595 Apr  8 15:29 f1.txt
[15:30:04 root@centos7 data]#chown :webs f1.txt 
[15:30:13 root@centos7 data]#ll f1.txt 
-rw-r--r--. 1 wang webs 595 Apr  8 15:29 f1.txt
[15:30:15 root@centos7 data]#chown root.bin f1.txt 
[15:30:30 root@centos7 data]#ll f1.txt 
-rw-r--r--. 1 root bin 595 Apr  8 15:29 f1.txt

4.1.2 设置文件的属组信息 chgrp

chgrp 命令可以只修改文件的属组

格式:

chgrp [option] group file

选项:

-R 递归

范例:

[15:30:31 root@centos7 data]#ll f1.txt 
-rw-r--r--. 1 root bin 595 Apr  8 15:29 f1.txt
[15:32:21 root@centos7 data]#chgrp webs f1.txt 
[15:32:28 root@centos7 data]#ll f1.txt 
-rw-r--r--. 1 root webs 595 Apr  8 15:29 f1.txt

4.2 文件权限

4.2.1 文件权限说明

文件的权限主要针对三类对象进行定义

owner 属主,u

group 属组,g

other 其他,o

注意:用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向右查看其权限

每个文件针对每类访问者都定义了三种常用权限

r Readable
w Writable
x excutable

对文件的权限:

r 可使用文件查看类工具,比如:cat,可以获取其内容
w 可修改其内容
x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)

对目录的权限:

r 可以使用ls查看此目录中的文件列表
w 可在此目录中创建文件,也可删除此目录中的文件,而和被删除的文件权限无关
x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限
x 只给目录x权限,不给无执行权限的文件x权限

数学法的权限:

4.2.2 修改文件权限 chmod

 格式:

chmod [option] mode[,mode] file

说明:

MODE:who opt permission
who:u,g,0,a
opt:+,-=
permission:r,w,x

修改一类用户的所有权限
u= g= o= ug= a= u=,g=

修改指定一类用户某个权限
u+ u- g+ g- o+ o- a+ a- + -

-R 递归修改权限

范例:面试题

执行 cp /etc/issue /data/dir/ 所需要的最小权限?
/bin/cp 需要x权限
/etc/ 需要x权限
/etc/issue 需要r权限
/data 需要x权限
/data/dir/ 需要xw权限

4.3 新建文件和目录的默认权限

原文地址:https://www.cnblogs.com/tianakong/p/14631915.html