文件权限管理
一、文件的基本权限
1、权限的作用
通过对文件设定权限可以达到以下三种访问限制权限:
只允许用户自己访问;
允许一个预先指定的用户组中的用户访问;
允许系统中的任何用户访问。
2、查看文件的权限
[root@fishman-160 ~]# ll /dev | grep -E '^d'
drwxr-xr-x 2 root root 180 7月 18 10:33 block
drwxr-xr-x 2 root root 100 7月 18 10:33 bsg
drwxr-xr-x 3 root root 60 7月 18 10:33 bus
drwxr-xr-x 2 root root 3100 7月 18 10:33 char
drwxr-xr-x 6 root root 120 7月 18 10:33 cpu
drwxr-xr-x 7 root root 140 7月 18 10:33 disk
drwxr-xr-x 3 root root 100 7月 18 10:33 dri
drwxr-xr-x 3 root root 0 7月 18 10:33 hugepages
drwxr-xr-x 4 root root 280 7月 18 10:33 input
drwxr-xr-x 2 root root 60 7月 18 10:33 mapper
drwxrwxrwt 2 root root 40 7月 18 10:33 mqueue
drwxr-xr-x 2 root root 60 7月 18 10:33 net
drwxr-xr-x 2 root root 0 7月 18 10:33 pts
drwxr-xr-x 2 root root 60 7月 18 10:33 raw
drwxrwxrwt 2 root root 40 7月 18 10:33 shm
drwxr-xr-x 3 root root 200 7月 18 10:33 snd
drwxr-xr-x 2 root root 60 7月 18 10:33 vfio
- | rwx | r-x | r-x | user1 | user1 | 262 | time | FILENAME |
---|---|---|---|---|---|---|---|---|
文件类型 | 拥有者的权限 | 所属组的权限 | 其他人的权限 | 拥有者 | 属组 | 文件大小 | 最后修改时间 | 对象 |
其中:文件类型,可以为p、d、l、s、c、b和 –
p表示命名管道文件
d表示目录文件
l表示符号连接文件
-表示普通文件
s表示socket套接口文件,比如我们启用mysql时,会产生一个mysql.sock文件
c表示字符设备文件
b表示块设备文件
3、权限说明
-
对于文件来说:
r:读
w:写
x:执行
-
对目录来说:
r:读(看到目录里面有什么) ls
w:在目录里面建文件,删除,移动 touch mkdir rm mv cp
x:进入cd*
-
对于文件的所有者或者属主,root可以将这些权限改变成你想要的权限
4、文件的所有者
-
UGO:所有者--用户组--其它用户
-
所有者: 就是创建文件的用户,这个用户拥有对它所创建的文件的一切权限,所有者可以允许其所在的用户组可以访问所有者的文件。
-
用户组: 用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限。这就是用户组。
-
其它用户:系统内的其他所有者用户就是other用户类一个用户只能有一个主组,可以有多个附加组;一个组是可以有多个用户的
5、举例
常见几种文件权限组成
-
rwx --- ---:文件所有者对文件具有读取、写入和执行的权限。
-
rwx r-- r--: 文件所有者具有读、写与执行的权限,用户组里用户及其他用户则具有读取的权限
-
rw- rw- r-x:文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
-
drwx--x—x: 目录所有者具有读写与进入目录的权限,其他用户只能进入该目录,却无法读取任何数据。
-
drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。
例1:每个用户都拥有自己专属目录,一般是放在/home下
[root@fishman-160 ~]# ls /home
kc test1 test2 test3 Tom
[root@fishman-160 ~]# ll -d /home/kc
drwx------. 4 kc kc 129 7月 17 14:16 /home/kc
这些目录的权限默认是rwx,意思是说只有目录所有者可以访问。其它人都不行
[root@fishman-160 ~]# su - kc #切换到kc
[kc@fishman-160 ~]$ ls
[kc@fishman-160 ~]$ ll -a
总用量 24
drwx------. 4 kc kc 129 7月 17 14:16 .
drwxr-xr-x. 7 root root 66 7月 17 11:35 ..
-rw------- 1 kc kc 210 7月 17 18:08 .bash_history
-rw-r--r--. 1 kc kc 18 4月 8 2022 .bash_logout
-rw-r--r--. 1 kc kc 141 4月 8 2022 .bash_profile
-rw-r--r--. 1 kc kc 377 7月 7 14:25 .bashrc
drwx------ 2 kc kc 6 7月 17 14:16 .cache
drwxr-xr-x. 4 kc kc 39 7月 6 13:26 .mozilla
-rw-------. 1 kc kc 6671 7月 7 14:43 .viminfo
[kc@fishman-160 ~]$ cd /home/Tom #访问Tom的家目录,提示没有权限
-bash: cd: /home/Tom: 权限不够\
你以什么用户身份登录系统,那么你创建文件或目录,它的所有者会自动继承
kc@fishman-160 home]$ cd kc
[kc@fishman-160 ~]$ ls
[kc@fishman-160 ~]$ touch kc.txt
[kc@fishman-160 ~]$ ll
总用量 0
-rw-rw-r-- 1 kc kc 0 7月 18 10:45 kc.txt #own继承了kc
6、更改文件的属主和属组
chown:可以用来改变文件(或目录)的属主(组)
chgrp:可以用来改变文件(或目录)的默认属组
chown user:group filename #修改文件所属者和所属组
chown user filename #修改文件所属者
chown :group filename #修改文件属组
chgrp group filename #修改文件属组
7、修改权限
字符集设定
chmod
对谁操作:
【u】----> 用户user,表示文件或目录的所有者
【g】---->用户组group,表示文件或目录所属的用户组
【o】---->其它用户others
【a】---->所有用户all
操作符:
【+】-----> 添加权限
【-】-----> 取消权限
【=】 -------> 直接给定一个权限
权限:r w x
例如下在的组合
u-w | user | 拥有者 |
---|---|---|
g+x | group | 组 |
o=r | other | 其他人 |
a+x | all | 所有人 |
[root@fishman-160 ~]# ll 1.txt
-rwxrwxr-x 1 kc kc 0 7月 17 14:14 1.txt
[root@fishman-160 ~]# chmod u-w 1.txt #user去掉w权限
[root@fishman-160 ~]# ll 1.txt
-r-xrwxr-x 1 kc kc 0 7月 17 14:14 1.txt
[root@fishman-160 ~]# chmod g-w 1.txt #group 去掉w权限
[root@fishman-160 ~]# ll 1.txt
-r-xr-xr-x 1 kc kc 0 7月 17 14:14 1.txt
[root@fishman-160 ~]# chmod o+w 1.txt #other 增加w权限
[root@fishman-160 ~]# ll 1.txt
-r-xr-xrwx 1 kc kc 0 7月 17 14:14 1.txt
[root@fishman-160 ~]# chmod a-x 1.txt #all去掉x权限
[root@fishman-160 ~]# ll 1.txt
-r--r--rw- 1 kc kc 0 7月 17 14:14 1.txt
[root@fishman-160 ~]# chmod u=wx 1.txt #u给与wx权限,会去掉原有的r权限!!!
[root@fishman-160 ~]# ll 1.txt
--wxr--rw- 1 kc kc 0 7月 17 14:14 1.txt
数字设定
权限 | 二进制值 | 八进制值 | 描述 |
---|---|---|---|
--- | 000 | 0 | 没有任何权限 |
--x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 有写入和执行权限 |
r-- | 100 | 4 | 只有读取权限 |
r-x | 101 | 5 | 有读取和执行权限 |
rw- | 110 | 6 | 有读取和写入权限 |
rwx | 111 | 7 | 有全部权限 |
举例:建立一个test目录,要求如下
1、用户wang和用户san对这个目录有读写执行权限
2、其它用户对这个目录没有任何权限
[root@fishman-160 ~]# ls /home
kc test1 test2 test3 Tom
[root@fishman-160 ~]# useradd san #添加用户san
[root@fishman-160 ~]# useradd wang #添加用户wang
[root@fishman-160 ~]# ls /home
kc san test1 test2 test3 Tom wang
[root@fishman-160 ~]# id san #查看sam的组
uid=1103(san) gid=1103(san) 组=1103(san)
[root@fishman-160 ~]# id wang #查看wang的组
uid=1104(wang) gid=1104(wang) 组=1104(wang)
[root@fishman-160 ~]# mkdir 770 /test #创建根目录文件夹test
[root@fishman-160 ~]# ll -d /test #查看test权限和所属用户和组
drwxr-xr-x 2 root root 6 7月 18 11:16 /test
[root@fishman-160 ~]# chmod 770 /test #修改test的权限
[root@fishman-160 ~]# ll -d /test
drwxrwx--- 2 root root 6 7月 18 11:16 /test
[root@fishman-160 ~]# usermod -G 1103 wang #给用户wang 添加附加组,加入到san的附加组
[root@fishman-160 ~]# id wang
uid=1104(wang) gid=1104(wang) 组=1104(wang),1103(san)
[root@fishman-160 ~]# chown :san /test #把test目录的所属组换成san
[root@fishman-160 ~]# ll -d /test
drwxrwx--- 2 root san 6 7月 18 11:16 /test
[root@fishman-160 ~]# su - san #切换到san
[san@fishman-160 ~]$ cp /etc/passwd /test
[san@fishman-160 ~]$ head -3 /test/passwd #复制文件成功并能访问
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[san@fishman-160 ~]$ exit
注销
[root@fishman-160 ~]# su - wang #切换到wang
[wang@fishman-160 ~]$ cp /etc/passwd /test/passwd1 #复制文件成功并能访问
[wang@fishman-160 ~]$ head -3 /test/passwd1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[wang@fishman-160 ~]$ exit
注销
[root@fishman-160 ~]# ll -d /test #查看test目录权限,oter用户无法访问
drwxrwx--- 2 root san 35 7月 18 11:23 /test
[root@fishman-160 ~]# su - kc #切换到kc,尝试访问,提示权限不够
[kc@fishman-160 ~]$ cd /test
-bash: cd: /test: 权限不够
二、特殊权限
SUID(set uid设置用户ID):限定:只能设置在二进制可执行程序上面。对目录设置无效!
功能:程序运行时的权限从执行者变更成程序所有者
SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的所属组
Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位
SUID | SGID | Stickybit |
---|---|---|
u=4、u+s | g=2、g+s | o=1、o+t |
-
如果一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上;
-
linux系统规定,如果原本该位上有x,则这些属性显示为小写字母(s有效),否则显示大写字母(S无效)
-
由于SUID和SGID是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的SUID和SGID位是没有多大意义的
[root@fishman-160 ~]# chmod u+s /bin/less #g给less添加SUID
[root@fishman-160 ~]# su - kc
[kc@fishman-160 ~]$ less /etc/passwd
[root@fishman-160 /]# chmod g+s nginx
[root@fishman-160 /]# ll
总用量 30
-rw-r--r-- 1 root root 0 7月 17 13:40 autorelabel
lrwxrwxrwx. 1 root root 7 6月 22 2021 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 7月 6 13:37 boot
drwxr-xr-x 19 root root 3260 7月 18 10:33 dev
drwxr-xr-x. 149 root root 8192 7月 18 16:16 etc
drwxr-xr-x. 9 root root 89 7月 18 11:15 home
lrwxrwxrwx. 1 root root 7 6月 22 2021 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 6月 22 2021 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 6月 22 2021 media
dr-xr-xr-x 5 root root 2048 7月 4 12:46 mnt
drwxr-sr-x 2 root nginx 6 7月 18 16:14 nginx #所属组是nginx,SGID权限
drwxr-xr-x. 2 root root 6 7月 13 16:59 opt
dr-xr-xr-x 247 root root 0 7月 18 10:33 proc
dr-xr-x---. 19 root root 4096 7月 18 15:28 root
drwxr-xr-x 46 root root 1300 7月 18 10:35 run
lrwxrwxrwx. 1 root root 8 6月 22 2021 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 6月 22 2021 srv
dr-xr-xr-x 13 root root 0 7月 18 10:33 sys
drwxrwx--- 2 root san 35 7月 18 11:23 test
drwxrwxrwt. 30 root root 4096 7月 18 16:17 tmp
drwxr-xr-x. 12 root root 144 7月 6 13:27 usr
drwxr-xr-x. 21 root root 4096 7月 17 10:17 var
root@fishman-160 /]# touch /nginx/test1.txt
[root@fishman-160 /]# ll /nginx/test1.txt
-rw-r--r-- 1 root nginx 0 7月 18 16:19 /nginx/test1.txt #/nginx目录下的文件,均属于nginx组
[root@fishman-160 /]# mkdir /nginx/world
[root@fishman-160 /]# ll /nginx/
总用量 0
-rw-r--r-- 1 root nginx 0 7月 18 16:19 test1.txt #nginx目录下的目录,均属于nginx组
drwxr-sr-x 2 root nginx 6 7月 18 16:19 world
[root@fishman-160 /]# ll -d /tmp
drwxrwxrwt. 30 root root 4096 7月 18 16:17 /tmp #Stickybit粘滞位
[root@fishman-160 /]# su kc
[kc@fishman-160 /]$ cd /tmp
[kc@fishman-160 tmp]$ touch kc1.txt #kc在/tmp目录下创建kc1.txt
[kc@fishman-160 tmp]$ exit
[root@fishman-160 /]# su san
[san@fishman-160 /]$ cd /tmp
[san@fishman-160 tmp]$ rm kc1.txt #susan响无法删除/tmp目录下的kc1.txt,stickybit防误删
rm:是否删除有写保护的普通空文件 'kc1.txt'?y
rm: 无法删除'kc1.txt': 不允许的操作
三、chattr权限
chattr 命令专门用来修改文件或目录的隐藏属性,且只有 root 用户可以使用。由于几乎不用chattr修改目录的隐藏属性。
是新添加的文件拓展系统属性。
chattr语法格式:chattr [参数]
chattr蝉常用餐你数
参数 | 说明 |
---|---|
-V | 显示指令过程 |
+<属性> | 赋予文件或目录的该项属性。 |
-<属性> | 取消文件或目录的该项属性。 |
=<属性> | 指定文件或目录的该项属性。 |
i | 不能被修改 |
a | 只能追加内容 |
[root@fishman-160 ~]# lsattr 1.txt
-------------------- 1.txt
[root@fishman-160 ~]# chattr +i 1.txt #添加 不可修改 属性
[root@fishman-160 ~]# lsattr 1.txt
----i--------------- 1.txt
[root@fishman-160 ~]# rm 1.txt
rm:是否删除普通空文件 '1.txt'?y
rm: 无法删除'1.txt': 不允许的操作
[root@fishman-160 ~]# echo ‘尝试追加内容’>> 1.txt
-bash: 1.txt: 不允许的操作
[root@fishman-160 ~]# chattr -i 1.txt #去掉不可修改的属性
[root@fishman-160 ~]# echo '尝试追加内容' >> 1.txt
[root@fishman-160 ~]# head 1.txt
尝试追加内容 #添加内容成功
[root@fishman-160 ~]# chattr +a 2.txt #添加 只可以追加的 属性
[root@fishman-160 ~]# lsattr 2.txt
-----a-------------- 2.txt
[root@fishman-160 ~]# rm -rf 2.txt #无法删除
rm: 无法删除'2.txt': 不允许的操作
[root@fishman-160 ~]# echo "尝试追加内容" >>2.txt && less 2.txt #追加成功
尝试追加内容
[root@fishman-160 ~]# chattr -a 2.txt && rm -rf 2.txt #去掉属性后删除成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了