Linux权限模型
用户与组
用户和组分别用 UID 和 GID 表示,一个用户可以同时属于多个组,默认每个用户必属于一个与之 UID 同值同名的 GID。
系统保存用户信息的文件是 /etc/passwd ,保存组信息的文件是 /etc/group ,保存密码口令及其变动信息的文件是 /etc/shadow 。
文件权限标识
| 权限 | 含义(文件) | 含义(目录) |
|---|---|---|
r(read) | 读取文件内容 | 查看目录列表 |
w(write) | 修改文件内容 | 创建、删除、重命名文件 |
x(execute) | 执行文件 | 进入目录 |
常见的文件标识方法比如举例
-rwx r-x –x
第1位如果是d则代表目录,是-则代表普通文件。
rwx是owner(所有者)权限:读写执行
r-x是group(对应组)权限:读和执行
–x是others(其余人)权限:仅执行
然后也可以用数字标识
rwx对应111 —对应000
故而755即是-rwxr-xr-x
常用命令
chmod
基本格式:
chmod [权限] 文件名
例如:
chmod 755 test.sh
表示将 test.sh 权限修改为:
-rwxr-xr-x
1.数字(见上)
2.符号
格式:
chmod [对象][操作][权限] 文件
对象:
| 符号 | 含义 |
|---|---|
| u | user,所有者 |
| g | group,所属组 |
| o | others,其他用户 |
| a | all,所有人 |
(省略掉的话约等于a,比如chmod +x 文件)
操作:
| 符号 | 作用 |
|---|---|
| + | 添加权限 |
| – | 删除权限 |
| = | 设置为指定权限 |
- 添加执行权限
例如:
chmod u+x script.sh
含义:
给 owner 添加执行权限。
3.递归修改权限
使用:
chmod -R 权限 目录
例如:
chmod -R 755 website/
会修改:
website/
├── index.html
├── css/
└── js/
里面所有文件和目录。
注意:
-R 使用时要谨慎。
例如:
chmod -R 777 /
可能导致严重安全问题。
4.常见权限设置
| 场景 | 权限 | 命令 |
|---|---|---|
| 普通文件 | 644 | chmod 644 file |
| 可执行脚本 | 755 | chmod 755 script.sh |
| 私人文件 | 600 | chmod 600 secret |
| 私人目录 | 700 | chmod 700 dir |
| 共享目录 | 775 | chmod 775 dir |
chown
Linux 规定:
- root 可以修改任意文件 owner
- 普通用户通常只能修改自己拥有文件的某些属性
chown 用于修改文件或目录的所有者(owner),也可以同时修改所属组(group)。
基本格式:
chown [用户] 文件
例如:
sudo chown xiao test.txt
表示:
把 test.txt 的所有者改成用户 xiao。
同时修改所有者和组
格式:
chown 用户:组 文件
例如:
sudo chown xiao:developers project.txt
结果:
-rw-r--r-- 1 xiao developers project.txt
只修改组
虽然专门有 chgrp,但 chown 也可以:
sudo chown :developers file
注意冒号:
用户:组
↑
空着
表示:
不改 owner,只改 group。
等价于:
chgrp developers file
递归修改目录
和 chmod 一样:
chown -R 用户:组 目录
chgrp
chgrp 用于修改文件或目录的所属组(group)。
基本格式:
chgrp [组名] 文件
例如:
sudo chgrp developers project.txt
表示:
把 project.txt 的所属组改为 developers。
大致规则与前面chown基本同理
/etc/passwd / /etc/shadow / /etc/group 的结构
/etc/passwd
[Linux]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
...
在 passwd 文件中每条记录分别为:
- 用户名
- 密码口令(在 /etc/shadow 中加密保存)
- UID
- GID(默认 UID)
- 描述注释
- 主目录
- 登录 shell(第一个运行的程序)
/etc/shadow
[Linux]# cat /etc/shadow
root:$6$N3FOQjepEb0oy2FynGXqNTpH0eAWe4UF0:18843:0:99999:7:::
sshd:*:18843:0:99999:7:::
xiao:$6$u9TxaH3T.Ks.4wLeZgC9aEzBI8X7AYvW9:18843:0:99999:7:::
ftp:*:18843:0:99999:7:::
...
在 shadow 文件中每条记录分别为:
- 登录名
- 加密口令
$算法标识$参数/哈希盐$哈希结果
- 最后一次修改时间
- 最小时间间隔
- 最大时间间隔
- 警告时间
- 不活动时间
/etc/group
[Linux]$ cat /etc/group
root:x:0:
tty:x:5:
cdrom:x:24:xiao,da
ftp:x:113:
...
在 group 文件中每条记录分别为:
- 组名
- 密码口令(一般不存在组口令)
- GID
- 附加成员用户名列表(逗号分隔)
关于主组和附加组:主组决定用户的默认组身份,尤其影响新建文件的所属组;附加组用于扩展用户访问其他资源的权限。两者都会参与 Linux 的权限检查。