Linux_3_用户、组和权限管理等

目录

1 Linux安全模型

1.1 用户

1.2 用户组

1.3用户和组的关系

1.3 安全上下文

2 用户和组的配置文件

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

2.3 shadow文件格式

2.4 group文件格式

2.5 gshdow文件格式

2.6 文件操作

3 用户和组管理命令

3.1 用户创建

3.2 用户属性修改

3.3 删除用户

3.4 查看用户相关的ID信息

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

3.6 设置密码

3.7 修改用户密码策略

3.8 用户相关的其它命令

3.9 创建组

3.10 修改组

3.11组删除

3.11 临时切换主组

4 文件权限管理

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

4.1.1 设置文件的所有者chown

4.1.2 设置文件的属组信息chgrp

4.2 文件权限

4.2.1 文件权限说明

4.2.2 修改文件权限chmod

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

4.4 Linux文件系统上的特殊权限

4.4.1特殊权限SUID

4.4.2 特殊权限SGID

4.4.3 特殊权限 Sticky 位

4.4.4 特殊权限数字法

4.5 设定文件特殊属性

4.6 访问控制列表

4.6.1ACL权限功能

4.6.2ACL相关命令

4.6.3 备份和还原ACL


1 Linux安全模型

资源分派:

  • Authentication: 认证:验证用户身份

  • Authorization: 授权:不同的用户设置不同权限

  • Accouting|Audition: 审计

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

1.1 用户

Linux中每个用户是通过User Id (UID)来唯一标识的。

  • 管理员: root,0

  • 普通用户: 1-60000 自动分配

  • 系统用户: 1-499 (C6以前),1-999 (C7以后)

    对守护进程获取资源进行权限分配

  • 登录用户: 500+ (C6以前),1000+ (C7以后)

    给用户进行交互式登录使用

    img

1.2 用户组

Linux中可以将一个或多个用户加入用户组中,用户组是通过Group ID (GID) 来唯一标识的。

  • 管理员组: root,0

  • 普通组:

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

    普通组: 500+ (C6以前),1000+ (C7以后),给用户使用

1.3用户和组的关系

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

  • 用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组

  • Linux里允许组和用户同名

img

1.3 安全上下文

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

比如:分别以root和个人用户joyce的身份运行bin/cat/etc/shadow ,得到的结果是不同的,资源/文件能否能被访问,是由运行者的身份决定,非程序本身

2 用户和组的配置文件

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

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

2.2 passwd文件格式

 login name:   登录用名 (wang)
 passwd:     密码(x)
 UID:      用户身份编号(1000)
 GID:      登录默认所在组编号(1000)
 GECOS:      用户全名或注释
 home directory:用户主目录(/home/wang)
 shell:      用户默认使用shell(/bin/bash)

2.3 shadow文件格式

img以::分割每个属性

  • 登录用名

  • 用户密码:一般用sha512加密

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

  • 密码再过几天可以被变更

  • (0表示随时可被变更)

  • (99999表示永不过期)

  • 密码再过几天必须被变更

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

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

  • 从1970年1月1日算起,多少天后帐号失效

更改密码加密算法

 authconfig  --passa1go=sha256 --update

密码的安全策略

  • 足够长

  • 使用数字、大写字母、小写字母及特殊字符中至少3种

  • 使用随机密码

  • 定期更换,不要使用最近曾经使用过的密码

生成随机密码

 tr -dc '[:alnum:]' < /dev/urandom | head -c 12 在urandom中取前12位
 openssl rand -base64 9  生成9位随机数

2.4 group文件格式

img

  • 群组名称: 就是群组名称

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

  • GID: 就是群组的ID

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

2.5 gshdow文件格式

img

  • 群组名称: 就是群的名称

  • 群组密码:

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

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

2.6 文件操作

vipw和vigr pwck和grpck

3 用户和组管理命令

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

3.1 用户创建

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

 useradd [options] LOGIN

常见选项:

 -U  UID
 -o  配合 -u 选项,不检查UID的唯一性
 -g  GID 指明用户所属基本组,可为组名,也可以GID
 -c  “COMMENT” 用户的注释信息
 -d  HOME_DIR 以指定的路径(不存在)为家目录
 -S  SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
 -G  GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
 -N  不创建私用组做主组,使用users组做主组
 -r  创建系统用户 Centos 6之前:ID<500,Centos 7以后:ID<1000
 -m  创建家目录,用于系统用户
 -M  不创建家目录,用于非系统用户

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

 [11:16:25 root@CentOS8]#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  

显示或更改默认设置

 useradd -D
 useradd -D -s SHELL
 useradd -D -b BASE_DIR
 useradd -D -g GROUP

新建用户的相关文件

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

批量创建用户

 newusers passwd格式文件

批量修改用户口令,可以将前面保存成文件直接管道

 echo username:passwd | chpasswd

3.2 用户属性修改

usermod 命令可以修改用户属性

格式:

 usermod [OPTION] ogin

常见选项:

 -u  UID:  新UID
 -g  GID:  新主组
 -G  GROUP1LGROUP2..[GROUPN]: 新附加组,原来的附加组将会被覆盖,若保留原有,则要同时使用-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  设定非活动期限,宽限期

3.3 删除用户

userdel可删除Linux 用户

格式:

 userdel [OPTION]... Login

常见选项:

 -f  --force   强制
 -r  --remove  删除用户家目录和邮箱

3.4 查看用户相关的ID信息

id 命令可以查看用户的UID,GID等信息

 id [OPTION]... [USER]

常见选项:

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

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

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

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

切换用户的方式:

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

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

换个身份执行命令:

 su [-] UserName -c 'COMMAND'

范例:

 [wang@centos8 ~]$su - root -c "getent shadow"

常见选项

 -l  --login su -l UserName 相当于su-UserName

3.6 设置密码

passwd可以修改用户密码 格式:

 passwd [OPTIONS] UserName

常用选项:

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

如:

 echo "PASSWORD" |  passwd --stdin USERNAME

3.7 修改用户密码策略

chage可以修改用户密码策略

格式:

 chage [OPTION]... LOGIN

常见选项:

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

3.8 用户相关的其它命令

 chfn  指定个人信息
 chsh  指定shell
 finger  可看用户个人信息

3.9 创建组

groupadd实现创建组

格式:

 groupadd [OPTIoN]... group_name

常见选项:

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

范例:

 groupadd -g 48 -r apache

3.10 修改组

组属性修改: groupmod

格式:

 groupmod [OPTION]... group

常见选项:

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

3.11组删除

groupdel 可以删除组

格式:

 groupdel [options] GROUP

常见选项:

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

3.11 临时切换主组

su命令可以切换主组

 su 用户

4 文件权限管理

img

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

4.1.1 设置文件的所有者chown

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

 chown [OPTION]...[OWNER][:[GROUP]] FILE...
 chown [OPTION]...--reference=RFILE FILE..

用法说明:

 OWNER 只修改所有者
 OWNER:GROUP   同时修改所有者和属组
 :GROUP  只修改属组,冒号也可用.替换
 -R:   递归,修改文件夹及文件夹中文件,慎用
 --reference=FILE1 FILE2 参考指定的FILE1的属性,来修改FILE2的属性

例:先修改所有者,再修改所属组

img

4.1.2 设置文件的属组信息chgrp

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

格式:

 chgrp [OPTION]...GROUP FILE.
 chgrp [OPTION]...--reference=RFILE FILE...
 ​
 -R递归

4.2 文件权限

4.2.1 文件权限说明

文件的权限主要针对三类对象进行定义 每个文件针对每类访问者都定义了三种权限

 owner 属主,u
 group 属组,g
 other 其他,o

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

 r ReadabTe
 w Writable
 x eXcutabTe

对文件的权限:

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

对目录的权限:

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

八进制数字:

 --- 000 0
 --x 001 1
 -W- 010 2
 -wx 011 3
 r-- 100 4
 r-x 101 5
 rw- 110 6
 rwx 111 7

如:

 755 rwx r-x r-x
 640 rw- r-- ---

img

4.2.2 修改文件权限chmod

 格式
 chmod [OPTION]... MODE[,MODE]... FILE...  模式法
 chmod [OPTION]... OCTAL-MODE FILE...    数字法 
 ​
 #参考RFILE文件的权限,将FILE的修改为同RFILE
 chmod [OPTION]... --reference=RFILE FILE...

说明:

 MODE:who opt permission
 who:u, g, o, a
 opt:+, -, =
 permission:r , w, x
 ​
 修改一类用户的所有权限
 u= g= o= ug= a= u=,g=
 修改一类用户某位或某些位权限
 u+ u- g+ g- 0+ 0- a+ a- + -
 -R: 递归修改权限

范例:

 chmod u+wx,g-r,o=rx filename

对于文件夹:

  • 只有 wx 权限,不能列出文件夹中文件,如果事先知道,则可以修改与访问文件

  • 只有 rw 权限,不能进去文件夹,能读出文件夹中文件,但不能删除文件

所以一般文件夹的权限: rwx / rx / ---

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

umask的值可以用来保留在创建文件权限 实现方式:

  • 新建文件的默认权限:666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变

  • 新建目录的默认权限:777-umask

非特权用户umask默认是002 root的umask 默认是022

 umask   查看当前umask值
 umask -S  模式方式显示
 umask -p  数字方式显示
 ​
 umask #   修改umask为#
 ​
 仅对某个生成的文件改用特殊的umask,而不影响系统当前的umask,即一次性使用
 ( umask 666; touch /data/f1.txt ) 

img编辑

持久保存umask

 全局设置:/etc/bashrc
 用户设置:~/.bashrc

注意:修改文件系统权限需要文件系统支持,而和操作系统无关

4.4 Linux文件系统上的特殊权限

前面介绍了三种常见的权限: r,w,x 还有三种特殊权限:SUID,SGID,sticky

4.4.1特殊权限SUID

前提:进程有属主和属组,文件有属主和属组

SUID权限的设置:

 chmod u+s  file...
 chmod 6### file...
 chmod u-s  file...
  1. 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限

  2. 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组

  3. 进程访问文件时的权限,取决于进程的发起者

    • 进程的发起者,同文件的属主: 则应用文件属主权限

    • 进程的发起者,属于文件属组;则应用文件属组权限

    • 应用文件其它”权限

二进制的可执行文件上SUID权限功能:

  • 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

  • 启动为进程之后,其进程的属主为原程序文件的属主

  • SUID只对二进制可执行程序有效

  • SUID设置在目录上无意义

4.4.2 特殊权限SGID

二进制的可执行文件上SGID权限功能 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 启动为进程之后,其进程的属组为原程序文件的属组

SGID权限设定:

 chmod g+s  FILE..
 chmod 2### FILE
 chmod g-s  FILE...

目录上的SGID权限功能 默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有写权限的 用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录

4.4.3 特殊权限 Sticky 位

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权 在目录设置Sticky 位,只有文件的所有者或root可以删除该文件 sticky 设置在文件上无意义

Sticky权限设定:

 chmod o+t  DIR..
 chmod 1### DIR
 chmod o-t  DIR...

4.4.4 特殊权限数字法

 SUID SGID STICKY
  4     2     1
 000 0
 001 1
 010 2
 011 3
 100 4
 101 5
 110 6
 111 7

范例:

 chmod 4777 /tmp/a.txt

权限位映射

 suID:   user,占据属主的执行权限位
   s:  属主拥有x权限
   S:  属主没有x权限
 SGID:   group,占据属组的执行权限位
   s:group拥有x权限
   S:group没有x权限
 Sticky: other,占据other的执行权限位
   t:other拥有x权限
   T:other没有x权限

4.5 设定文件特殊属性

设置文件的特殊属性,可以防止root用户误操作删除或修改文件

 不能删除,改名,更改
 chattr +i filename
 删除i的功能:-i即可
 chattr -i filename
 ​
 只能追加内容,不能删除和改名
 chattr +a filename
 删除i的功能:-a即可
 chattr -a filename
 ​
 显示带有的特定属性
 lsattr

4.6 访问控制列表

我们目前有3种身份的用户:所有者、属组、other

当我们想要给某个用户单独设置一些特殊的不属于以上3种身份权限的用户时,传统Linux无法实现,未来实现这种功能,可以使用ACL

4.6.1ACL权限功能

ACL:Access Control List,实现灵活的权限管理 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限 Centos7默认创建的xfs和ext4文件系统具有ACL功能 Centos7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

  • tune2fs -o ac1 /dev/sdb1

  • mount -o ac1 /dev/sdb1 /mnt/test

ACL生效顺序: 所有者,自定义用户,所属组|自定义组,其他人

4.6.2ACL相关命令

 setfacl可以设置ACL权限
 setfacl -m u:joyce:0/rx filename  设置ACL权限
 setfacl -b u:joyce filename     取消ACL权限
 ​
 getfacl可查看设置的ACL权限

mask权限

  • mask使所有者和other之外的人和组的权限有一个最大值,不可超过这个值

  • mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

  • 用户或组的设置必须存在于mask权限设定范围内才会生效

  • 一旦有了ACL:chmod g=rx filename这种的g不再代表属组,而是mask,而文件--- --- --- 中间的三条也不是组而是mask

范例:

 setfac1 -m mask::rx filename 或 chmod g=rx filename

--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以 范例:

 setfac1 --set u::rw,u:wang:rw,g::r,o::- filel

4.6.3 备份和还原ACL

主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录 和文件的ACL信息

范例:

 getfacl -R /tmp/dir > acl.txt #备份ACL权限到acl.txt里
 ​
 setfacl -R -b /tmp/dir  #消除ACL权限
 ​
 setfacl -R --set-file=acl.txt tmp/dir #还原ACL权限
 ​
 setfacl --restore acl.txt #还原ACL权限
 ​
 getfacl -R /tmp/dir   #查看ACL权限

一般情况下,ACL比chmod更加方便安全,因为chmod修改后如果我们不记得原来的权限,则很难恢复;还容易给文件增加执行权限。而ACL是单独设置,修改后如果想修改也很简单,更加安全

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值