5. 权限管理

本文详细介绍了Linux系统中的文件权限管理,包括基本权限rwx的含义及其针对文件和目录的不同意义,用户类别(u/g/o)的权限设置,以及如何使用chown、chgrp和chmod命令进行权限修改。此外,还探讨了umask对默认权限的影响,以及隐藏权限如SUID、SGID和SBIT的使用。最后,提到了文件系统访问控制列表(FACL)的概念,用于更细粒度的访问控制。

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

一、基本权限
r, w, x:可读、可写、可执行。
不同文件类型的有意义:针对普通文本文件和目录,相同的写法,但代表
的意义不同。
文件:
r:可读,可以使用类似cat等命令查看文件内容;
w:可写,可以编辑或删除此文件;
x: 可执行,executable,可以命令提示符下当作命令提交给内核运行;
 r单独存在,可查看文件内容
 w单独存在,看不到文件内容,但是可以强制修改文件内容,会覆
盖原文件内容,单独存在,意义不大
 x单独存在,毫无意义
目录:
r: 可以对此目录执行ls以列出内部的所有文件;
w: 可以在此目录创建、修改、删除文件;
x: 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信
息;
 只有r权限时,可以读(有报错),不能写,也不能进入目录
 只有w权限时,毫无意义
 只有x权限时,只能进入,不能读,不能写
 目录的rw权限:可以查看内容,不可以进入目录,不能删除目录或
它里面的文件
 目录的rx权限:可以查看内容,可以进入目录,不可以修改目录的
内容
 目录的wx权限:不可以查看目录内容,可以进入目录,可以删除
目录下的文件,前提是你需要知道目录下有什么文件
//查看文件的权限。可以使用 ls -l ,如果是目录需要加上 -d选择,否则值
限制此目录下有什么文件。
权限针对的三类用户:
u: user 属主
g: group 属组
o: other 其它用户
// ls -l 命令显示的意义。
第一栏代表这个文件的类型与权限
第一个字符代表这个文件是“目录、文件或链接文件等等”:
当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
[root@base tmp]# ls
test test.txt
[root@base tmp]# ll test.txt
-rw-r--r-- 1 root root 0 Apr 20 09:01 test.txt
[root@base tmp]# ll -d test
drwxr-xr-x 2 root root 6 Apr 20 09:01 test
[root@base tmp]# ls -l test.txt
-rw-r--r-- 1 root root 0 Apr 20 09:01 test.txt
当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
若是[ l ]则表示为链接文件(link file);
若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设
备);
若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次
性读取设备)
接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。其中,
[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行
(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,
就会出现减号[ - ]而已。
第一组为“文件拥有者可具备的权限”;
第二组为“加入此群组之帐号的权限”;
第三组为“非本人且没有加入本群组之其他帐号的权限
举例:
若有一个文件的类型与权限数据为“-rwxr-xr--”,请说明其意义为何?
所有者:可读、可写、可执行(rwx)
所属组:本例中为可读可执行(rx)
其他人:只读
第二栏表示有多少文件名链接到此节点
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们
使用的目录树却是使用文件名来记录, 因此每个文件名就会链接到一个inode啰!这个属性记录的,就是有多少不同的文件名链接到相同的一个inode号码
第三栏表示这个文件(或目录)的“拥有者账号”
第四栏表示这个文件的所属群组
第五栏表示这个文件的容量大小,默认单位是Bytes(字节)
1KB(Kilobyte 千字节)=1024B,
1MB (Megabyte 兆字节 简称“兆”)=1024KB,
1GB (Gigabyte 吉字节 又称“千兆”)=1024MB,
1TB(Trillionbyte 万亿字节 太字节)=1024GB。 PB EB
注意:Byte是“字节数”,bit是“位数”,在计算机中每八位为一字节,也
就是1 Byte=8 bit,是1:8的对应关系。道因此在书写单位时一定要注
意B字母的大小写和含义。
第六栏表示这个文件的创建日期或者是最近修改日期。
如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份
而已。
第七栏为这个文件的文件名
练习:
1、创建一个用户userA,然后切换至该用户,在/tmp目录下,创建一个
testA.txt文件,然后查看改文件的详细信息。再创建一个userB用户,判断
userB用户对于testA.txt文件拥有什么权限?
2、用userB用户,在/tmp目录下,创建一个testB的目录,请问userB用户
是否可以在testB目录下创建文件?那么testA用户是否也可以?
修改文件的属性和权限
chgrp :改变文件所属群组
chown :改变文件拥有者
chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
举例:
1、改变文件的拥有者。将test.txt文件的拥有者改为test用户。
2、同样将文件的小组改为test.
3、同样也可以用chown同时改变拥有者和所属组。
修改文件权限,chmod 命令的使用。
举例:
[root@base tmp]# ll test.txt
-rw-r--r-- 1 root root 0 Apr 20 09:01 test.txt
[root@base tmp]# id test
uid=1001(test) gid=1001(test) groups=1001(test)
[root@base tmp]# chown test test.txt
[root@base tmp]# ll test.txt
-rw-r--r-- 1 test root 0 Apr 20 09:01 test.txt
[root@base tmp]# ll test.txt
-rw-r--r-- 1 test test 0 Apr 20 09:01 test.txt
[root@base tmp]# useradd t2
[root@base tmp]# chown t2.t2 test.txt
[root@base tmp]# ll test.txt
-rw-r--r-- 1 t2 t2 0 Apr 20 09:01 test.txt
//或者换一种写法效果一样。
[root@base tmp]# useradd t3
[root@base tmp]# chown t3:t3 test.txt
[root@base tmp]# ll test.txt
-rw-r--r-- 1 t3 t3 0 Apr 20 09:01 test.txt
[root@base tmp]# ll test.txt
-rw-r--r-- 1 t3 t3 0 Apr 20 09:01 test.txt
[root@base tmp]# chmod u+x test.txt
[root@base tmp]# chmod g-r test.txt
[root@base tmp]# chmod o+wx test.txt
[root@base tmp]# ll test.txt
-rwx---rwx 1 t3 t3 0 Apr 20 09:01 test.txt
更改权限方面也可以使用数字来代表权限
各权限的分数对照表如下
r:4 w:2 x:1
举例:
[root@base tmp]# ll test.txt
-rw-r--r-- 1 t3 t3 0 Apr 20 09:01 test.txt
[root@base tmp]# stat -c '%n %a' test.txt
test.txt 707
[root@base tmp]# chmod 644 test.txt
[root@base tmp]# ll test.txt
-rw-r--r-- 1 t3 t3 0 Apr 20 09:01 test.txt
练习:
1、在/tmp目录下,创建一个test.txt文件,查看其默认权限情况。
2、修改上述文件的拥有者和所属小组为 userA用户。
3、请问userB用户,是否能在此文件中追加内容,不过能,怎么修改才能
追加?
4、使用chmod命令加数字的方式,修改此文件权限为: -rwxr---w二、隐藏权限
默认权限与隐藏权限
除了基本r, w, x权限外,在Linux传统的Ext2/Ext3/Ext4文件系统下,我们
还可以设置其他的系统隐藏属性,这部份可使用chattr 来设置,而以
lsattr 来查看,最重要的属性就是可以设置其不可修改的特性!让连文件
的拥有者都不能进行修改!这个属性可是相当重要的,尤其是在安全机制
上面(security)!比较可惜的是,在 CentOS 7.x 当中利用 xfs 作为默认
文件系统,但是 xfs 就没有支持所有的 chattr 的参数了!仅有部份参数还
有支持而已!
默认权限:umask
创建一个新的文件或目录时,它的默认权限会是什么?那就与 umask 有关
了!umask 是什么呢? umask 就是指定“目前使用者在创建文件或目录时
候的权限默认值”,
umask:遮罩码,反向掩码 影响用户新创建的文件和目录的默认权限
[root@base tmp]# umask
0022
[root@base tmp]# umask -S
u=rwx,g=rx,o=rx
666-umask
777-umask
在默认权限的属性上,目录与文件是不一样的。我们知道 x 权限对于目
录是非常重要的!但是一般文件的创建则不应该有执行的权限,因为一
般文件通常是用在于数据的记录嘛!当然不需要执行的权限了。因此,
默认的情况如下:
若使用者创建为“文件”则默认“没有可执行( x )权限”,亦即只有 rw
这两个项目,也就是最大为666 分,默认权限如下:
-rw-rw-rw若使用者创建为“目录”,则由于
x 与是否可以进入此目录有关,因此默
认为所有权限均开放,亦即为777 分,默认权限如下:
drwxrwxrw
因为 umask 为 022 ,所以 user 并没有被拿掉任何权限,不过 group 与
others 的权限被拿掉了 2 (也就是 w 这个权限),那么当使用者:
创建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r-- ---
>644
创建目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x --
--->755
当然这里也可以修改目录的隐藏权限值,不过这块大家知道了解下即可,
不必过身研究。
[root@base test]# umask 002
[root@base test]# touch t1.txt
[root@base test]# mkdir t2
[root@base test]# ll
total 0
-rw-rw-r-- 1 root root 0 Apr 20 11:00 t1.txt
drwxrwxr-x 2 root root 6 Apr 20 11:01 t2
隐藏权限
//查看文件的隐藏权限,lsattr命令。
//chattr更改文件的隐藏权限。
a:让文件或目录仅供附加用途;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。
最重要的当属 +i 与 +a 这个属性了。+i 可以让一个文件无法被更动,对于
需要强烈的系统安全的人来说,真是相当的重要的!里头还有相当多的属
性是需要 root 才能设置。
举例:
1、-i 选择的运用
2、-a选项的运用。文件内容只能追加,不能覆盖。
[root@base tmp]# lsattr test.txt
---------------- test.txt
[root@base tmp]# pwd
/tmp
[root@base tmp]# touch t1.txt
[root@base tmp]# chattr +i t1.txt
[root@base tmp]# lsattr t1.txt
----i----------- t1.txt
[root@base tmp]# rm -f t1.txt
rm: cannot remove ‘t1.txt’: Operation not permitted //即使
是root也没有权限删除和移动
[root@base tmp]# mkdir testdir
[root@base tmp]# mv t1.txt testdir/
mv: cannot move ‘t1.txt’ to ‘testdir/t1.txt’: Operation
not permitted
三、特殊权限和Facl
SUID:
运行某程序时,相应进程的属主是程序文件自身的属主,而不是用户本身
了,只对二进制程序有效,执行者对于程序需要有x权限
例子:passwd命令 需要在/etc/shadow中写入密码
ls -l /bin/cat
ls -l /etc/shadow
chmod u+s file (如果本身具有x,为s,否则为S)
总结: 其他人,运行SUID的文件时,就临时拥有了SUID文件所属者的权
限。
[root@base tmp]# cat t1.txt
123
[root@base tmp]# chattr +a t1.txt
[root@base tmp]# lsattr t1.txt
-----a---------- t1.txt
[root@base tmp]# echo 456 > t1.txt
-bash: t1.txt: Operation not permitted
[root@base tmp]# echo 456 >> t1.txt
SGID:
对于文件:运行某程序时,相应进程的属组是程序文件自身的属组,而不
是用户本身的基本组
对于目录:
 用户对此目录有rx权限可以进入目录
 用户进入此目录后,有效用户组会变成该目录的用户组
 若用户在此目录有w权限,则用户创建的文件用户组与该目录用户组相

Sticky (BIT):
 只针对目录有效,当用户对目录拥有wx权限时,用户在该目录创建的文件
或目录,只有自己与root才可以删除。
在一个公共目录,每个人都可以创建文件,删除自己的文件,但是不能删
除别人的文件(冒险位,粘贴位)
举例:
特殊权限的数字表达方式:
SUID是4 SGID是2 SBIT是1 同样如果拥有多个特殊权限,数字相加即
可。
//可以使用chmod修改文件的特殊权限。
第一个7代表的就是这三个特殊命令,后面的755是普通权限。
[root@base tmp]# ll /tmp/ -d
drwxrwxrwt. 8 root root 122 Apr 20 12:09 /tmp/
]# chmod 7755 filename
FACL
文件系统访问控制列表
FACL:filesystem access control list
利用文件的扩展属性,保存了额外的访问控制权限
getfacl 查看、setfacl 设置
语法:setfacl [-bkRd] [-m|-x acl 参数] 目标文件名
选项与参数:
-m:设置后续的acl参数,不可与-x一起使用
-x: 删除后续的acl参数,不可与-m一起使用
-b:删除所有的acl参数
-k:删除默认的acl参数
-R:递归设置acl参数
-d:设置默认acl参数,只对目录有效
举例:允许用户userA 对 “/test/abc.txt” 文件有读和写的权限;用户userB
对 “/test/abc” 文件没有任何权限,其他人只有读的权限
[root@base tmp]# mkdir /test
[root@base tmp]# touch /test/abc.txt
[root@base tmp]# getfacl /test/abc.txt -p
# file: /test/abc.txt
# owner: root
# group: root
user::rwgroup::r--
other::r--
[root@base tmp]# useradd userA
[root@base tmp]# useradd userB
[root@base ~]# echo 123.com | passwd --stdin userA
//-m设定,可以设定到用户或者是组上,-x 取消一个ACL权限 -b 清除所
有的 ACL 权限,这里不再演示。
Changing password for user userA.
passwd: all authentication tokens updated successfully.
[root@base ~]# echo 123.com | passwd --stdin userB
Changing password for user userB.
passwd: all authentication tokens updated successfully.
[root@base tmp]# setfacl -m u:userA:rw- /test/abc.txt
//userA用户可读可写
[root@base tmp]# setfacl -m u:userB:--- /test/abc.txt
//userB用户没有任何权限
[root@base tmp]# getfacl /test/abc.txt -p
# file: /test/abc.txt
# owner: root
# group: root
user::rwuser:userA:rwuser:userB:---
group::r--
mask::rwother::r--
//验证userA有可读可写,userB没有任何权限。
[root@base tmp]# su - userA
[userA@base ~]$ echo "Test Page" > /test/abc.txt
[userA@base ~]$ cat /test/abc.txt
Test Page
[userA@base ~]$ su - userB
Password:
Last failed login: Mon Apr 20 12:28:09 EDT 2020 on pts/0
There were 2 failed login attempts since the last
successful login.
[userB@base ~]$ cat /test/abc.txt
cat: /test/abc.txt: Permission denied
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值