目录
Linux系统中用户对文件的访问权限有三种类型,分别是:
-
可读(read):允许查看文件内容、显示目录列表
-
可写(write):允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
-
可执行(execute):允许运行程序、切换目录
Linux系统用户的类型也有三种,如下:
-
文件拥有者(owner):拥有该文件或目录的用户帐号 ——当前用户
-
属组(group):拥有该文件或目录的组帐号 ——小组成员
-
其他人(others):除了属主和属组的其他人 ——其他人
读、写、执行权限对文件和文件夹的区别
新建文件时,用户默认有读、写、执行权限,而小组成员和其他人只有读和执行权限
新建文件夹时,用户默认有读、写权限,而小组成员和其他人只有读权限

权限管理相关命令(chmod、chown、chgrp等)
chmod
chmod命令用来修改文件或目录的权限,chmod的使用有两种方式,使用字母方法或数字方法
字母方法
格式:chmod [ugoa] [+-=] [rwx] 文件或目录
u、g、o、a分别表示属主、属组、其他用户、所有用户
+、-、=分别表示增加、撤销、设置权限
rwx是指对应的权限字符
-R # 递归修改指定目录下所有文件、子目录的权限
数字方法
格式:chmod 数字组合 文件或目录
读 r -----> 4
写 w -----> 2
执行 x -----> 1
# 特殊情况
chmod 777 文件 ----修改文件的权限为777,表示任何人都可以读、写、执行这个文件
chown
chown命令用来修改文件的属主和属组,并且只有root用户可以使用该命令
格式:chown [选项] [用户名称:组名称] [文件或目录]
-R # 递归修改指定目录下所有文件、子目录的权限
chgrp
chgrp命令用来修改文件的所属组
umask
umask命令用来控制新建文件或文件夹的默认权限
不推荐修改系统默认umask,系统默认umask值已经在/etc/profile这个文件内定义好了
(/etc/profile ---- 初始化用户的环境变量)
umask # 查看umask值
[root@huyuxuan lianxi]# umask
0022umask -S # 查看umask的符号值
[root@huyuxuan lianxi]# umask -S
u=rwx,g=rx,o=rx
常用的umask及对应的文件与目录权限如下图所示:

sudo
sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务
sudo命令产生的背景
由于Linux是多人多任务系统,而某些操作需要root用户权限,但不可能每个用户都有权力知道root用户密码,因此root用户便于管理,即相当于权力下放,允许某些用户能够拥有root用户权限,因此产生sudo命令
sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令
sudo命令的功能
- 能够限制用户在某台主机上运行某些命令
- 提供丰富日志,详细记录了用户行为,即记录用户执行的每一条指令
- 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数
- 使用时间戳文件限制用户的使用时间,默认5分钟,超时需要重新登录
# 格式
sudo [参数] 命令名称
sudo命令配置
某用户能够执行sudo命令需要事先root用户授权,即在 /etc/sudoers 文件中配置
详细步骤
1. 切换root用户
2. 添加文件的写权限
chmod u+w /etc/sudoers
3. 编辑/etc/sudoers
# 给用户授权
找到root ALL=(ALL) ALL,在下面添加xxx ALL=(ALL) ALL,其中xxx为用户名,保存退出
# 给组授权
找到%wheel ALL=(ALL) ALL,在下面添加%xxx ALL=(ALL) ALL,其中xxx为组名,保存退出
4.撤销文件的写权限
chmod u-w /etc/sudoers
使用sudo命令授权后会在日志文件 /var/log/secure 中记录用户行为
可以将多个命令以分组的形式起别名,然后给用户授权该组
Cmnd_Alias SUDA = /usr/sbin/useradd, /usr/sbin/userdel
csc ALL = SUDA
visudo
如果担心直接修改配置文件会出现问题,那么可以使用sudo命令提供的visudo命令来配置用户权限
注意:只有root管理员才可以使用visudo命令编辑sudo服务的配置文件
# 使用visudo命令配置sudo命令的配置文件时,其操作方法和vim编辑器一致
按照以下的格式将第99行(大约)填写上指定的信息
# 格式
谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表
# 举例
[root@localhost ~]# visudo
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
101 suda ALL=(ALL) /usr/bin/cat
[root@localhost ~]# su - suda
上一次登录:一 1月 17 16:02:51 CST 2022pts/0 上
[suda@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
[suda@localhost ~]$ sudo cat /etc/shadow
root:$6$NXltCHvskGI6ZUK1$kU00zqDfxjAyBp8gUZSstzBkaHPrrVYuBa66YSpQNWQag1GgBDSnOIG5eSbySyP/xCiIT0Xz9GeTsUoYyX8yQ1::0:99999:7:::
bin:*:18358:0:99999:7:::
daemon:*:18358:0:99999:7:::
adm:*:18358:0:99999:7:::
......
sudo和SUID的区别
sudo是给某个用户或者组授予执行某些命令的权限,权限在人身上
SUID是给命令赋予root用户的权限,权限在命令上
SUID和SGID
SUID(Set User ID),SUID意味着如果A用户对属于他自己的shell脚本文件设置了这种权限,那么其他用户在执行这个脚本的时候就拥有了A用户的权限;所以,如果root用户对某一脚本设置了这一权限的话则其他用户执行该脚本的时候则拥有了root用户权限
SUID的作用就是这样,让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源
不要给所有的命令都设置suid权限位,会导致不安全
# 格式
chmod u+s 文件 # 设置SUID位
chmod u-s 文件 # 去掉SUID设置
SGID(Set Group ID)
# 格式
chmod g+s 文件 # 设置SGID位
chmod g-s 文件 # 去掉SGID设置
如果一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上
# 举例
-rwsr-xr-x 表示SUID和所有者权限中可执行位被设置
-rwSr--r-- 表示SUID被设置,但所有者权限中可执行位没有被设置
-rwxr-sr-x 表示SGID和同组用户权限中可执行位被设置
-rw-r-Sr-- 表示SGID被设置,但同组用户权限中可执行位没有被设置
Sticky粘滞位权限(也叫做SBIT)
Sticky粘滞位的作用:用户只能删除自己的文件,不能删除该目录中其他用户的文件
粘滞位权限是为公共目录设置的,当目录被设置粘滞位权限后,文件的其他人权限部分的x执行权限就会被替换成t或T,原本有x执行权限则会替换成t,原本没有x执行权限的则会被替换成T
# 格式
chmod o+t 目录
chmod o-t 目录
# 举例
/tmp、/var/tmp是Linux系统中默认有粘滞位权限的文件夹
[root@huyuxuan ~]# ll -d /tmp /var/tmp
drwxrwxrwt. 6 root root 98 8月 14 00:43 /tmp
drwxrwxrwt. 3 root root 30 8月 10 09:40 /var/tmp
使用数字方法设置SUID、SGID、Sticky
# 格式
chmod mnnn 可执行文件
m=4 ---- > SUID
m=2 ---- > SGID
m=1 ---- > Sticky
m=0 ---- > 取消已经有的上述设置
ACL访问控制列表
我们所了解的一般权限、特殊权限、隐藏权限其实有一个共性——权限是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了
ACL(Access Control List)访问控制列表,一个文件/目录的访问控制列表,可以针对任意指定的用户/组使用权限字符分配rwx权限
我们使用 setfacl 命令来管理文件的ACL规则
# 格式
setfacl [参数] 文件名称
(set file access control lists)
# 参数
-m # 新增或修改ACL中的规则
-b # 删除所有ACL规则
-x # 删除指定的ACL规则
# 举例
# 对特定用户赋予权限
[root@huyuxuan lianxi]# setfacl -m u:csc:rwx suda.txt
# 对特定组赋予权限
[root@huyuxuan lianxi]# setfacl -m g:csc:rwx suda.txt
我们使用 getfacl 命令来查看文件上设置的ACL信息
# 格式
getfacl 文件名称
(get file access control lists)
# 举例
[root@huyuxuan lianxi]# getfacl suda.txt
# file: suda.txt
# owner: root
# group: root
user::rwx
user:csc:rwx
group::r--
group:csc:rwx
mask::rwx
other::r--
Default ACL是一种预设型ACL,只能对目录使用
# 格式
setfacl -m d:类型:特定的用户或组:权限 目录
设置了预设型ACL的目录,其下的所有文件或者子目录就都具有了主目录的ACL权限,并且子目录也同样有预设的ACL权限
文件的隐藏属性
查看和管理文件的隐藏属性一般有如下两个命令:
- chattr:用来修改文件或目录的隐藏属性
- lsattr:用来显示文件的属性
chattr # 修改文件或目录的隐藏属性
change attributes
只有root用户可以使用
# 格式
chattr [+-=] [属性] 文件或目录名
+表示给文件或目录添加属性
- 表示移除文件或目录拥有的某些属性
= 表示给文件或目录设定一些属性
i
如果对文件设置 i 属性,那么不允许对文件进行任何操作的修改(不能进行删除、改名,也不能添加和修改数据)
如果对目录设置 i 属性,那么只能修改该目录子文件中的内容,但不允许新建和删除文件
a
如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据
如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件
lsattr # 显示文件的属性
# 参数
-a 显示所有文件和目录的属性(包括隐藏文件)
-d 显示目录自身的属性,而非其内容的属性
举例
# 用chattr命令防止系统中某个关键文件被修改
chattr +i /etc/resolv.conf
# 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件
chattr +a /var/log/messages
本文详细介绍了Linux系统中的用户权限管理,包括chmod、chown、chgrp等命令的使用,sudo命令的原理与配置,SUID、SGID权限的概念及其区别,Sticky粘滞位权限的作用,以及ACL访问控制列表的实现,旨在帮助读者全面掌握Linux权限管理。
&spm=1001.2101.3001.5002&articleId=123609387&d=1&t=3&u=f06cdb7b8a724fbeae6d4f7331f42f65)
745

被折叠的 条评论
为什么被折叠?



