## 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` 用于管理更细粒度的文件属性