我的博客

Linux 文件权限和用户管理完全指南

学 Linux 一个月后,有个问题一直让我头疼:为什么有时候创建的文件别人看不了?为什么 apache 用户写不了我的文件?权限管理是 Linux 安全的核心,这个月终于认真学了一下。

文件权限基础

ls -l 看文件时,第一列就是权限:

$ ls -l
drwxr-xr-x  2 root root  4096 Jan 1 12:00 mydir
-rw-r--r--  1 user user   123 Jan 1 12:00 myfile.txt

第一列的 10 个字符含义:

  • 第 1 位:文件类型(- 普通文件,d 目录,l 符号链接)
  • 第 2-4 位:所有者(owner)权限:rwx
  • 第 5-7 位:所属组(group)权限:r-x
  • 第 8-10 位:其他人(other)权限:r-x

r=读(4), w=写(2), x=执行(1)。数字模式就是这三个数字的和:

chmod 755 file   # owner=rwx, group=rx, other=rx
chmod 644 file   # owner=rw-, group=r--, other=r--
chmod 600 file   # owner=rw-, group=---, other=---

目录权限的特殊之处

目录的 x 权限不是"执行",而是"允许进入该目录":

  • r 权限:可以 ls 列目录内容
  • w 权限:可以在目录里创建/删除文件
  • x 权限:可以 cd 进入目录

所以目录至少要有 rx 才能被正常访问,755 是目录的常用权限。

用户和用户组管理

# 查看当前用户
whoami

# 创建用户
sudo adduser newuser

# 创建用户组
sudo groupadd webdev

# 把用户添加到组
sudo usermod -aG webdev myname

# 查看用户属于哪些组
groups myname

# 修改文件所属组
sudo chown myname:webdev myfile

# 递归修改目录
sudo chown -R myname:webdev /var/www/html

实际场景:Web 服务器权限

你的 Web 目录需要让 www-data(Nginx/Apache 用户)可读,但你不希望所有人都能改写:

# 创建专门的管理组
sudo groupadd webmaster
sudo usermod -aG www-data myname
sudo usermod -aG webmaster myname

# 设置目录权限
sudo chown -R myname:webmaster /var/www/myblog
sudo chmod -R 750 /var/www/myblog

# 这样 myname 可以读写,webmaster 组成员可以读和执行,其他人无权限

特殊权限:SUID、SGID、Sticky Bit

SUID (chmod 4xxx)——程序运行时采用文件所有者的权限,典型例子是 /usr/bin/passwd

$ ls -l /usr/bin/passwd
-rwsr-xr-x  1 root root  12345 Jan 1  2026 /usr/bin/passwd

SGID (chmod 2xxx)——对目录设置后,在该目录下创建的文件继承目录的组。

Sticky Bit (chmod 1xxx)——目录里的文件只能被所有者删除。/tmp 就有这个权限:drwxrwxrwt

小技巧:umask

每次创建文件时默认的权限是由 umask 决定的:

# 查看当前 umask
umask
# 022 表示文件默认 644,目录默认 755

# 更安全的设置
umask 027  # 文件默认 640,目录默认 750

权限管理是 Linux 安全的基础,花时间弄明白绝对值得。现在我对之前那些"为什么不能读写了"的问题都有了答案。