文件权限管理

一、文件的基本权限

1、权限的作用

通过对文件设定权限可以达到以下三种访问限制权限:

只允许用户自己访问;

允许一个预先指定的用户组中的用户访问;

允许系统中的任何用户访问。

2、查看文件的权限

1689647665185

[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
文件类型 拥有者的权限 所属组的权限 其他人的权限 拥有者 属组 文件大小 最后修改时间 对象

image-20230718103731581

其中:文件类型,可以为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 717 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 717 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 76 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 718 10:45 kc.txt #own继承了kc

6、更改文件的属主和属组

chown:可以用来改变文件(或目录)的属主(组)

chgrp:可以用来改变文件(或目录)的默认属组

chown user:group filename  #修改文件所属者和所属组
chown user filename #修改文件所属者
chown :group filename #修改文件属组
chgrp group filename  #修改文件属组

1700708228959

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 717 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 717 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 717 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 717 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 717 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 717 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 718 11:16 /test
[root@fishman-160 ~]# chmod 770 /test #修改test的权限
[root@fishman-160 ~]# ll -d /test
drwxrwx--- 2 root root 6 718 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 718 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 718 11:23 /test
[root@fishman-160 ~]# su - kc #切换到kc,尝试访问,提示权限不够
[kc@fishman-160 ~]$ cd /test 
-bash: cd: /test: 权限不够

1700709863697

二、特殊权限

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 718 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 #去掉属性后删除成功
posted @   墨香清梦  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示