在 Linux 服务器运维中,用户和权限管理是安全的第一道防线。很多服务器被入侵,根本原因就是权限配置不当——比如用 root 跑 Web 服务、目录权限 777 随便给。

今天这篇文章把 Linux 用户、用户组、文件权限的核心知识点串一遍,并给出生产环境的推荐配置。

一、用户和用户组基础

Linux 是多用户系统,每个进程都归属于一个用户。查看当前用户:

whoami
id

创建用户:

# 创建普通用户
useradd -m -s /bin/bash zhangsan

# 设置密码
passwd zhangsan

# 创建系统用户(不创建家目录,用于运行服务)
useradd -r -s /usr/sbin/nologin nginx

用户信息存储在 /etc/passwd,密码哈希在 /etc/shadow

二、文件权限三位一体

Linux 文件权限分三段:属主(u)属组(g)其他人(o)

ls -l
# -rwxr-xr-- 1 root www-data 4096 Jul 20 10:00 config.php
#  ^^^ ^^^ ^^^
#   u   g   o

每段三个位:读(r=4)、写(w=2)、执行(x=1)。

常用命令:

# 数字方式
chmod 755 script.sh     # rwxr-xr-x
chmod 644 config.php    # rw-r--r--
chmod 600 id_rsa        # rw-------

# 符号方式
chmod u+x script.sh     # 属主加执行
chmod g-w file.txt      # 属组去写
chmod o= file.txt       # 其他人无权限

三、chown 更改归属

# 改属主
chown zhangsan file.txt

# 改属主和属组
chown zhangsan:www-data /var/www/html

# 递归修改(慎用!)
chown -R www-data:www-data /var/www/html

四、生产环境最佳实践

1. 永远不要用 root 运行 Web 服务

# 为每个网站创建独立用户
useradd -r -s /usr/sbin/nologin site-a
chown -R site-a:site-a /var/www/site-a

2. 最小权限原则

  • Web 目录:755(目录)/ 644(文件)
  • 上传目录:755,属主为 Web 用户
  • 配置文件(含密码):600,属主为 Web 用户
  • SSH 私钥:600

3. sudo 精细化授权

不要直接给 sudo su,而是精确授权:

visudo
# 添加:
zhangsan ALL=(ALL) /usr/bin/systemctl restart nginx

4. 定期检查异常权限

# 查找 777 文件
find / -type f -perm 0777 2>/dev/null

# 查找无属主文件(可能来自已删除用户)
find / -nouser -o -nogroup 2>/dev/null

# 查找 SUID 文件(潜在提权风险)
find / -perm -4000 -type f 2>/dev/null

五、特殊权限位

# SUID:以文件属主身份执行
chmod u+s /usr/bin/passwd   # 普通用户也能改密码

# SGID:继承目录属组
chmod g+s /shared           # 目录内新文件自动继承组

# Sticky:只有属主能删除
chmod +t /tmp               # /tmp 标准配置

总结

权限管理没什么高深的理论,关键是要养成习惯:建用户不偷懒、给权限不手松、查异常要定期。把基础打牢,能挡住 80% 的安全问题。