权限管理
文件的一般权限
文件详细信息
使用命令ll或ls -l 查看
结果分析:
文件权限构成
权限针对三类对象定义
owner:所属者,缩写u
group :所属组,缩写g
other :其他人,缩写o
访问者三种权限
r:文件可读 w:文件可写 x:文件可执行 -:表示没有权限
三位一组,第一位表示文件是否可读,第二位表示文件是否可写,第三位表示文件是否可执行
rw-
r--
r--
组成模式分析
字符表示二进制表示数字表示---0000--x0011-w-0102-wx0113r--1004r-x1015rw-1106rwx1117
文件与目录权限含义
权限对文件的影响对目录的影响r(read)可以读取文件的内容可以列出目录的内容,即目录下的文件的文件名w(write)可以更改文件的内容可以创建或者删除目录中的任一文件(只有w权限无法创建删除文件,需要和x权限一起使用)x(execute)可以作为可执行文件,如脚本可以切换到目录,如cd命令文件可能出现的权限目录可能出现的权限---、r--、r-x、rw-、rwx---、r-x、rwx注意
root账户不受文件权限的读写限制,执行权限受限制
示例
例1:写出下列文件的字符权限
764 : rwxrw-r--
642: rw-r---w-
153: --xr-x-wx
731: rwx-wx--x
例2:写出下列文件的数字权限
r-xrw-r-- : 564
rw--w--wx : 623
rw-r--r-- : 644
chmod命令
作用
chmod(change mode):修改文件或目录的权限
格式
+:加上某个权限 -:减去某个权限 =:重新赋值
a:表示所有全部与u,g,o同级意为all
# 格式1
chmod [选项] [ugoa][+-=][rwx] 文件或目录...
# 格式2
chmod [选项] nnn 文件或目录...`(可看可不看)
参数
-R:递归修改指定目录下所有文件、子目录的权限 (了解即可)
ugoa:表示权限设置所针对的用户类别,可以是其中字母中的一个或组合,u(user)表示文件或目录的属主(所有者);g(group)表示属组内的用户;o(others)表示其他用户;a(all)表示所有用户(即u+g+o)
+或-或=:表示设置权限的操作动作,+代表添加;-代表取消;=表示只赋予给定的权限,并取消原有的权限。
rwx:用字符形式表示的所设置的权限,可以是其中一个字母或组合
nnn:用数字表示的权限
单写一个数字系统会默认前面加两个00
示例
例1
[root@server ~]# touch t1.txt
[root@server ~]# ll t1.txt
-rw-r--r--. 1 root root 0 5月 6 17:29 t1.txt
[root@server ~]# chmod u+x t1.txt
[root@server ~]# ll t1.txt
-rwxr-xr-x. 1 root root 0 5月 6 17:29 t1.txt
[root@server ~]# chmod o+w t1.txt
[root@server ~]# ll t1.txt
-rwxr-xrwx. 1 root root 0 5月 6 17:29 t1.txt
例2
[root@server ~]# touch t2.txt
[root@server ~]# ll t2.txt
-rw-r--r--. 1 root root 0 5月 6 17:27 t2.txt
[root@server ~]# chmod 777 t2.txt
[root@server ~]# ll t2.txt
-rwxrwxrwx. 1 root root 0 5月 6 17:27 t2.txt
[root@server ~]# chmod 000 t2.txt
----------. 1 root root 0 5月 6 17:27 t2.txt
[root@server ~]# chmod 6 t2.txt
会自动在6的前面进行补00,也就是说实际上设置的权限是006
例3 (了解即可)
[root@server ~]# mkdir -p m1/m2/m3
[root@server ~]# touch m1/m2/m3/t3.txt
[root@server ~]# cd m1
[root@server m1]# tree
.
└── m2
└── m3
└── t3.txt
2 directories, 1 file
[root@server m1]# cd ..
[root@server ~]# ls -ld m1
drwxr-xr-x. 3 root root 16 5月 6 17:33 m1
[root@server ~]# cd m1
[root@server m1]# ls -ld m2
drwxr-xr-x. 3 root root 16 5月 6 17:33 m2
[root@server m1]# cd m2
[root@server m2]# ls -ld m3
drwxr-xr-x. 2 root root 20 5月 6 17:34 m3
[root@server m2]# cd m3
[root@server m3]# ll t3.txt
-rw-r--r--. 1 root root 0 5月 6 17:34 t3.txt
[root@server ~]# chmod -R 755 m1 # 递归设置
[root@server ~]# ll m1
总用量 0
drwxr-xr-x. 3 root root 16 5月 6 17:33 m2
[root@server ~]# cd m1
[root@server m1]# ll m2
总用量 0
drwxr-xr-x. 2 root root 20 5月 6 17:34 m3
[root@server m1]# cd m2
[root@server m2]# ll m3
总用量 0
-rwxr-xr-x. 1 root root 0 5月 6 17:34 t3.txt
chown命令
作用
修改文件或目录的所属者和属组
格式
修改文件或目录的所属者
chown -参数 所有者:所属组 文件名或目录名 冒号前改所属者,冒号后改所属组
# 参数-R递归设置
示例 (改名)
[root@server m2]# cd ~
[root@server ~]# touch t4.txt
[root@server ~]# ll t4.txt
-rw-r--r--. 1 root root 0 5月 6 17:40 t4.txt
[root@server ~]# chown fox:fox t4.txt
[root@server ~]# ll t4.txt
-rw-r--r--. 1 fox fox 0 5月 6 17:40 t4.txt
总结:其他用户是否能够删除该文件,不是取决于该文件对其的权限设置,而是该文件的所属目录对该用户的权限设置。

取消掉other用户对/test目录的r权限, ll -d /test (-d 表示查看的是目录本身)
发现other用户无法ls /test
依次展示其他的。
一旦其他人对目录可以w,那么对目录下任何人创建的文件都可以进行删除(包括root用户创建的文件)
链接文件的权限不可信,因为取决于源文件的权限
普通用户对于系统文件无法进行改动原因是::::查看一下权限发现文件夹其他人都是没有可写w的权限
权限掩码
新建文件权限与umask关系
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask值有关
第一位0表示的是特殊权限位
新建文件的默认权限=0666-umask值即06449(rw-r--r--)(减去)
新建目录的默认权限=0777-umask值即0755(rwxr-xr-x)
权限掩码的修改是临时的(例如 umask 000 )
查看默认umask值
[root@server ~]# umask
0022 umask的值
0022
[root@server ~]# touch file1
[root@server ~]# mkdir dir1
[root@server ~]# ll -d file1 dir1
drwxr-xr-x. 2 root root 6 5月 6 18:23 dir1 # 755
-rw-r--r--. 1 root root 0 5月 6 18:23 file1 # 644
修改默认umask
[root@server ~]# umask 000 # 临时修改
[root@server ~]# touch file2
[root@server ~]# mkdir dir2
[root@server ~]# ll -d file2 dir2
drwxrwxrwx. 2 root root 6 5月 6 18:26 dir2
-rw-rw-rw-. 1 root root 0 5月 6 18:25 file2
suid (不太重要)
对于一个可以执行的文件添加上suid权限后,普通用户在执行该文件时,会临时拥有该文件所有者的权限
普通用户可以使用passwd改命令,但是/etc/shadow文件对普通用户没有写的权限???
which passwd 查看命令文件的路径
ll /usr/bin/passwd
会发现在所属者的权限位置上存在s,表示suid权限
举例:普通用户不能用cat查看/etc/shadow
[gouxin@study ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
[root@study etc]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 37464 5月 31 2022 /usr/bin/cat
[root@study etc]# chmod u+s /usr/bin/cat
[root@study etc]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 37464 5月 31 2022 /usr/bin/cat
SGID (了解即可)
SetGID(SGID):当对一个可执行的程序文件设置了SGID后,普通用户在执行该文件时临时拥有 其所属组的权限,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有组身份
当对一个目录作设置了SGID权限后,普通用户在该目录下创建的文件的所属组,均与该目录的所 属组相同
SetGID权限会附加在所属组的 x 权限位上,所属组的 x 权限标识会变成 s
设置SetGID命令格式:chmod g+s 文件名
Sticky BIT特殊权限:
针对目录的,一旦目录存在BIT特殊权限,即使其他用户具有文件的rwx,也只能删除自己创建的文件
chmod o+t 目录名
#为目录设置SBIT
[root@localhost ~]# chmod o+t /test
[root@localhost ~]# ll -d /test
drwxrwxrwt. 2 root root 6 4月 11 16:07 /test
[lisi@localhost test]$ ls
kenji.txt laowang.txt lisi.txt
[lisi@localhost test]$ rm -rf *
rm: 无法删除"kenji.txt": 不允许的操作
rm: 无法删除"laowang.txt": 不允许的操作
FACL访问控制列表
单独为每一个用户量身定制一个权限(不是你们部门的,但是需要一些权限)
命令格式:setfacl 选项 归属关系:用户名:权限 文档 常用选项:
-m 设置权限
-x 删除指定用户权限
-b 删除所有用户权限
查看ACL权限
格式
getfacl 文件名
例
[root@server ~]# touch temp.cfg
[root@server ~]# getfacl temp.cfg # getfacl命令
# file: temp.cfg
# owner: root
# group: root
user::rw-
group::r--
other::r--
设置ACL权限
格式
setfacl -参数 文件名
参数
-m:设定 ACL 权限
给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名
给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名
-x:删除指定的 ACL 权限;
-b:删除所有的 ACL 权限;
-d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
-k:删除默认 ACL 权限;
-R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效
示例
例:root用户在根目录下创建目录/project及所属工作组QQgroup,所属组里面创建两个用户zhangsan和lisi,此文件权限是770,再创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x
[root@server ~]# mkdir /project
[root@server ~]# useradd zhangsan
[root@server ~]# useradd lisi
[root@server ~]# groupadd QQgroup
[root@server ~]# gpasswd -M zhangsan,lisi QQgroup
[root@server ~]# chown root:QQgroup /project
[root@server ~]# chmod 770 /project
[root@server ~]# ll -d /project
drwxrwx---. 2 root QQgroup 6 5月 6 18:12 /project
[root@server ~]# useradd pt # 新建旁听账户
[root@server ~]# setfacl -m u:pt:rx /project
[root@server ~]# ll -d /project # 注意:某文件下有+标志则说明其具有acl权限
drwxrwx---+ 2 root QQgroup 6 5月 6 18:12 /project
[root@server ~]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: QQgroup
user::rwx
user:pt:r-x
group::rwx
mask::rwx
other::---
# 为了验证 pt 用户对于 /project 目录没有写权限,我们用 su 命令切换到 pt 用户,然后进入 /project 目录,在此目录下创建文件,看是否能成功:
[root@server ~]# su - pt
[pt@server ~]$ cd /project
[pt@server project]$ touch test.txt
touch: 无法创建 'test.txt': 权限不够
删除acl权限
# 删除指定用户的 ACL 权限setfacl -x u:用户名 文件名
# 删除指定用户组的 ACL 权限setfacl -x g:组名 文件名
# 删除文件的所有 ACL 权限setfacl -b 文件名