diff --git a/source/_posts/Linux用户与权限.md b/source/_posts/Linux用户与权限.md index ce7a5ac..98301eb 100644 --- a/source/_posts/Linux用户与权限.md +++ b/source/_posts/Linux用户与权限.md @@ -49,6 +49,61 @@ su username exit ``` +### 收回用户 Shell 权限 + +限制用户登录系统,禁止其使用交互式 Shell。 + +#### 设置禁止登录的 Shell + +```shell +# 方法一:使用 /sbin/nologin(推荐) +usermod -s /sbin/nologin username + +# 方法二:使用 /bin/false +usermod -s /bin/false username +``` + +#### 查看用户当前 Shell + +```shell +grep username /etc/passwd + +# 或 +getent passwd username +``` + +输出示例: + +``` +username:x:1001:1001::/home/username:/sbin/nologin +``` + +#### 各 Shell 对比 + +| Shell | 效果 | +| --- | --- | +| `/bin/bash` | 正常登录,可执行命令 | +| `/sbin/nologin` | 拒绝登录,提示 `This account is currently not available` | +| `/bin/false` | 拒绝登录,无提示,退出码为 1 | +| `/usr/sbin/nologin` | 与 `/sbin/nologin` 相同(部分系统软链接) | + +> **适用场景**:数据库用户、服务专用账户、FTP 账户等只需运行服务不需要登录系统的用户。 + +#### 恢复登录权限 + +```shell +usermod -s /bin/bash username +``` + +#### 批量收回 + +```shell +# 读取用户列表文件,批量设置 +while read user; do + usermod -s /sbin/nologin "$user" +done < userlist.txt +``` + --- ## 权限管理 @@ -65,14 +120,65 @@ Linux 文件有三种权限: ### chmod 命令 -修改文件权限。 +修改文件或目录权限。 + +#### 基本语法 ```shell -# 数字方式设置权限 -chmod 755 file +chmod [选项] 模式 文件 ``` -**权限数字说明**: +#### 符号模式 + +通过 `u`(所有者)、`g`(所属组)、`o`(其他用户)、`a`(所有人)配合 `+`、`-`、`=` 操作权限。 + +**操作符区别**: + +| 操作符 | 作用 | 说明 | +|--------|------|------| +| `+` | 添加权限 | 在原有权限基础上增加,不影响已有权限 | +| `-` | 移除权限 | 从现有权限中移除,不影响未指定的权限 | +| `=` | 直接设置 | 覆盖为指定权限,其余位清零 | + +```shell +# + 添加权限(累加,不影响其他位) +chmod u+x script.sh # 所有者添加执行权限 +chmod a+r file.txt # 所有人添加读权限 +chmod g+w,o+r file.txt # 组添加写,其他添加读 + +# - 移除权限(仅移除指定位,其余保留) +chmod o-w file.txt # 其他用户移除写权限 +chmod g-x script.sh # 组移除执行权限 +chmod a-w file.txt # 所有人移除写权限 + +# = 直接设置(覆盖,未指定的位全部清零) +chmod u=r file.txt # 所有者只有读权限(写和执行被清除) +chmod g=r file.txt # 组只有读权限 +chmod o= file.txt # 其他用户无任何权限 +chmod u=rwx,g=rx,o= file.txt # 精确控制每位权限 + +# + 重复添加已有权限不会报错,保持不变 +chmod u+x file.txt # 如果已有执行权限,不变 +chmod a+r file.txt # 如果所有人已有读权限,不变 +``` + +> **注意**:`+` 是幂等操作,重复添加已有权限不会产生任何变化,也不会报错。`-` 同理,移除不存在的权限也不会报错。 + +**示例对比**: + +```shell +# 假设文件当前权限为 rw-r--r--(644) + +chmod u+x file.txt # 结果:rwxr--r--(654)只给所有者加了执行 +chmod u-x file.txt # 结果:rw-r--r--(644)移除执行(本来就没有,不变) +chmod u=r file.txt # 结果:r--r--r--(444)所有者变成只读,写被清掉 +chmod u=rw file.txt # 结果:rw-r--r--(644)所有者读写 +chmod u=rwx,g=rx,o= file.txt # 结果:rwxr-x---(750) +``` + +#### 数字模式 + +用三位八进制数表示权限,每位对应 `u`、`g`、`o`。 | 数字 | 权限 | 说明 | |-----|------|------| @@ -82,10 +188,158 @@ chmod 755 file | 4 | r-- | 只读 | | 0 | --- | 无权限 | -**755 权限含义**:`rwxr-xr-x` -- 所有者:读、写、执行 -- 所属组:读、执行 -- 其他用户:读、执行 +```shell +# rwxr-xr-x(所有者全权限,组和其他用户读执行) +chmod 755 file.txt + +# rw-r--r--(所有者读写,组和其他用户只读) +chmod 644 file.txt + +# rw-rw----(所有者和组读写,其他用户无权限) +chmod 660 file.txt + +# rwx------(仅所有者有全部权限) +chmod 700 file.txt + +# rw-rw-rw-(所有人可读写) +chmod 666 file.txt +``` + +#### 常用权限参考 + +| 权限值 | 含义 | 适用场景 | +|--------|------|----------| +| `755` | rwxr-xr-x | 可执行脚本、程序,公开目录 | +| `644` | rw-r--r-- | 普通文件,所有人可读 | +| `700` | rwx------ | 私有目录,仅所有者可访问 | +| `600` | rw------- | 私有文件,如 SSH 密钥 | +| `640` | rw-r----- | 服务配置文件,组可读 | +| `777` | rwxrwxrwx | 所有人可读写执行(不推荐) | + +#### 常用选项 + +```shell +# 递归修改目录及子目录下所有文件 +chmod -R 755 /var/www/html + +# 仅修改目录本身的权限 +chmod 755 /var/www/html + +# 修改符号链接的权限(不常用) +chmod -h 755 link_file + +# 显示修改过程 +chmod -v 755 file.txt +``` + +#### 设置特殊权限 + +```shell +# SUID(4):执行时以文件所有者身份运行 +chmod 4755 /usr/bin/passwd + +# SGID(2):执行时以文件所属组身份运行 +chmod 2755 /shared_dir + +# Sticky Bit(1):目录内文件只有所有者能删除 +chmod 1777 /tmp +``` + +**特殊权限数字对照**: + +| 数字 | 权限 | 说明 | +|------|------|------| +| 4 | SUID | 执行时以所有者身份运行 | +| 2 | SGID | 执行时以组身份运行 | +| 1 | Sticky | 仅文件所有者可删除目录内文件 | + +```shell +# 同时设置特殊权限和普通权限 +chmod 4755 file # SUID + rwxr-xr-x +chmod 2755 dir # SGID + rwxr-xr-x +chmod 1777 /tmp # Sticky + rwxrwxrwx +``` + +#### 通过八进制运算理解权限 + +``` +用户(u) 组(g) 其他(o) +rwx r-x r-- +4+2+1 4+0+1 4+0+0 + 7 5 4 = 754 +``` + +--- + +### chown 命令 + +修改文件或目录的所有者和所属组。 + +#### 基本语法 + +```shell +chown [选项] 所有者[:所属组] 文件 +``` + +#### 常用操作 + +```shell +# 修改文件所有者 +chown user file.txt + +# 修改文件所有者和所属组 +chown user:group file.txt + +# 修改文件所属组 +chown :group file.txt + +# 递归修改目录及子文件 +chown -R user:group /var/www/html + +# 仅修改所有者 +chown -R user /var/www/html + +# 仅修改所属组 +chown -R :group /var/www/html + +# 显示修改过程 +chown -v user file.txt +``` + +#### 常用选项 + +| 选项 | 说明 | +|------|------| +| `-R` | 递归修改目录及子目录下所有文件 | +| `-v` | 显示修改过程 | +| `-c` | 仅显示更改的文件 | +| `-f` | 静默模式,忽略错误 | +| `-h` | 修改符号链接本身而非链接目标 | + +#### 与 chgrp 的区别 + +```shell +# chown 可同时修改所有者和所属组 +chown user:group file.txt + +# chgrp 只能修改所属组 +chgrp group file.txt +``` + +#### 实用场景 + +```shell +# 部署 Web 项目 +chown -R nginx:nginx /var/www/html + +# 将目录交给特定用户管理 +chown -R user:user /home/user/projects + +# 修改 SSH 密钥权限 +chmod 600 ~/.ssh/id_rsa +chown root:root ~/.ssh +chmod 700 ~/.ssh +``` ---