四、Linux用户与权限管理

本文详细介绍了Linux系统中的用户和权限管理,包括用户和组的概念、属性,如uid、 gid、root用户,以及/etc/passwd和/etc/shadow文件。用户管理涉及用户创建、修改、删除和密码管理,如useradd、usermod、passwd和chage命令。同时,文章还阐述了组管理,如groupadd、groupmod和groupdel。此外,权限管理部分讲解了文件的读写执行权限、ACL权限以及特殊权限(SUID、SGID、SBIT)。最后,讨论了sudo提权和sudoers配置,确保系统安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux用户和权限管理

一、Linux用户和组的定义

1.1 用户和组概念的引入

  • Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

  • 为了更加方便的管理多个用户,就出现了用户组的概念,关于用户和用户组☆☆☆

    • 系统上的每个进程(运行的程序)都是作为特定用户运行
    • 每个文件是由一个特定的用户拥有
    • 访问文件和目录受到用户的限制
    • 与正在运行的进程相关联的用户确定该进程可访问的文件和目录
      在这里插入图片描述
      在这里插入图片描述
  • 实现用户账号的管理,要完成的工作(相关命令)主要有如下几个方面:

    • 用户账号的添加、删除与修改
    • 用户口令(密码)的管理
    • 用户组的管理

1.2 用户的相关属性

1.2.1 用户uid
  • Linux操作系统会依据用户的uid数值来判定这个用户的角色,分别如下
    • 0:超级管理员root,在Linux系统中拥有所有权利
    • Centos6:1-499,Centos7:1-999 :系统用户,系统用户往往用来约束系统中的服务
    • Centos6:500+,Centos7:1000+:普通用户,可以用来登录和使用Linux系统
1.2.2 root用户
  • uid是0
  • 拥有操作系统的所有权力
  • 该用户有权利覆盖文件系统上的普通权限
  • 安装或删除软件并管理文件和目录
  • 大多数设备只能由root控制
1.2.3 /etc/passwd用户属性
  • /etc/passwd:用户及其属性信息

在这里插入图片描述

  • 字段解释(以第一行root为例)
字段解释
第一列root用户名称username
第二列x密码占位符,会去/etc/shadow中查找
第三列0用户id(uid),root用户为0
第四列0用户主组id(gid),root组id为0
第五列root这里一般写对此用户的描述,作用等
第六列/root记录用户家目录的位置
第七列/bin/bash用户登录的默认shell
  • passwd中的常见的两种shell
    • /bin/bash:这个是Linux的命令行工具,我们正常登陆之后默认就是进入命令行
    • /sbin/nologin:如果写成nologin,那么用户将无法登录,有些用户是作为进程权限管理而存在的,不需要登录。如果提供登录的功能反而不安全,所以写成nologin(常用于不用登录的系统用户)
1.2.4 /etc/shadow密码属性
  • /etc/shadow:用户密码以密码期限文件

在这里插入图片描述

  • 字段解释(以第一行root为例)
字段列数说明
第一列root用户名
第二列...一大串使用sha-512加密后的密码
第三列最后一次修改密码的时间last change date
第四列0最小修改时间间隔,0表示随时修改min days
第五列99999密码有效期,99999表示不会过期max days
第六列7密码警告时间天数warn days
第七列密码过期后的宽限时间inactive days
第八列账号过期时间password expiration
第九列保留字段

在这里插入图片描述

1.2.5 /etc/login.defs文件
  • /etc/login.defs 文件是用来创建用户时进行一定的限制,但是优先级低于 /etc/passwd
    /etc/shadow ,如果有冲突的地方,系统会以 /etc/passwd/etc/shadow 为准
[root@localhost ~]# egrep -v '^[ ]*$|^#' /etc/login.defs
MAIL_DIR /var/spool/mail 	# 系统消息(邮件)文件夹
PASS_MAX_DAYS 99999 		# 密码有效最大天数
PASS_MIN_DAYS 0 			# 密码有效最小天数
PASS_MIN_LEN 5 				# 密码长度
PASS_WARN_AGE 7 			# 密码失效警告倒计时
UID_MIN         1000 		# 用户UID最小1000
UID_MAX         60000 		# 用户UID最大60000
SYS_UID_MIN        201 		# 系统用户UID最小201
SYS_UID_MAX        999		# 系统用户UID最大999
GID_MIN         1000 		# 用户组GID最小1000
GID_MAX         60000 		# 用户组GID最大60000
SYS_GID_MIN        201 		# 系统组最小GID
SYS_GID_MAX        999 		# 系统组最大GID
CREATE_HOME yes 			# 创建家目录
UMASK      077 				# 创建文件/目录的权限掩码
USERGROUPS_ENAB yes 		# 创建用户时同时生成组,如果此处是no 创建的用户会是gid=100(users)groups=100(users)即users系统组
ENCRYPT_METHOD SHA512 		# 加密方法sha512这个方法生成的密码在/etc/shadow里面的第二列会以$6$开头

1.4 组的相关属性

1.4.1 组id与类别
  • 管理员组:root 0
  • 普通组:
    • 系统组
    • 登录用户组
  • 组类别:
    • 基本组(主组):组名同用户名,且仅包含一个用户,私有组
    • 附加组(额外组):一个用户可以属于多个额外组
1.4.2 /etc/group组属性
  • /etc/group:组及其属性信息

在这里插入图片描述

字段列数说明
第一列组名
第二列组密码占位符
第三列组id(gid),root的gid默认是0
第四列在此组的成员列表(不包括默认以此为主组的同名用户)
  • 注:/etc/gshadow:组密码及其相关属性 (了解就行了,很少用)
    在这里插入图片描述

1.5 用户与组的关系

  • 用户一定有且只有一个主组,若不指定,默认为同名组(自动创建)
  • 附加组可以有多个,需要手动指定
  • 主要作用:用户加入组中,即可获得此组的权限(例如:想拥有文件属组的权限,则指定此用户为此属组的附加组。参看下文权限管理)

在这里插入图片描述

二、用户管理(增删改查)

2.1 用户属性查看

2.1.1 id命令
  • 语法:id [选项] 用户名
  • 功能:用于显示用户的uid,主组gid和附加组id
  • 常用选项:
参数说明
-g显示用户所属群组id
-G显示用户所属附加组id
-n显示用户,所属群组或附加群组的名称
-r显示实际ID
-u显示用户ID
[root@server1 ~]# id mysql
uid=1000(mysql) gid=1000(mysql) groups=1000(mysql)
[root@server1 ~]# id -g mysql
1000
[root@server1 ~]# id -G mysql
1000
[root@server1 ~]# id -u mysql
1000

# id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。
[root@server1 ~]# id -r mysql
id: cannot print only names or real IDs in default format
2.1.2 查看相关配置文件
  • 就是查看1.2.3和1.2.4介绍的两个文件,配合文件管理的文件查看命令
2.1.3 查看文件属主、属组(严格来说属于文件的属性)

在这里插入图片描述

2.1.4 其他相关命令
  • w查看活动用户及其相关信息

在这里插入图片描述

  • last 查看用户登录日志

在这里插入图片描述

  • crontab -l :查看当前用户的计划任务(后面章节会讲)
  • who am iwhoami:查看当前登录用户信息
[root@server1 ~]# whoami
root
[root@server1 ~]# who am i
root     pts/0        2022-05-18 09:13 (192.168.180.1)
  • logname:查看自己登录的用户名

2.2 用户创建相关

2.2.1 创建用户useradd
  • 语法:useradd 用户名 [[选项] [参数]]
  • 功能:创建用户并指定用户的属性
  • 常见选项
选项说明
-u指定uid
‐g指定gid
‐c用户注释信息
‐d家目录
‐s指定shell(/etc/shells)
‐G附加组
‐r创建系统用户
  • 默认设置:/etc/default/useradd

在这里插入图片描述

  • 示例:
[root@server1 ~]# useradd zhangsan -G group1 -s /bin/csh -c '张三的信息'
[root@server1 ~]# id zhangsan
uid=1007(zhangsan) gid=1010(zhangsan)=1010(zhangsan),1009(group1)
[root@server1 ~]# cat /etc/passwd | grep zhangsan
zhangsan:x:1007:1010:张三的信息:/home/zhangsan:/bin/csh

2.3 用户修改相关

2.3.1 修改用户组usermod
  • 语法:usermod 用户名 [[选项] [参数]]
  • 功能:修改/添加用户的组
  • 常见选项
选项说明
-a追加,一般和-aG连用,将用户添加到附加组
-G指定用户的附加组,会覆盖其他附加组
-d指定用户的新家目录
-m将家目录内容移到新位置,仅可和-dm一起使用
-L锁定用户
-U解锁用户
[root@server1 ~]# usermod -G it user01 #覆盖附加组
[root@server1 ~]# id user01
uid=1000(user01) gid=1000(user01)=1000(user01),1011(it)

[root@server1 ~]# usermod -aG hr user01 #追加附加组
[root@server1 ~]# id user01
uid=1000(user01) gid=1000(user01)=1000(user01),1004(hr),1011(it)
2.3.2 修改用户密码passwd
  • 语法:passwd 用户名 [[选项] [参数]]
  • 功能:设置/修改密码,同时指定密码的属性
  • 常见选项
选项说明
‐n指定最短使用期限mindays
‐x最大使用期限 maxdays
‐w 提前多少天开始警告warndays
‐i非活动期限 inactivedays
‐‐stdin从标准输入接收用户密码。例:`echo “PASSWD”
-k保持身份验证令牌不过期
-d删除已命名帐号的密码
-l锁定指名帐户的密码
-u解锁指名账户的密码
-S报告已命名帐号的密码状态
  • 示例
[root@server1 ~]# passwd zhangsan
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
2.3.3修改用户密码属性change命令
  • 语法:change [选项] 用户名

  • 功能:chage是用于更改用户密码过期信息

  • 常见选项

在这里插入图片描述

参数说明
-d将最近一次密码设置时间设为“最近日期”
-E过期日期:将帐户过期时间设为“过期日期”
-I INACITVE过期 INACTIVE 天数后,设定密码为失效状态
-l显示帐户年龄信息
-m最小天数:将两次改变密码之间相距的最小天数设为“最小天数”
-M最大天数:将两次改变密码之间相距的最大天数设为“最大天数”
-W警告天数:将过期警告天数设为“警告天数”
  • 示例
[root@server1 ~]# chage -d 0 zhangsan
[root@server1 ~]# logout
# 尝试登录zhangsan
You are required to change your password immediately (root enforced)
Last login: Wed May 18 15:19:45 2022
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user zhangsan.
Changing password for zhangsan.
(current) UNIX password: 

2.4 用户删除相关

2.4.1 删除用户userdel
  • 语法:userdel [选项] 用户名
  • 功能:删除用户 [家目录]
  • 常见选项
    • -r:连同家目录一起删除
    • -f:强制删除用户
[root@server1 home]# ls
user01  user02  user03  user04  zhangsan
[root@server1 home]# userdel -r zhangsan
[root@server1 home]# ls
user01  user02  user03  user04

三、用户组管理(增删改查)

3.1 创建组groupadd

  • 语法:groupadd [选项] 组名
  • 功能:创建用户组/系统组
  • 常见选项
    • ‐g:指定gid
    • ‐r:创建系统组
[root@server1 ~]# groupadd -g 1002 lisi
[root@server1 ~]# tail -1 /etc/group
lisi:x:1002:

3.2 删除组groupdel

  • 语法:groupdel [选项] 组名
  • 功能:删除组
[root@server1 ~]# groupdel lisi
[root@server1 ~]# tail -3 /etc/group
ntp:x:38:
mysql:x:1000:
slocate:x:21:

3.3 修改组groupmod

  • 语法:groupmod [选项] 组名
  • 功能:修改用户组的属性
  • 常见选项
参数说明
-g将组ID改为GID
-n改名为NEW_GROUP
-o允许使用重复的GID
  • 示例
[root@server1 ~]# groupmod -n zs zhangsan

3.4 组查询

  • 即查看1.4.2介绍的相关配置文件
[root@server1 ~]# tail -n 5 /etc/group
postdrop:x:90:
postfix:x:89:
ntp:x:38:
mysql:x:1000:
slocate:x:21:

四、文件权限管理

4.1 权限设置原因

  • 服务器中的数据价值

  • 员工的工作职责和分工不同

  • 应对自外部的攻击(挂马)

  • 内部管理的需要

4.2 三种基本权限

  • 文件的权限对象

    • owner:属主,u
    • group:属组,g
    • other:其他,o
  • root不受权限限制,拥有所有权限

  • 文件的三种权限:

权限对文件对目录
r(Readable 4)可读文件内容可以使用ls查看此目录中的文件列表
w(Writeable 2)可修改其内容可在此目录中创建mkdir,touch,也可以删除rmdir,rm -rf此目录中的文件
x(Excutable 1)可作为命令执行可以cd进入此目录
  • 注:一般给予目录读权限时,也将会给其执行权限
    在这里插入图片描述

  • ll命令的前面2-10列的rwx或-分别表示此文件对属主、属组、其他人的权限,-表示无此权限

在这里插入图片描述

4.3 基本权限管理(u,g,o)

4.3.1 更改属主(组)chown
  • 语法:chown [选项] [所有者][:[组]] 文件

  • 功能:用于设置文件所有者和文件关联组的命令,需要root的权限才能执行

  • 常见选项

    • -R: 处理指定目录以及其子目录下的所有文件
    • -v: 显示详细的处理信息
  • 示例

# 设置所有者为root
[root@server1 ~]# chown root anaconda-ks.cfg 
# 将属主设置为user01,属组设置为it
[root@server1 ~]# chown user01:it file.txt 
# 将目录下的所有文件属主为user01,属组it
[root@server1 ~]# chown -R user01:it dir/* 
4.3.2 更改属组chgrp
[root@server1 ~]# chown alice:hr file1#改属主,属组
[root@server1 ~]# chown alice file1 #改属主
[root@server1 ~]# chown :hr file1 #改属组

[root@server1 ~]# chgrp g1 file1#改文件属组
[root@server1 ~]# ll file1
-rw-r--r--. 1 alice g1 0 712 18:01 file1

[root@server1 ~]# chgrp -R g1 dir1#改文件夹属组
[root@server1 ~]# ll
总用量 16
-rw-------. 1 root  root 1241 316 17:52 anaconda-ks.cfg
-rwxr-xr-x. 1 root  root 9024 524 12:11 a.out
drwxr-xr-x. 2 root  g1      6 712 18:10 dir1
4.3.3 更改文件权限chmod
  • 语法:chmod [选项] 模式[,模式] 文件
  • 功能:控制用户对文件的权限
  • 模式说明:
    • mode : 权限设定字串,格式如下
    • [ugoa][[+-=][rwx]...][,...]
    • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者, o 表示其他以外的人,a 表示这三者皆是。
    • +表示增加权限、-表示取消权限、 = 表示唯一设定权
    • r 表示可读取, w 表示可写入, x 表示可执行
  • 常见选项
    • ‐R:递归设置,针对文件夹(目录)
    • -v:显示权限变更的详细资料
    • -f: 若该文件权限无法被更改也不要显示错误讯息
  • 八进制语法
    • chmod命令可以使用八进制数来指定权限。
    • 文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的
      读、写、执行。
    • 历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。
      在这里插入图片描述
[root@server1 ~]# chmod u=rwx,g=r,o=r file1
[root@server1 ~]# ll file1
-rwxr--r--. 1 alice g1 0 7月  12 18:01 file1

[root@server1 ~]# chmod u-x file1
[root@server1 ~]# ll file1
-rw-r--r--. 1 alice g1 0 7月  12 18:01 file1

[root@server1 ~]# chmod a-w file1
[root@server1 ~]# ll file1
-r--r--r--. 1 alice g1 0 7月  12 18:01 file1

[root@server1 ~]# chmod 764 file1
[root@server1 ~]# ll file1
-rwxrw-r--. 1 alice g1 0 7月  12 18:01 file1

  • 删除文件失败如何解决?
    • 可检查用户对所在目录是否有w权限(能否删除此文件要看所在目录的权限)
    • sudo提权
    • 查看是否有特殊权限或锁定

4.4 ACL权限

4.4.1ACL权限引入

ACLAccess Control List 的缩写,是Linux开的一套新的文件系统权限管理方法。

  • 传统的Linux文件系统的权限控制是通过user、group、other与r(读)、w(写)、x(执行)的不同组合来实现的。
  • 随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求。例如,我们可能需把一
    个文件的读权限和写权限分别赋予两个不同的用户或一个用户和一个组这样的组合。传统的权限管理设置起来就力不从心了。
  • Linux 系统中, ACL 可以针对文件单独设置某个用户或者用户组的管理权限。优势就是让权限控制更加的精准。
4.4.2 getfacl获取ACL权限
  • 语法:getfacl [选项] file
  • 功能:获取文件访问控制列表的详细内容
  • 常用选项
参数说明
-a仅显示文件访问控制列表
-d仅显示默认的访问控制列表
-c不显示注释表头
-e显示所有的有效权限
-E显示无效权限
-R递归显示子目录
-t使用制表符分隔的输出格式
  • 示例
[root@server1 ~]# getfacl anaconda-ks.cfg
# file: anaconda-ks.cfg
# owner: root
# group: root
user::rw-
group::---
other::---

# 查看acl权限列表,不显示注释表头
[root@server1 ~]# getfacl -c anaconda-ks.cfg
user::rw-
group::---
other::---
4.4.3 setfacl管理ACL权限
  • 语法:setfacl [选项] [u/g/m/o:name[:权限]] file
  • 功能:获取文件访问控制列表的详细内容
  • 常用选项
餐数选项
‐m 修改ACL设定参数
-M从文件读取ACL条目更改
‐x 删除ACL设定参数
-X从文件读取ACL条目并删除
‐b 移除所有的ACL设定
‐d 添加默认的ACL权限
-k移除默认ACL
-R递归操作子目录
  • 删除ACL权限
# 删除用户权限:
setacl ‐x u:username filename 
# 删除组权限:
setacl ‐x g:groupname filename 
# 删除整个acl权限:
setacl ‐b filename
  • 用户设定ACL权限:
    • setfacl -m u:username:权限 filename
# 设定alice对file1有rwx权限 
[root@server1 ~]# setfacl -m u:alice:rwx file1
[root@server1 ~]# getfacl file1
# file: file1
# owner: alice
# group: g1
user::rwx
user:alice:rwx
group::rw-
mask::rwx
other::r--

#设定user对testdirectory目录下所有文件有rwx权限 
[root@server1 ~]# setfacl ‐R ‐m u:user:rwx testdirectory

# 去掉user对testdirectory的x权限 
[root@server1 ~]# setfacl ‐x u:user testdirectory/

#去掉所有acl权限 
[root@server1 ~]# setfacl -b file1
[root@server1 ~]# getfacl file1
# file: file1
# owner: alice
# group: g1
user::rwx
group::rw-
other::r--

# 为testdirectory目录添加默认的acl权限,此目录下创建目录和文件,user都有rwx权限 
[root@server1 ~]# setfacl ‐d ‐m u:user:rwx testdirectory/
  • 组设定ACL权限:
    • setfacl -m g:groupname:权限 filename
# 给acl_test1文件添加mygropu1组rx权限设定 
[root@study ~]# setfacl ‐m g:mygroup1:rx acl_test1
[root@study ~]# getfacl acl_test1 
# file: acl_test1 
# owner: root 
# group: root
user::rwx 
user:vbird1:rx 
group::r‐‐ group:mygroup1:rx # 组权限设定 
mask::rx 
other::r‐‐
4.4.4 mask有效权限
  • mask 权限:指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过mask 规定的权限范围,超出部分做无效处理。
# 修改mask值
[root@localhost ~]# setfacl -m m::rwx /workdir/newfile
[root@localhost ~]# getfacl -c /workdir/newfile
user::rw-
user:user1:r-x
group::rwx
mask::rwx
other::---

4.5 特殊权限

  • 文件除rwx三个普通权限之外,还有三个特殊权限
  • 文件的特殊权限包括:SUIDSGIDSBIT (sticky)
4.5.1 SUID:冒险位S(4)
  • suid 属性只能运用在可执行文件上,含义是开放文件所有者的权限给其他用户,即当用户执行该执行文件时,会拥有该执行文件所有者的权限。
  • 如果给一个非二进制文件文件附加 suid 权限,则会显示大写S(即不可执行),属于无效。(可执行文件拥有suid权限显示小写s

查询命令所在的路径

[root@server1 ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
[root@server1 ~]# type passwd
passwd is /usr/bin/passwd
[root@server1 ~]# which passwd
/usr/bin/passwd
  • 举例

    • 普通用户zhangsan修改密码=> 调用passwd命令=> 执行/usr/bin/passwd => 修改/etc/shadow文件

    • 详细说明

      普通用户能够执行passwd命令修改自己的密码,修改密码其实就是修改 /etc/shadow 这个文件,查看 /etc/shadow 这个文件的权限,发现除了 root 其他人没有写权限,但是普通用户能够成功执行passwd命令 ,其原因就在于 passwd 这个命令的权限是 rwsrw---- ,其中 s 的作用就是让执行命令的人具有和该命令拥有者相同的权限。

#普通用户没有直接修改/etc/shadow中密码的权利,只有root可以
[root@server1 ~]# ll /etc/shadow
----------. 1 root root 1100 712 17:44 /etc/shadow

#普通用户可以通过使用具有s权限的passwd命令,借用root的权利来修改自己的密码
[root@server1 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 41 2020 /usr/bin/passwd
4.5.2 SGID:强制位S(2)
  • sgid 属性可运用于文件或者目录,运用在文件的含义是开放文件所属组的权限给其他用户,即当用户执行该可执行文件时,会拥有该可执行文件所属组用户的权限。
  • 如果给一个非二进制文件文件附加 sgid 权限,则会显示大写S,属于无效。
  • 运用在目录上的含义是,在该目录下所有用户创建的文件或者目录的所属组都和其一样(统一属组)。即如果 /home/user1 目录具有sgid 权限,且所属组是 user1 ,则任何用户在 /home/user1 下创建的子目录或者文件的所属组都是 user1。(仅对设置后新创建的文件有效,对已经存在的文件则不会修改其属组)
  • 示例
[root@server1 ~]# chown :zhangsan test/
[root@server1 ~]# ll -d test/
drwxr-xr-x  2 root zhangsan          6 May 18 14:26 test
[root@server1 ~]# chmod g+s test/
[root@server1 ~]# ll -d test/
drwxr-sr-x 2 root zhangsan 6 May 18 14:26 test/
# 在test下创建的文件默认和test目录同一属组
[root@server1 test]# touch file1
[root@server1 test]# ll
total 0
-rw-r--r-- 1 root zhangsan 0 May 18 14:28 file1
4.5.3 SBIT:粘滞位T(1)
  • sticky 权限只能运用于目录上,含义是该目录下所有的文件和子目录只能由所属者删除,即使其的权限是777
    或者其他。
    • 同一用户组的多个用户拥有共同的目录(公共目录,可设置为777),在创建文件时该用户组的所有用户都有相同的权利操作文件。用户创建该目录时,只有自己或root可以删除该目录下的文件,其他用户不可以修改或删除此文件。
[root@server1 ~]# ll -d /tmp
drwxrwxrwt. 9 root root 264 712 14:01 /tmp#t表示具有SBIT权限
4.5.4 设置或修改特殊文件
# 若使用八进制数字,第一位表示特殊权限,后三位为基本权限
chmod u+s file1
chmod 4644 file1
chmod u-s file1
chmod 0644 file1

chmod g+s dir1
chmod 2755 dir1
chmod g-s dir1
chmod 0755 dir1

chmod o+t dir1
chmod 1755 dir1
chmod o-t dir1
chmod 0755 dir1

[root@server1 ~]# chmod 7644 file1
[root@server1 ~]# ll 
-rwSr-Sr-T. 1 alice g1      0 712 18:01 file1

注:

  • 大写的高级权限表示普通权限没有x执行权限
  • 小写的高级权限表示普通权限有x执行权限
  • 特殊权限生效的前提:SUID/SGID必须要求可执行的二进制文件,而SBIT必须要求目录

4.6 进程umask

umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。

  • umask :文件或目录的遮掩码 ,进程新建文件、目录的默认权限会收到umask的影响,umask表示要减掉得到权限。(实际文件权限 = 现有的最高存取权限 - umask的值
    • File文件:666 ‐ umask ,root创建的文件权限默认为644,普通用户创建的文件权限默认为664
    • Dir目录:777 ‐ umask ,root创建的目录权限默认为755,普通用户创建的目录权限默认为775
    • 创建一个普通文件最高权限666(预设没有x权限)。而创建一个目录其最高权限777
  • 查看:umask
    • -S:以文字的方式来表示权限掩码
[root@server1 ~]# umask
0022  #root默认为022
[zhangsan@server1 ~]$ umask
0002  #普通用户默认为022
[root@server1 test]# umask -S
u=rwx,g=rx,o=rx
  • 临时设定:umask 设置值(不建议修改)
  • 永久设定:修改相关配置文件~/.bashrc(不建议修改),在文件中追加 :umask 设置值

五、sudo提权

5.1 sudoers

  • Linux是多用户多任务的操作系统, 共享该系统的用户往往不只一个。出于安全性考虑, 有必要通过useradd创建一些非root用户, 只让它们拥有不完全的权限; 如有必要,再来提升权限执行。
  • sudo就是来解决这个需求的: 这些非root用户不需要知道root的密码,就可以提权到root,执行一些root才能执行的命令。

5.2 sudo命令执行过程

  1. 当用户执行sudo时,系统会主动寻找 /etc/sudoers文件,判断该用户是否有执行sudo的权限
  2. 确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
  3. 若密码输入成功,则开始执行sudo后续的命令

5.3 赋予用户sudo操作的权限

  • 通过useradd添加的用户,并不具备sudo权限。在ubuntu/centos等系统下, 需要将用户加入admin组或者wheel组或者sudo组。
    • 以root用户身份执行如下命令, 将用户加入wheel/admin/sudo组。如果提示wheel组不存在, 则还需要先创建该组
  • 配置文件
    • sudo的权限控制可以在 /etc/sudoers 文件中查看到。一般来说,通过 cat /etc/sudoers 指令来查看该文件, 会看到如下几行代码。
# 去除空行和注释
[root@server1 test]# egrep -v '^$|^#' /etc/sudoers
.....
root	ALL=(ALL) 	ALL
%wheel	ALL=(ALL)	ALL

在这里插入图片描述

  • 对 /etc/sudoers 文件进行编辑的代码公式可以概括为

    • 授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
    • 字段1 字段2 =[(字段3)] [字段4] 字段5
  • 解释说明

    • 凡是[ ]中的内容, 都能省略;
    • 命令和命令之间用,号分隔,字段3、字段4,是可以省略的。
    • 字段1不以%号开头的表示"将要授权的用户",以%号开头的表示"将要授权的组"。
    • 字段2表示允许登录的主机,ALL表示所有;如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令
      • 比如: jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown 表示: 普通用户jack在主机(或主机组)mycomputer上, 可以通过sudo执行reboot和shutdown两个命令(命令路径通过之前讲的方式查询)
    • 字段3如果省略, 相当于(root:root),表示可以通过sudo提权到root,如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)
    • 字段4的可能取值是NOPASSWD:。请注意NOPASSWD后面带有冒号:。表示执行sudo时可以不需要输入密码。
    • 字段5是使用逗号分开一系列命令,这些命令就是授权给用户的操作;ALL表示允许所有操作。命令都是使用绝对路径, 这是为了避免目录下有同名命令被执行,从而造成安全隐患。
      • 如果你将授权写成如下安全性欠妥的格式: lucy ALL=(ALL) chown,chmod,useradd 那么用户
        就有可能创建一个他自己的程序, 也命名为 useradd , 然后放在它的本地路径中, 如此一来他就能够使用root来执行这个名为useradd的程序(删库警告)。这是相当危险的!
  • 示例

[root@server1 ~]# id alice
uid=1004(alice) gid=1006(alice)=1006(alice)
[root@server1 ~]# su - alice
#普通用户alice尝试创建用户wanger,被拒绝
[alice@server1 ~]$ useradd wanger
useradd: Permission denied.
useradd:无法锁定 /etc/passwd,请稍后再试。

#修改sudo提权配置文件
[root@server1 ~]# vim /etc/sudoers    #visudo命令也行
将107行的%whee ALL=(ALL)   NOPASSWD:ALL前面的#和%删除
:wq!保存强制退出

[root@server1 ~]# gpasswd -a alice wheel  # 将alice添加到wheel组,usermod也行
正在将用户“alice”加入到“wheel”组中
[root@server1 ~]# id alice
uid=1004(alice) gid=1006(alice)=1006(alice),10(wheel)

#重新登录alice用户,sudo提权
[root@server1 ~]# su - alice
#sudo提权并创建用户,成功
[alice@server1 ~]$ sudo useradd wanger
[sudo] alice 的密码:
[alice@server1 ~]$ ls /home
alice   wanger
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值