wiki/运维/Linux/笔记/13.文本权限.md
2026-04-08 19:40:00 +08:00

255 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 1、文件权限概览
Linux 文件权限控制的核心对象有三类:
- `u`属主user
- `g`属组group
- `o`其他用户others
对应的基本权限有三种:
- `r`:读,值为 4
- `w`:写,值为 2
- `x`:执行,值为 1
权限控制是 Linux 安全模型的基础之一,和文件访问、脚本执行、目录操作都直接相关。
## 2、文件权限与目录权限的区别
### 2.1 文件权限
对**普通文件**来说:
- `r`:可以读取文件内容
- `w`:可以修改文件内容
- `x`:可以把该文件作为程序执行
### 2.2 目录权限
对**目录**来说,权限含义和普通文件不完全一样:
- `r`:可以查看目录中的文件名列表
- `w`:可以在目录中创建、删除、重命名文件
- `x`:可以进入目录,也可以访问目录项的元数据
目录权限是很多初学者最容易搞混的地方。
## 3、`ls -l` 权限格式
```shell
root@lzc:/var/log# ls -l
-rw-r--r-- 1 root root 0 Dec 5 00:00 alternatives.log
```
这一行的主要含义:
- `-`:文件类型,表示普通文件
- `rw-`:属主权限
- `r--`:属组权限
- `r--`:其他用户权限
- `1`:硬链接数
- `root`:属主
- `root`:属组
- `0`:文件大小
- `Dec 5 00:00`:最近修改时间
- `alternatives.log`:文件名
## 4、修改属主和属组
### 4.1 `chown`
用于修改文件属主,也可以同时修改属组。
```shell
chown root:root fileName
```
表示把文件的属主和属组都改为 `root`
常见选项:
- `-R`:递归处理目录及其内部文件
### 4.2 `chgrp`
用于单独修改文件属组。
常见选项:
- `-R`:递归处理
示例:
```shell
chgrp devops fileName
```
## 5、修改权限 `chmod`
`chmod` 用于修改文件或目录权限。
### 5.1 数字方式
常见组合:
- `7` = `rwx`
- `6` = `rw-`
- `5` = `r-x`
- `4` = `r--`
例如:
```shell
chmod 644 file.txt
chmod 755 script.sh
```
### 5.2 符号方式
可以使用 `u``g``o``a` 搭配 `+``-``=` 设置权限。
示例:
```shell
chmod u+x script.sh
chmod g-w file.txt
chmod o-r file.txt
```
### 5.3 递归修改
```shell
chmod -R 755 dirName
```
对目录递归改权限时要非常谨慎,避免把文件和目录都改成不合适的权限。
## 6、默认权限 `umask`
`umask` 决定新建文件和目录时默认去掉哪些权限。
### 6.1 常见规则
- 文件默认基准通常是 `666`
- 目录默认基准通常是 `777`
因此:
- 文件默认权限 ≈ `666 - umask`
- 目录默认权限 ≈ `777 - umask`
### 6.2 常见默认值
- `root` 常见默认值:`022`
- 普通用户常见默认值:`002``022`
### 6.3 永久生效
如果想长期修改 `umask`,通常写入:
- `/etc/profile`
- `~/.bashrc`
- `~/.profile`
具体取决于系统和登录方式。
## 7、特殊权限
除了普通的 `rwx`Linux 还有 3 类常见特殊权限:
- SUID
- SGID
- Sticky Bit
### 7.1 SUID
SUID 主要作用在**可执行文件**上。
效果:普通用户执行该程序时,会临时以**文件属主**的身份运行。
典型例子:
```shell
ls -l /bin/passwd
```
可能看到:
```shell
-rwsr-xr-x
```
其中属主执行位上的 `s` 就表示设置了 SUID。
### 7.2 SGID
SGID 有两种常见作用:
- 作用在可执行文件上:以文件属组身份运行
- 作用在目录上:新建文件会继承该目录的属组
这在团队共享目录里非常常见。
### 7.3 Sticky Bit
Sticky Bit 主要作用在目录上。
效果:目录中的文件通常只能被**文件所有者**或 `root` 删除。
典型例子:
```shell
ls -ld /tmp
```
可能看到:
```shell
drwxrwxrwt
```
最后的 `t` 就表示设置了 Sticky Bit。
## 8、特殊属性 `chattr` 与 `lsattr`
除了权限位外Linux 还支持一些额外文件属性。
### 8.1 `chattr`
常见属性:
- `+i`:不可删除、不可改名、不可修改
- `+a`:只能追加内容,不能覆盖或删除
示例:
```shell
chattr +i important.conf
chattr +a app.log
```
### 8.2 `lsattr`
用于查看文件特殊属性。
```shell
lsattr important.conf
```
## 9、常见运维建议
- 给脚本加执行权限前,先确认内容安全
- 不要随意对系统目录做递归 `chmod -R 777`
- 团队共享目录可考虑配合 SGID 使用
- 核心配置文件可结合 `chattr +i` 防误删或误改
- 处理目录权限时,一定要先区分“文件权限”和“目录权限”
## 10、小结
- `rwx` 是 Linux 权限的基础
- 文件权限和目录权限含义不同
- `chown``chgrp``chmod` 是最常见的权限管理命令
- `umask` 决定新建文件和目录的默认权限
- SUID、SGID、Sticky Bit 是高频特殊权限知识点
- `chattr``lsattr` 用于管理更细粒度的文件属性