Linux权限与用户管理命令详解 – chmod/chown/useradd/sudo使用指南
Linux 权限和用户管理是系统安全的基础,配置不当可能导致文件无法访问或留下安全隐患。
文件权限基础
Linux 每个文件都有权限属性,用 ls -l 查看:
-rwxr-xr-- 1 www-data www-data 1024 Jul 12 file.txt
↑↑↑↑↑↑↑↑↑↑
│└──┘└──┘└──┘
│ │ │ └── 其他用户权限(r--:只读)
│ │ └────── 组权限(r-x:读+执行)
│ └────────── 所有者权限(rwx:读+写+执行)
└───────────── 文件类型(-:普通文件 d:目录)
权限说明:
| 字符 | 权限 | 数字 | 对文件 | 对目录 |
|——|——|——|——–|——–|
| r | 读 | 4 | 查看内容 | 列出文件 |
| w | 写 | 2 | 修改内容 | 创建/删除文件 |
| x | 执行 | 1 | 运行脚本 | 进入目录 |
数字表示法:把 rwx 对应的数字相加。
| 权限 | 数字 | 含义 |
|——|——|——|
| rwx | 7 | 读+写+执行 |
| rw- | 6 | 读+写 |
| r-x | 5 | 读+执行 |
| r– | 4 | 只读 |
| — | 0 | 无权限 |
常见组合:755(所有者全权限,其他读+执行)、644(所有者读写,其他只读)。
chmod:修改权限
# 数字法(最常用)
chmod 755 script.sh # rwxr-xr-x
chmod 644 config.php # rw-r--r--
chmod 600 private.key # rw-------(私钥推荐权限)
chmod 777 upload/ # rwxrwxrwx(不推荐,安全风险)
# 符号法
chmod u+x script.sh # 给所有者加执行权限
chmod g-w file.txt # 去掉组的写权限
chmod o=r file.txt # 设置其他用户只读
chmod a+r file.txt # 所有人加读权限
chmod u+x,g+w file.txt # 同时设置多个
# 递归修改目录及子文件
chmod -R 755 /var/www/html/
# 只修改目录(不影响文件)
find /var/www/html -type d -exec chmod 755 {} \;
# 只修改文件(不影响目录)
find /var/www/html -type f -exec chmod 644 {} \;
Web 服务器推荐权限:
# 目录设为 755
find /var/www/html -type d -exec chmod 755 {} \;
# 文件设为 644
find /var/www/html -type f -exec chmod 644 {} \;
# 配置文件设为 600(含密码等敏感信息)
chmod 600 /var/www/html/wp-config.php
# 私钥文件必须 600
chmod 600 /etc/nginx/ssl/*.key
chown:修改所有者
# 修改所有者和组
chown www-data:www-data file.txt
# 只修改所有者
chown www-data file.txt
# 只修改组
chown :www-data file.txt
# 递归修改目录
chown -R www-data:www-data /var/www/html/
# 引用另一个文件的所有者
chown --reference=reference.txt target.txt
Nginx/Apache 网站目录推荐:
# 把网站目录所有者改为 Web 服务器用户
chown -R www-data:www-data /var/www/html/ # Debian/Ubuntu
chown -R apache:apache /var/www/html/ # CentOS/RHEL
chown -R nginx:nginx /var/www/html/ # Nginx
useradd / passwd:创建用户
# 创建用户(会自动创建家目录)
useradd -m -s /bin/bash newuser
# 设置密码
passwd newuser
# 创建用户并指定组
useradd -m -g www-data -s /bin/bash webuser
# 创建用户但不创建家目录
useradd -M newuser
# 创建系统用户(无登录权限)
useradd -r -s /sbin/nologin service_user
参数说明:
- •
-m:创建家目录 - •
-s:指定 shell(/bin/bash可登录,/sbin/nologin禁止登录) - •
-g:指定主组 - •
-G:指定附加组 - •
-r:创建系统用户
usermod:修改用户
# 修改用户名
usermod -l newname oldname
# 修改家目录
usermod -d /home/newdir -m username
# 修改 shell
usermod -s /bin/zsh username
# 加入附加组
usermod -aG docker username
# 锁定用户(禁止登录)
usermod -L username
# 解锁用户
usermod -U username
注意:-aG 中的 a 很重要——不加 a 会覆盖原有附加组。
userdel:删除用户
# 删除用户(保留家目录)
userdel username
# 删除用户及家目录
userdel -r username
groupadd / gpasswd:组管理
# 创建组
groupadd developers
# 删除组
groupdel developers
# 把用户加入组
gpasswd -a username developers
# 把用户从组中移除
gpasswd -d username developers
# 设置组管理员
gpasswd -A username developers
sudo:提权执行
# 以 root 执行命令
sudo command
# 切换到 root shell
sudo -i
# 或
sudo su -
# 以指定用户执行命令
sudo -u www-data php script.php
# 列出当前用户的 sudo 权限
sudo -l
配置 sudo 权限:编辑 /etc/sudoers 或在 /etc/sudoers.d/ 下创建文件:
# 允许用户执行所有命令(不推荐)
username ALL=(ALL) ALL
# 允许用户免密执行所有命令
username ALL=(ALL) NOPASSWD: ALL
# 只允许执行特定命令
username ALL=(ALL) /usr/bin/systemctl restart nginx
安全建议:用 visudo 编辑,不要直接 vim。
实用组合示例
配置 Web 服务器权限
# 网站目录归 nginx 用户所有
chown -R nginx:nginx /var/www/html/
# 目录 755,文件 644
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
# 上传目录给写权限
chmod 777 /var/www/html/uploads/
# 配置文件严格权限
chmod 600 /var/www/html/wp-config.php
chmod 600 /etc/nginx/ssl/*.key
创建部署用户
# 创建部署用户
useradd -m -s /bin/bash deploy
# 加入 www-data 组
usermod -aG www-data deploy
# 设置密码
passwd deploy
# 配置 sudo 权限(只允许重启 nginx)
echo "deploy ALL=(ALL) /usr/bin/systemctl restart nginx" > /etc/sudoers.d/deploy
chmod 440 /etc/sudoers.d/deploy
查看用户和组信息
# 查看当前用户
whoami
# 查看当前用户所属的组
groups
# 查看指定用户的组
groups username
# 查看用户详细信息
id username
# 查看所有用户
cat /etc/passwd | cut -d: -f1
# 查看所有组
cat /etc/group | cut -d: -f1
# 查看登录中的用户
w
# 或
who
总结
| 命令 | 作用 | 典型场景 |
|——|——|———|
| chmod | 修改权限 | 调整文件可读可写 |
| chown | 修改所有者 | 网站目录归属 |
| useradd | 创建用户 | 新增系统用户 |
| usermod | 修改用户 | 调整用户属性 |
| userdel | 删除用户 | 清理账号 |
| groupadd | 创建组 | 权限分组 |
| sudo | 提权执行 | 临时 root 权限 |
权限管理核心原则:最小权限原则——只给必要的权限,不多给。