【Linux笔记】系统中的权限管理及优化
一、概念
权限在Linux系统中可以大致分为为r、w、x这三种基础类别,他们分别对应读、写、执行三个含义。这三个权限就规定了用户对文件、目录等的操作范围和权利,一定程度加大了系统的安全性,以及数据的完整性。下面是对r、w、x的介绍:
1、r(读):
读,即字面意思,用户可以读取文件内容,如通过 cat
、less
等命令查看。但也就仅限于读取文件这一步,若仅有 r
而无其他权限,则用户无法修改或执行文件。在目录中,用户可以列出目录内容,如通过 ls
查看文件名;若仅有 r
而无 x
,用户无法访问文件属性或进入目录。
2、w(写):
写,用户可以修改文件的内容,如编辑、追加或清空文件,重点在“改”这一操作中。但需要注意:删除文件本身并不依赖文件的w(写)权限,而是由所在目录的权限控制。在目录中,用户可以增删或重命名目录中的文件,如 touch
、rm
、mv,
但有一关键要求:必须同时拥有 x
权限,否则写操作无效。
3、x(执行):
执行,即执行权限,用户可以将文件作为可执行程序来运行,如脚本或二进制文件。但,若选择执行的文件是脚本,还需确保其内容可读(r
权限)。在目录中,用户可以执行如:进入目录(如 cd
)或访问目录内文件的元数据(如 ls -l
)等操作;若仅有 x
而无 r
,用户可通过已知文件名直接操作文件(其需文件自身权限允许)。
二、权限的查看、读取及种类
在刚刚的概念中已经稍稍提了一些文件的查看于读取,接下来我们详细来看看。
1、查看(混了一些权限种类的解释)
文件的常用查看权限一般为 ls ,其中ls也有许多衍生命令,下面挑些常用的来介绍:
1)ls -l
显示文件或目录的详细权限信息,其默认查看当前目录内容。代码和示例如下:
[root@localhost 桌面]# ls -l example1
代码中的example1是创建的一个文件例子,通过代码可知 ls -l 的用法即为:ls -l 要查看的文件
而查看文件example1的权限后,其权限字段格式:-rw-r--r--,除去第一位,之后的每3位为一个字段,其具体解释:
-
-
:文件类型(-
表示普通文件,d
表示目录,l
表示符号链接) -
rw-
:所有者(user)的权限 -
r--
:所属组(group)的权限 -
r--
:其他用户(others)的权限
2)ls -ld
即查看目录本身的权限,而非目录内的内容。代码和示例如下:
[root@localhost 桌面]# ls -ld example2
example2是创建的目录例子, 通过代码可知 ls -ld 的用法即为:ls -ld 要查看的目录
d
表示这是一个目录,权限字段 rwxr-xr-x
重复的字段参考刚刚的ls -l中的解释,这里解释新的:
-
d:表示这是一个目录
-
r-x
:用户组的读、执行权限
3) stat
即显示文件的详细元数据,包括权限的八进制表示。代码和示例如下:
[root@localhost 桌面]# stat file.txt
file.txt为创建的例子文件,通过代码可知 stat 的用法即为:stat 要查看的文件
示例的各种种类解释放到后边详讲。
2、权限的种类
用上面先前的一个示例来介绍,如图:
可分为以下几个部分(1-9):
- | rw-r--r-- | . | 1 | root | root | 0 | 3月 31 18:18 | example1
[1] 文件类型
- - 普通文件
- d 目录
- l 软连接
- b 快设备
- c 字符设备
- ssocket 套接字
- p 管道 |
[2] 文件权限说明(有权限位和用户对文件的身份解释)
符号 | 全称 | 中文 | 作用对象 |
---|---|---|---|
u | User | 所有者 | 文件/目录的创建者或拥有者 |
g | Group | 所属组 | 文件关联的用户组(组成员) |
o | Others | 其他用户 | 既非所有者,也不在所属组的其他用户 |
关键注意事项
-
权限优先级
u
>g
>o
,例如:若用户是所有者,则仅u
的权限生效,g
和o
的权限对其无效。 -
慎用
开放o
的写权限o+w
可能允许任意用户修改文件,存在安全隐患(如/etc/passwd
不可随意开放)。 -
目录权限的特殊性
对目录的操作(如删除文件)由目录的w
权限控制,与文件自身的权限无关。
[3] 文件安全上下文标记
[4] 文件副本标记或目录中子目录标记
[5-6] 文件的归属
第一个部分【5】是指——文件的拥有着
第二个部分【6】是指——文件的拥有组
[7] 文件容量统计
[8] 文件时间戳
[9] 文件名称
三、 权限修改的一些命令(chown与chgrp)
1、chown
:
1)概念
chown为修改文件/目录的拥有者(Owner)和所属组(Group)
2)核心功能
-
修改所有者:将文件或目录的所有者更改为指定用户。
-
修改所属组:同时或单独修改文件/目录的所属组(需特定语法)。
3)基本用法(语法)
chown [选项] <新所有者>:<新所属组> <文件或目录>
chown [选项] <新所有者> <文件或目录> # 仅修改所有者
chown [选项] :<新所属组> <文件或目录> # 仅修改所属组(等同于 `chgrp`)
示例如下(修改所有者的情况):
- 我们先在mnt目录里创建一个监视器,用来后续方便观察文件所有者和所属组的变动,并创建一个文件test1来做示例文件
1. 转移到mnt/目录里 cd /mnt/ 2. 在mnt/下创建文件test1作为示例文件 touch test1 3. 创建监视器,用来监视mnt/下的文件各种权限 watch -n 1 ls -lR /mnt/
- 另起一个终端命令行,同样转移(cd)到mnt/下,输入以下命令观察监视器test1的变化
[root@localhost mnt]# chown lee test1 同样的命令还有: [root@localhost mnt]# chown -R lee test1
可以看到,原本为用户root的所有者已经更改成用户lee
2、chgrp :
1)概念
chgrp为修改文件/目录的所属组(Group)
2)核心功能
仅修改所属组:与 chown :组名
功能相同,但语法更简洁。
3)基本用法(语法)
chgrp [选项] <新所属组> <文件或目录>
示例如下(修改所属组的情况):
- 同样还是监视器,这里不再赘述,和chown步骤相同
- 输入以下命令观察监视器test1的变化
[root@localhost mnt]# chgrp lee test1 同样的命令还有: [root@localhost mnt]# chgrp -R lee test1
可以看到,原本为用户root的所属组已经更改成用户lee的所属组
3、如何同时修改所有者和所属组?
同时修改所有者和所属组可以用chown来解决,如下:
[root@localhost mnt]# chown root:root test1
刚刚所有者和所属组都被修改成lee的文件test1, 我们再把其所有者和所属组修改回root
如果修改的是目录,那就用下面命令:
[root@localhost mnt]# chown -R root.root timinglee/
用chown -R把目录timinglee/的所有者和所属组都修改成root;注意:目录的同时修改所有组和所属组之间的符号是“.”,于文件的同时修改有区别(文件的是“:”)
4、chmod
1)概念
chmod可以修改权限字段,修改文件/目录的访问权限,控制用户对资源的读(r
)、写(w
)、执行(x
)权限。
2)用法
-
符号模式
通过符号组合(u/g/o/a
++/-/=
+r/w/x
)灵活调整权限,适合局部修改。chmod <对象><操作符><权限> <文件或目录>
如:
chmod u+x script.sh # 给所有者添加执行权限 chmod g-w data.txt # 移除组的写权限 chmod o= file.log # 其他用户无任何权限 chmod a=rw config.ini # 所有用户可读写,不可执行 chmod +x myapp # 所有用户添加执行权限(等效 `a+x`)
符号 说明 对象 u
(所有者)、g
(组)、o
(其他)、a
(所有用户,默认)操作符 +
(添加权限)、-
(移除权限)、=
(直接设置权限)权限 r
(读)、w
(写)、x
(执行)、s
(SUID/SGID)、t
(粘滞位) - 数字模式
通过三位八进制数字(0-7)快速设置完整权限,适合批量操作。
权限数字计算:
r
= 4,w
= 2,x
= 1
每组权限为三者之和(如rwx
= 7,r-x
= 5)chmod <ABC> <文件或目录> # A=所有者权限,B=组权限,C=其他用户权限
如:
chmod 755 file.txt # u=7 (rwx), g=5 (r-x), o=5 (r-x) chmod 644 dir/ # u=6 (rw-), g=4 (r--), o=4 (r--) chmod 1777 tmp/ # 粘滞位(权限为 `rwxrwxrwt`)
四、系统默认权限设定
1、概念
umask
(User File Creation Mask)是 Linux 中用于
控制新建文件或目录默认权限 的机制。
2、用法
umask 权限值
- 文件默认权限=777-umask-111
- 目录默认权限=777-umask
- umask值越大系统安全性越高
umask的临时修改:
umask 077
永久修改:
针对用户:在用户配置文件(如 ~/.bashrc
、~/.profile
)中追加:
umask 022 # 设置默认 umask
全局配置:在系统配置文件(如 /etc/profile
、/etc/bashrc
)中设置。
3、umask 的常见值
umask 值 | 文件权限 | 目录权限 | 适用场景 |
---|---|---|---|
002 | 664 | 775 | 用户与组可协作(同组可写) |
022 | 644 | 755 | 默认安全配置(仅用户可写) |
027 | 640 | 750 | 严格权限(组只读,其他用户无) |
077 | 600 | 700 | 完全私有化 |
五、系统中的特殊权限
1、SUID
也叫Set UID,当一个设置了 SUID 权限的程序被执行时,内核会将进程的有效用户 ID(Effective User ID)临时设置为文件所有者的用户 ID,而实际用户 ID(Real User ID)保持不变。这样,在程序执行期间,该进程就具有了文件所有者的权限。
-
作用:执行文件时以文件所有者的身份运行。
-
设置:
chmod u+s /usr/bin/myapp # 符号模式 chmod 4755 /usr/bin/myapp # 数字模式(4xxx)
注意:
2、SGID
-
作用:目录内新建文件继承目录的所属组。
-
设置:
chmod g+s shared_dir/ # 符号模式 chmod 2775 shared_dir/ # 数字模式(2xxx)
注意:
目前更新至此(2025/3/31)