Linux(二)用户和文件权限
Linux(二)用户和文件权限
1.用户和用户组
一、用户(User)
什么是liunx用户 :本质就是可以登录系统并使用系统资源(如运行程序、操作文件)的实体。使用操作系统的人都是用户。
作用
-
身份标识: 区分不同的使用者(如
alice,bob,www-data,mysql)。 -
权限控制: 每个文件和进程都有“所有者”。文件的所有者决定了谁可以修改该文件的权限或删除它。进程的运行身份决定了它能访问哪些资源。
-
资源隔离: 确保不同用户的数据和操作环境相对独立和安全。
-
审计: 系统日志可以记录哪个用户执行了特定操作。
类型
- 超级用户(root):UID为0,拥有系统级最高权限,可执行所有操作(如修改系统配置、访问任意文件)
- 系统用户(伪用户):UID范围通常为1-999(不同系统可能略有差异),用于运行系统服务(如
bin、daemon),默认无法登录 - 普通用户:UID≥1000,由管理员创建,权限受限,仅能访问授权资源
二、用户组(Group)
什么是Linux 用户组 :一组用户的集合。它是一种逻辑分组机制,用于简化权限管理。用户组就是是具有相同系统权限的一组用户
作用
- 简化权限分配:简化权限管理,允许将相同权限批量分配给组内成员,而非逐个用户设置。
类型
- 基本组(私有组):用户创建时自动生成,与用户名相同,每个用户仅有一个基本组。
- 附加组(公有组):用户可加入多个附加组,继承组内权限(如
sudo组允许执行管理员命令)
用户与组的关系:
- 主组 (Primary Group): 每个用户必须属于一个主组。用户创建文件时,文件的“属组”默认就是用户的主组。用户的主组信息存储在
/etc/passwd中。 - 附加组 (Supplementary Groups): 一个用户可以同时属于零个或多个附加组。用户获得这些附加组所拥有的权限。附加组成员关系存储在
/etc/group文件中。 - 总结: 用户和组的关系是多对多的。一个用户可以属于多个组;一个组可以包含多个用户。
2 配置文件
2.1 /etc/group - 用户组信息库
# 查看 /etc/group
[root@lavm-zo7f3xq5c6 ~]# cat /etc/group
# group_name:password:GID:user_list
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
ssh_keys:x:997:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
chrony:x:996:
jd:x:1000:jd
nscd:x:28:
ntp:x:38:
cgred:x:995:
docker:x:994:
字段说明:
| 字段 | 说明 |
|---|---|
group_name |
用户组名称(如 sudo, dev) |
password |
历史遗留字段(通常为 x 或空),真实密码存储在 /etc/gshadow |
GID |
用户组的唯一数字 ID(系统组:1-999,普通组:≥1000) |
user_list |
属于该组的附加成员列表(逗号分隔),不包含以该组为主组的用户 |
-
root组编号为0 -
1-499系统预留的编号 预留给安装的软件和服务的 -
用户手动创建的用户组从
500开始 -
组密码占位符都是
x -
如果组内只有一个用户,而且用户名和组名相同的话,是可以省略用户名的
2.2 /etc/gshadow - 用户组加密信息
[root@lavm-zo7f3xq5c6 ~]# cat /etc/gshadow
# group_name:encrypted_password:admins:members
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
mem:::
kmem:::
wheel:::
cdrom:::
mail:::postfix
man:::
dialout:::
floppy:::
games:::
tape:::
video:::
ftp:::
lock:::
audio:::
nobody:::
users:::
utmp:!::
utempter:!::
input:!::
systemd-journal:!::
systemd-network:!::
dbus:!::
polkitd:!::
ssh_keys:!::
sshd:!::
postdrop:!::
postfix:!::
chrony:!::
jd:!!::jd
nscd:!::
ntp:!::
cgred:!::
docker:!::
字段说明:
| 字段 | 说明 |
|---|---|
group_name |
用户组名称(与 /etc/group 对应) |
encrypted_password |
组密码(加密后),用于非成员用户临时加入该组(newgrp 命令)*为空 |
admins |
组管理员列表(逗号分隔),可添加/删除组成员 |
members |
组成员列表(逗号分隔),覆盖 /etc/group 中的成员 |
-
存放当前系统中用户组的密码信息
-
和
/etc/group中的记录一一对应
2.3 /etc/passwd - 用户账户信息文件
[root@lavm-zo7f3xq5c6 ~]# cat /etc/passwd
# username:password:UID:GID:GECOS:home_dir:shell
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
字段说明:
| 字段 | 说明 |
|---|---|
username |
用户登录名(如 root, alice) |
password |
密码占位符(x 表示真实密码在 /etc/shadow) |
UID |
用户唯一数字 ID(0=root, 系统用户:1-999, 普通用户:≥1000) |
GID |
用户的主组 ID(对应 /etc/group 中的 GID) |
GECOS |
用户备注信息(如全名、电话,逗号分隔) |
home_dir |
用户主目录路径(如 /home/alice) |
shell |
用户默认 Shell(如 /bin/bash, /usr/sbin/nologin) |
- 存储当前系统中所有用户的信息
2.4 /etc/shadow - 用户安全信息文件
cat /etc/shadow
# username:encrypted_password:lastchg:min:max:warn:inactive:expire:reserved
root:$6$KRlxyfFB$jw.j4L6boxyU3QulNeVOI4KycxRd0fQ2.NMBMP69/Lz1/Uk0MTJGuNi.HPpVbt1q1OjdvWdoZkCxjHBTIr7l10:20238:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::
shutdown:*:17834:0:99999:7:::
halt:*:17834:0:99999:7:::
mail:*:17834:0:99999:7:::
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
systemd-network:!!:17942::::::
dbus:!!:17942::::::
polkitd:!!:17942::::::
sshd:!!:17942::::::
postfix:!!:17942::::::
chrony:!!:17942::::::
nscd:!!:17942::::::
ntp:!!:18058::::::
关键字段说明:
| 字段 | 说明 |
|---|---|
username |
用户登录名(与 /etc/passwd 对应) |
encrypted_password |
加密后的密码(格式:$id$salt$hash,如 $6$abc... 表示 SHA-512) |
lastchg |
上次修改密码的天数(从 1970-01-01 起) |
min |
密码最小使用天数(0=可随时修改) |
max |
密码最大有效期(99999=永不过期) |
warn |
密码到期前警告天数(7=提前7天警告) |
inactive |
密码过期后账户宽限天数(到期后仍可登录,超时则锁定) |
expire |
账户绝对过期日期(从 1970-01-01 起的天数,空=永不过期) |
- 存放当前系统中所有用户的密码信息
3. 用户命令
| 命令 | 作用 | 常用参数 | 示例 |
|---|---|---|---|
whoami |
显示当前用户名 | 无 | whoami → root |
id |
显示用户身份信息 | -u(UID), -g(GID) |
id alice → UID=1001, GID=1001 |
su |
切换用户身份 | - (加载环境变量) |
su - alice → 切换到alice用户 |
sudo |
以超级用户权限执行命令 | -i (登录shell) |
sudo apt update → root权限更新 |
passwd |
修改用户密码 | -l (锁定), -u (解锁) |
passwd alice → 修改alice的密码 |
groups |
显示用户所属组 | 无 | groups bob → bob : sudo dev |
last |
显示用户登录历史 | -n (行数) |
last alice → alice的登录记录 |
1. 显示登录的用户名
[root@lavm-zo7f3xq5c6 ~]# whoami
root
2. 显示用户身份信息
[root@lavm-zo7f3xq5c6 ~]# id root
uid=0(root) gid=0(root) 组=0(root)
3. 切换用户
su - alice # 切换到 alice 用户并加载其环境
Password: # 输入 alice 的密码
alice@host:~$
4. 以超级用户权限执行命令
# 查看系统日志
sudo tail -f /var/log/syslog
5. 显示用户所属组
[root@lavm-zo7f3xq5c6 ~]# groups root
root : root
6. 显示用户登录历史
[root@lavm-zo7f3xq5c6 ~]# last
root pts/1 173.41.142.189 Mon Jun 9 11:22 still logged in
root pts/0 173.41.143.189 Mon Jun 9 11:22 still logged in
4. 用户和用户组操作
4.1 添加用户组
# 语法
groupadd [选项] 组名
# 选项
# -g GID: 指定组ID (默认自动分配)
# -r: 创建系统组 (GID < 1000)
#示例
groupadd developers # 创建普通组
groupadd -g 1500 testers # 创建指定GID的组
groupadd -r apache # 创建系统组
# 使用
groupadd developers
# 查看
[root@lavm-zo7f3xq5c6 ~]# cat /etc/group | grep developers
developers:x:1001:
4.2 修改用户组名称
# 语法
groupmod -n 新组名 旧组名
# 示例
groupmod -n dev-team developers # 重命名组
# 查看
[root@lavm-zo7f3xq5c6 ~]# cat /etc/group | grep dev-team
dev-team:x:1001:
4.3 修改用户组编号
# 语法
groupmod -g 新GID 组名
# 示例
groupmod -g 2000 dev-team # 修改组ID
# 查看
[root@lavm-zo7f3xq5c6 ~]# cat /etc/group | grep dev-team
dev-team:x:2000:
4.4 创建分组并指定编号
# 语法
groupadd -g 指定GID 组名
# 示例
groupadd -g 3000 qa-team # 创建GID=3000的组
# 查看
[root@lavm-zo7f3xq5c6 ~]# cat /etc/group | grep qa-team
qa-team:x:3000:
4.5 删除用户组
# 语法
groupdel 组名
# 不能删除用户的主组
# 示例
groupdel qa-team # 删除组
4.6 添加用户
#语法
useradd [选项] 用户名
| 选项 | 作用 | 示例值 |
|---|---|---|
-d |
指定主目录 | /home/alice |
-g |
指定主组 | developers |
-G |
指定附加组 | sudo,www-data |
-s |
指定登录Shell | /bin/bash |
-u |
指定UID | 1500 |
-m |
创建主目录 | (无参数值) |
-r |
创建系统用户 | (无参数值) |
# 示例
useradd -g dev-team zhangsan #创建用户并指定用户组
# 查看
[root@lavm-zo7f3xq5c6 ~]# id zhangsan
uid=1000(zhangsan) gid=2000(dev-team) 组=2000(dev-team)
4.7 指定个人文件夹
#语法
usermod -d 新目录 -m 用户名 # -m移动现有文件
# 创建用户并指定家目录
useradd -d /home/wangwu wangwu
# 指定wangwu2
usermod -d /home/wangwu2 wangwu
4.8 修改用户组
#语法
usermod [选项] 用户名
| 操作 | 命令格式 |
|---|---|
| 修改主组 | usermod -g 新主组 用户名 |
| 替换所有附加组 | usermod -G 组1,组2 用户名 |
| 追加附加组 | usermod -aG 追加组 用户名 |
| 修改UID | usermod -u 新UID 用户名 |
usermod -g dev-team alice # 修改主组
usermod -G docker,nginx alice # 替换附加组
usermod -aG sudo alice # 追加sudo组
usermod -u 2001 alice # 修改UID
4.9 删除用户
# 语法
userdel [选项] 用户名
# 选项
# -r: 同时删除主目录和邮件
# -f: 强制删除(即使已登录)
userdel -r alice # 完全删除用户及目录
5 .文件权限
[root@lavm-zo7f3xq5c6 /]# ll
总用量 16
lrwxrwxrwx. 1 root root 7 2月 15 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 5月 30 16:03 boot
drwxr-xr-x 19 root root 3000 5月 30 16:06 dev
drwxr-xr-x. 79 root root 8192 6月 9 16:17 etc
drwxr-xr-x. 5 root root 46 6月 9 15:31 home
-rw------- 1 root root 327059968 6月 1 14:06 net-tools-image.tar
# 权限结构解析
-rwxr-xr-- 1 user group 4096 Jan 1 10:00 file.txt
↑ ┬ ┬ ┬ ↑ ↑ ↑ ↑ ↑ ↑
│ │ │ │ │ │ │ │ │ └─ 文件名
│ │ │ │ │ │ │ │ └─ 修改时间
│ │ │ │ │ │ │ └─ 文件大小(字节)
│ │ │ │ │ │ └─ 所属组
│ │ │ │ │ └─ 所有者
│ │ │ │ └─ 链接数
│ │ │ └─ 其他人权限 (r--)
│ │ └─ 所属组权限 (r-x)
│ └─ 所有者权限 (rwx)
└─ 文件类型(-:普通文件,d:目录,l:链接)
5.1 文件基本权限
- 权限类型:
r(读):查看文件内容/列目录清单(对目录)w(写):修改文件内容/在目录增删文件(对目录)x(执行):运行程序/进入目录(对目录)
- 权限归属:
属主(u):文件所有者属组(g):文件所属用户组其他用户(o):既非属主也非属组成员的用户
ls -l 文件名 # 示例:-rwxr-xr-- 表示属主有rwx,属组有r-x,其他用户有r--
5.2 基本权限的修改
符号模式:
#u :表示当前用户
#g:所属组
# O:其他用户
## 所有用户(a)添加写权限
chmod [ugoa][+-=][rwx] 文件
示例:
# u :表示用户
# + :添加
# x:(执行)
chmod u+x data.txt # 为所有者添加执行权限
# g :所属组
# - :删除
# w写
chmod g-w data.txt # 移除所属组的写权限
chmod a=rwx data.txt # 所有用户设为 rwx
数字表示法(常用):
# 权限数据
# r:4
# w:2
# x:1
# 7= r+w+x
chmod 755 data1.txt # rwxr-xr-x (7=rwx, 5=r-x)
chmod 644 data1.txt # rw-r--r--
递归修改(目录及内容):
chmod -R 755 目录/
5.3 权限的作用
1 文件权限
| 权限 | 含义 | 示例操作 |
|---|---|---|
r |
读取文件内容:允许查看文件内容(如 cat、less、head、tail)。 |
cat example.txt |
w |
修改文件内容:允许编辑文件内容(需配合目录的 w 权限才能删除文件)。 |
vim example.txt |
x |
执行文件:允许运行文件(如脚本、二进制程序)。 | ./script.sh |
关键点:
- 文件的
w权限仅允许修改内容,删除文件需目录的w权限。 - 文件默认权限为
644(rw-r--r--),即所有者可读写,其他用户只读。
2 目录权限
| 权限 | 含义 | 示例操作 |
|---|---|---|
r |
列出目录内容:允许查看目录中的文件列表(如 ls)。 |
ls /home/user |
w |
修改目录结构:允许在目录中创建、删除、重命名文件或子目录。 | touch file.txt、rm file.txt |
x |
进入目录:允许访问目录内的元数据和文件(如 cd)。 |
cd /home/user |
关键点:
- 目录的
w权限是最关键的操作权限,即使没有r权限,只要目录有x权限,用户仍可进入目录并操作文件(需知道文件名)。 - 目录默认权限为
755(rwxr-xr-x),即所有者可完全控制,其他用户可读和执行。
3. 总结
权限修改命令及效果
| 命令 | 权限解析 | 结果 |
|---|---|---|
chmod 750 folder |
7 (rwx) 所有者, 5 (r-x) 组, 0 (---) 其他 → 仅所有者可完全控制目录 |
目录权限:drwxr-x--- |
chmod 640 folder/1.txt |
6 (rw-) 所有者, 4 (r--) 组, 0 (---) 其他 → 所有者可读写,其他无权限 |
文件权限:-rw-r----- |
chmod 754 folder |
7 (rwx) 所有者, 5 (r-x) 组, 4 (r--) 其他 → 所有者可完全控制,其他可读 |
目录权限:drwxr-xr-- |
chmod 755 folder |
7 (rwx) 所有者, 5 (r-x) 组, 5 (r-x) 其他 → 开放公共访问 |
目录权限:drwxr-xr-x |
chmod 644 folder/1.txt |
同上(恢复默认文件权限) | 文件权限:-rw-r--r-- |
chmod 646 folder/1.txt |
6 (rw-) 所有者, 4 (r--) 组, 6 (rw-) 其他 → 其他用户可读写文件 |
文件权限:-rw-rw-r-- |
chmod 757 folder |
7 (rwx) 所有者, 5 (r-x) 组, 7 (rwx) 其他 → 过度开放权限 |
目录权限:drwxr-xrwx(不推荐) |
- 文件权限:
rwx控制内容访问,x是执行关键。 - 目录权限:
rwx控制结构操作,x是进入目录的关键。 - 安全原则:遵循最小权限原则,避免过度开放权限(如
777)。
6. 默认权限
1 umask(权限掩码)
功能:控制新创建文件/目录的默认权限,通过“屏蔽”部分权限实现。
#查看当前 umask
umask # 输出示例:0022
结构解析:
- 第一位
0:文件特殊权限(SetUID/SetGID/Sticky Bit) - 后三位
022:文件/目录的基础 umask 值
2 文件默认权限规则
| 规则 | 说明 |
|---|---|
| 最大权限 | 666(rw-rw-rw-) |
| 不可执行原则 | 新建文件默认无 x 权限(安全机制) |
| 计算方式 | 文件权限 = 666 - umask(需二进制按位减,非算术减) |
| 示例(umask=022) | 666 - 022 = 644 → rw-r--r--(非744!) |
3 目录默认权限规则
| 规则 | 说明 |
|---|---|
| 最大权限 | 777(rwxrwxrwx) |
| 计算方式 | 目录权限 = 777 - umask |
| 示例(umask=022) | 777 - 022 = 755 → rwxr-xr-x |
📌 关键区别:目录保留执行权限(
x),确保可进入
4 修改 umask 值
-
临时修改(仅当前会话有效):
umask 0002 # 新文件:664(rw-rw-r--),目录:775(rwxrwxr-x) -
永久修改:
vi /etc/profile # 在末尾添加: umask 0002 source /etc/profile # 立即生效
7. sudo权限
核心概念
root 授权普通用户执行特权命令的工具
- 操作对象:系统命令(需绝对路径)
- 配置文件:
/etc/sudoers(必须用visudo编辑!)
4.1 visudo 配置语法
# 语法
用户名 被管理主机=(可切换身份) 授权命令(绝对路径)
# 配置示例
# 1. 授权用户 stu2 以 root 身份执行所有命令:
stu2 ALL=(root) ALL
# 2. 授权组 admin 免密执行 apt 更新:
%admin ALL=(ALL) NOPASSWD: /usr/bin/apt update
# 3. 允许用户 bob 重启网络服务:
bob ALL=(root) /usr/bin/systemctl restart network
权限生效验证
# 检查 sudo 权限
sudo -l # 查看当前用户可执行的 sudo 命令
# 执行特权命令:
sudo /usr/bin/systemctl restart nginx # 需输入用户密码(除非配置NOPASSWD)
安全守则
- umask 推荐值:
- 普通用户:
0002(文件664,目录775) - 超级用户:
0022(文件644,目录755)
- 普通用户:
- sudo 最小化授权:
- 禁止无限制
ALL权限(如必须,则用NOPASSWD:需谨慎) - 命令路径必须为绝对路径(防止路径劫持)
- 禁止无限制
通过
visudo -c可检查配置文件语法是否正确
浙公网安备 33010602011771号