Linux下的权限控制
Linux下的权限控制
Linux 权限基础概念
在 Linux 中,权限控制是基于文件(file)和目录(directory)来实现的,权限由三组组成:
- **User (u)**:文件的拥有者(Owner)
- **Group (g)**:文件所属用户组
- **Others (o)**:除拥有者和所属组外的其他用户
每组有 3 种权限:
权限 | 符号 | 对文件的作用 | 对目录的作用 |
---|---|---|---|
读 | r | 读取文件内容 | 列出目录内容(ls) |
写 | w | 修改文件内容 | 增删文件(即修改目录结构) |
执行 | x | 执行文件 | 进入目录(cd) |
权限示例:
1 | drwxr-xr-- |
d
→ 类型:目录 (directory)rwx
→ 用户 (u) 权限:读、写、执行r-x
→ 用户组 (g) 权限:读、执行(不能修改目录内容)r--
→ 其他人 (o) 权限:只读
chmod / chown / chgrp 的作用与用法
chmod — 改变权限
两种方式:
数字模式
r = 4
,w = 2
,x = 1
,三者相加示例:
1
chmod 755 mydir
表示:
- 用户:
7
= 4+2+1 = rwx - 用户组:
5
= 4+0+1 = r-x - 其他人:
5
= r-x
- 用户:
符号模式
u
用户、g
用户组、o
其他人、a
全部+
添加权限、-
去掉权限、=
精确设置示例:
1
2
3chmod u+w mydir # 给用户增加写权限
chmod g-x mydir # 去掉用户组的执行权限
chmod a=r mydir # 所有人只读
chown — 改变文件/目录的拥有者
格式:
1
chown [新用户]:[新用户组] 文件/目录
示例:
1
2
3chown root:root mydir # 修改拥有者为 root 用户和 root 组
chown alice myfile # 修改拥有者为 alice(组不变)
chown :developers mydir # 修改所属组为 developers(用户不变)
chgrp — 改变文件/目录的所属组
只改组:
1
chgrp developers mydir
常见误区
- 目录的 w 权限 ≠ 能修改文件内容
- 目录的
w
是允许增加/删除文件,文件内容权限由文件本身决定。
- 目录的
- 目录的 x 权限很重要
- 没有执行权限,即使有读权限,也无法进入目录。
- chmod 777 并不是万能解
- 它会让任何人完全访问目录,风险极高,只适合临时测试环境。
Linux 中的“用户”和“服务用户”是什么
在 Linux 中,用户(user)不仅仅是人登录时用的账号,比如
root
、alice
。服务(nginx、mysql、docker 等)通常也会以独立的系统用户运行(即“服务用户”)。
例如:
1
ps -ef | grep nginx
你会看到 nginx 的进程是
nginx
用户运行的,而不是 root:1
nginx 1234 1 0 08:00 ? 00:00:00 nginx: worker process
这样做是权限最小化原则:即便被攻击,危害范围也小。
所以服务也是“用户”,只不过是系统用户(一般没有登录权限),也可以叫“角色”或“账号”。
找到谁在使用目录/文件
方法 1:用 ls -l
看文件属主
1 | ls -ld /path/to/dir_or_file |
例子:
1 | drwxr-x--- 2 mysql mysql 4096 Aug 15 08:00 /var/lib/mysql |
- 属主:mysql
- 所属组:mysql
→ 表示这个文件(或目录)默认是mysql
用户访问的。
方法 2:用 lsof
查看哪个进程在占用
1 | lsof /path/to/dir_or_file |
例子:
1 | COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME |
USER
列显示运行该进程的用户(mysql)- 你就知道是 mysql 服务在用它
方法 3:用 fuser
快速查看
1 | fuser -v /path/to/dir_or_file |
输出:
1 | USER PID ACCESS COMMAND |
USER
→ 占用该文件/目录的用户COMMAND
→ 占用它的程序
方法 4:查服务运行用户
如果你已经知道是某个服务(比如 nginx),可以直接查它运行的用户:
1 | ps -u -p $(pidof nginx) |
或者看 systemd 配置:
1 | systemctl cat nginx | grep -i user |
一般处理流程
- ls -l 确认文件或目录的属主和权限
- 如果是进程占用导致的权限冲突,用 lsof / fuser 找进程 → 确认运行用户
- 结合服务配置(systemctl / 配置文件),确认它是以哪个系统用户运行的
- 决定是:
- 修改文件权限(
chmod
) - 修改属主(
chown
) - 或让服务用合适的用户运行
- 修改文件权限(
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment