————————原创: 厦门微思网络

Linux基础知识之​Linux 文件系统权限_文件权限

概述

  1. 文件权限控制对文件的访问
  2. 可以针对文件所属用户、所属组和其他用户可以设置不同的权限
  3. 权限具有优先级。user 权限覆盖 group 权限,后者覆盖 other 权限

权限:读取、写入和执行

权限

对文件的影响

对目录的影响

r (读取)

可以读取文件的内容

可以列出目录的内容(文件名)

w (写入)

可以更改文件的内容

可以创建或删除目录中的任意文件

x (执行)

可以作为命令执行文件

目录可以成为当前工作目录(可以 cd 它,但还需要读取权限才能列出里面的文件)

  1. 用户通常对目录具有 r 和 x 的权限,可以进入目录并列出文件(如果对目录只有 r 权限,则只能列出目录中文件名称,无法获得属性)
  2. 对文件所在目录具有所有权或写入权限的用户可以删除此文件,无论文件本身权限如何.
  3. root 用户拥有系统最高权限

查看文件和目录的权限及所有权

[student@workstation ~]$ touch test
[student@workstation ~]$ ls -l test
-rw-r--r--. 1 student student 0 May 17 18:44 test
[student@workstation ~]$ ls -ld .
drwx------. 17 student student 4096 May 17 18:44 .
[student@workstation ~]$ ls -ld /home
drwxr-xr-x. 5 root root 53 May 18 2022 /home
  1. 上述几个ls命令, 我们来看其输出的第一个字段 -rw-r--r--. drwx------. drwxr-xr-x.
  2. 第一位表示文件类型: - 表示普通文件、 d 表示目录、 l 表示软链接、 b 表示块设备、 c 表示字符设备、 p 表示管道、 s 表示 socket
  3. 接下来九位代表文件权限,分 3 组,每组 3 个字符,每组分别对应所属用户、所属组、其他用户权限
  4. 权限可以表示为: rwx 或 - (表示未设置权限)

权限依据优先匹配原则

权限标志位

对应权限

对应权值

文件权限

目录权限

每三位一组

1
2
3

r
w
x

4
2
1

owner 读文件
owner 写文件
owner 执行文件

owner 读目录
owner 写目录
owner 进入目录


u

4

5

6

r

w

x

4

2

1

group 读文件

group 写文件

group 执行文件

group 读目录

group 写目录

group 进入目录


g


7

8

9

r

w

x

4

2

1

other 读文件

other 写文件

other 进入目录

other 读目录

other 写目录

other 进入目录


o


更改文件和目录的权限

  1. chmod (change mode)命令用于修改文件权限,可使用符号法或八进制法来设置权限

符号法(Symbolic Method)

chmod Who/What/Which file|directory

  1. Who 是指 u、g、o、a(代表用户、组、其他、全部)
  2. What 是指 +、-、=(代表添加、删除、精确设置)
  3. Which 是指 r、w、x 或 X(代表读取、写入、执行文件或进入目录)
  4. 注:对目录设置执行权限需要使用

数值八进制法(Octal Method)

chmod ### file|directory

  1. 每个数字代表一个访问级别的权限:user、group、other
  2. 数字的计算方法是:将每个权限的数值加在一起,其中 4 代表读取、2代表写入、1代表执行
  3. 有经验的管理员通常使用数值权限,因为它们的输入比较短
  4. 下图说明了系统如何解释 644 八进制权限值

Linux基础知识之​Linux 文件系统权限_linux基础知识_02


更改文件和目录的用户或组所有权

  1. 新文件由创建该文件的用户所有
  2. 只有 root 用户可以更改拥有文件的用户,组所有权可以由 root 用户或文件的所有者来设置,root 用户可将文件所有权授予任何组,而普通用户仅可将文件所有权授予他们所属的组
  3. 使用 chown (change owner)命令可更改文件所有权, -R 递归
[root@workstation ~]# mkdir Pictures
 [root@workstation ~]# ls -l
total 0drwxr-xr-x. 2 root root 6 May 17 18:47 Pictures
 [root@workstation ~]# chown student:wheel Pictures/
 [root@workstation ~]# ls -l
total 0drwxr-xr-x. 2 student wheel 6 May 17 18:47 Pictures

管理默认权限和文件访问

特殊权限

特殊权限构成了除了基本用户、组和其他类型之外的第四种权限类型。顾名思义,这些权限提供了额外的访问相关功能,超出了基本权限类型允许的范畴。

特殊权限位浅析

权限

对文件的影响

对目录的影响

u+s(suid)

以拥有文件的用户身份,

对目录无影响

g+s(sgid)

以拥有文件的组身份执行文件

在目录中最新创建的文件属于父目录属组

o+t (sticky)

无影响

用户仅可以删除其文件,而无法删除或强制保存其他用户的文件

suid 示例:

ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 35504 Jul 16 2010 /usr/bin/passwd

sgid 示例:

ls -ld /run/log/journal
drwxr-sr-x. 3 root systemd-journal 60 May 18 09:15 /run/log/journal

sticky 示例:

ls -ld /tmp
drwxrwxrwt. 39 root root 4096 Feb 8 20:52 /tmp

设置特殊权限

用符号表示:setuid = u+s,setgid=g+s,sticky=o+t

[root@workstation ~]# mkdir example
[root@workstation ~]# chmod g+s example
[root@workstation ~]# ls -ld example
drwxr-sr-x. 2 root root 6 May 17 19:16 example

用数值法表示:setuid=4;setgid=2;sticky=1

[root@workstation ~]# mkdir exam
[root@workstation ~]# chmod 2770 exam
[root@workstation ~]# ls -ld exam
drwxrws---. 2 root root 6 May 17 19:17 exam

文件默认权限

  1. 创建新文件或目录时,会为其分配初始权限。有两个因素会影响这些初始权限。首先是创建常规文件还是目录。其次是当前的
  2. 如创建新目录,操作系统会为其分配权限 0777。如果是创建文件,操作系统会为其分配权限 0666
  3. shell 会话还会设置一个 umask,进一步限制初始设置的权限。这是一个八进制位掩码,用于清除由该进程创建的新文件和目录的权限。例如 umask 0002 可清楚其他用户的写入位。前导零表示特殊的用户和组权限未被清除。

Linux基础知识之​Linux 文件系统权限_八进制_03


  1. umask 示例:
[root@workstation ~]# su - student
Last login: Fri May 17 18:44:12 EDT 2024 on pts/0
[student@workstation ~]$ umask
0022
[student@workstation ~]$ touch abc
[student@workstation ~]$ ls -l abc
-rw-r--r--. 1 student student 0 May 17 19:20 abc
  1. root 用户可以通过在 /etc/profile.d 目录中添加 local-umask.sh 启动脚本来更改默认的 umask
  2. 用户可以在他们的.bash_profile 和.bashrc 文件中覆盖系统默认值.
[root@workstation ~]# cat /etc/profile.d/local-umask.sh
# Overrides default umask configuration asda sda
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 umask 007
else
 umask 022
fi
[root@workstation ~]# su - student
Last login: Fri May 17 19:20:28 EDT 2024 on pts/0
[student@workstation ~]$ umask
0007
[root@workstation ~]# useradd test
[root@workstation ~]# su - test
[test@workstation ~]$ umask
0007



END