Linux用户管理与文件权限完全指南:用户/组管理、权限解读、chmod/chown实战
前言
Linux是一个多用户、多任务的操作系统,其安全性的核心就是用户账户和文件权限机制。每个用户登录系统时都会被分配唯一的用户ID(UID),系统通过UID和GID(组ID)来控制用户对文件、目录和设备的访问权限。
本文将系统讲解Linux安全机制、用户和组的管理命令、文件权限的解读与修改,并通过完整的练习题带你从零实战。所有知识点均配有Xshell实操命令,截图清单精简后列在文末。
一、理解Linux的安全性
1.1 用户账户与UID
Linux安全系统的核心是用户账户。每个能进入Linux系统的用户都会被分配唯一的用户账户。用户对系统中各种对象的访问权限取决于他们登录时用的账户。
用户权限通过用户ID(UID)来跟踪:
root用户:UID为0,是系统管理员,拥有最高权限
系统用户:UID为1-499(或1-999),供后台服务使用,并非真实用户
普通用户:UID从500(或1000)开始分配
bash
查看用户的UID
id
或
id username
1.2 /etc/passwd —— 用户账户文件
Linux使用/etc/passwd文件将登录名匹配到对应的UID值。每行以:分隔为7个字段:
字段 含义
1 用户名
2 密码占位符(x表示密码存储在/etc/shadow中)
3 UID(用户ID)
4 GID(组ID)
5 描述性信息(备注字段)
6 HOME目录位置
7 默认Shell
bash
查看/etc/passwd文件
cat /etc/passwd
查看特定用户信息
grep “username” /etc/passwd
1.3 /etc/shadow —— 密码文件
只有root用户才能访问/etc/shadow文件,它存储着加密后的用户密码和密码管理信息。
bash
查看shadow文件(需root权限)
sudo cat /etc/shadow
9个字段的含义:
用户名
加密后的密码
上次修改密码后过去的天数(自1970年1月1日算起)
多少天后才能更改密码
多少天后必须更改密码
密码过期前提前多少天提醒
密码过期后多少天禁用账户
账户被禁用的日期
预留字段
1.4 如何登录root用户
bash
切换到root用户
su root
或
su -
退出root
exit
修改root密码(也可以修改其他用户密码)
sudo passwd
或修改指定用户密码
sudo passwd username
二、管理用户
2.1 添加新用户
Linux中添加用户主要有两种命令:useradd 和 adduser。
useradd命令
useradd使用系统默认值及命令行参数来设置用户账户。
bash
查看默认配置
cat /etc/default/useradd
最常用:创建用户并生成HOME目录
sudo useradd -m username
设置HOME目录、Shell和组
sudo useradd -m -d /home/username -s /bin/bash -g groupname username
不添加任何参数(创建"三无"用户)
sudo useradd test
这样创建的用户:无HOME目录、无密码、无Shell
useradd常用参数:
参数 含义
-m 创建用户的HOME目录
-d 目录 指定HOME目录路径
-s Shell 指定默认Shell(如/bin/bash)
-g 组名 指定主组
-c “描述” 添加备注信息
-e 日期 设置账户过期日期(YYYY-MM-DD)
adduser命令
adduser以人机对话方式创建用户,会提示输入密码等信息,更加友好。
bash
交互式创建用户
sudo adduser username
💡 区别:useradd是底层命令,adduser是交互式脚本,两者都能完成用户创建。实际使用中任选其一即可。
2.2 删除用户
bash
仅删除用户信息(保留HOME目录和文件)
sudo userdel username
删除用户及其HOME目录和邮件目录
sudo userdel -r username
⚠️ 注意:删除用户的HOME目录前一定要检查有无重要文件!
2.3 修改用户信息
usermod命令可以在创建完新用户后修改用户信息。
bash
修改备注字段
sudo usermod -c “新的描述信息” username
修改登录名
sudo usermod -l newname oldname
修改主组
sudo usermod -g groupname username
锁定账户(用户无法登录)
sudo usermod -L username
解锁账户
sudo usermod -U username
修改用户HOME目录
sudo usermod -d /new/home username
密码管理相关命令:
bash
修改当前用户密码
passwd
root修改指定用户密码
sudo passwd username
强制用户下次登录时修改密码
sudo passwd -e username
批量修改密码
echo “username:newpassword” | sudo chpasswd
其他专用工具:
命令 功能
chsh 修改默认登录Shell(需用完整路径)
chfn 修改备注字段信息
chage 管理用户账户有效期
bash
修改Shell
sudo chsh -s /bin/bash username
修改备注信息
sudo chfn username
修改账户过期日期
sudo chage -e 2025-12-31 username
三、管理用户组
3.1 理解用户组
组(Group)是为了方便管理用户——同一组内不同用户之间的文件可能互相同享。
在Ubuntu等发行版中,系统为每个用户单独创建一个组(组名与用户名相同),这种方案更加安全。
bash
查看用户组信息
cat /etc/group
或查看特定用户
grep username /etc/group
/etc/group文件的4个字段:
字段 含义
1 组名
2 组密码(通常为x)
3 GID(组ID)
4 属于该组的用户列表
3.2 创建和修改组
bash
创建新组
sudo groupadd groupname
修改组GID
sudo groupmod -g 新GID oldGID
修改组名
sudo groupmod -n 新组名 旧组名
将用户添加到组(附加组)
sudo usermod -G groupname username
将用户设为主组
sudo usermod -g groupname username
💡 注意:-G是追加到附加组(原有组仍在);-g是更改主组(替换)。
四、理解文件权限
4.1 ls -l 输出解读
bash
ls -l
输出示例:-rw-r–r-- 1 owner group 1024 Jan 1 10:00 filename
第一个字段(10个字符) 的含义:
位置 含义
第1字符 文件类型:-文件,d目录,l链接,c字符设备,b块设备
第2-4字符 文件所有者的权限(rwx)
第5-7字符 文件所属组的权限(rwx)
第8-10字符 其他用户的权限(rwx)
r=读,w=写,x=执行,-=无权限
示例解读:-rw-r–r–
-:这是一个普通文件
rw-:所有者有读和写权限(无执行)
r–:所属组只有读权限
r–:其他用户只有读权限
4.2 八进制权限表示法
权限 二进制 八进制
— 000 0
–x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
bash
三种权限合在一起
chmod 755 file # 所有者rwx(7),所属组r-x(5),其他r-x(5)
chmod 644 file # 所有者rw-(6),所属组r–(4),其他r–(4)
4.3 umask —— 默认权限掩码
umask定义了新建文件和目录的默认权限。
bash
查看当前umask值
umask
输出示例:0022
文件默认权限 = 666 - umask
目录默认权限 = 777 - umask
当umask=022时:
文件权限 = 666 - 022 = 644 (rw-r–r–)
目录权限 = 777 - 022 = 755 (rwxr-xr-x)
bash
设置新的umask值(临时)
umask 027
永久设置:写入 ~/.bashrc 或 /etc/profile
五、更改文件权限和所属关系
5.1 chmod —— 更改文件权限
八进制模式:
bash
设置文件权限为755(所有者rwx,组r-x,其他r-x)
chmod 755 filename
递归修改目录及所有子文件
chmod -R 755 directory/
使用通配符批量修改
chmod 644 *.txt
符号模式:
格式:chmod [u/g/o/a][+/-/=][rwx] filename
符号 含义
u 所有者(user)
g 所属组(group)
o 其他用户(others)
a 所有用户(all)
- 增加权限
- 移除权限
= 设置权限
bash
给所有者增加执行权限
chmod u+x file
给所属组增加读写权限
chmod g+rw file
移除其他用户的执行权限
chmod o-x file
设置所有用户为读写权限
chmod a=rw file
递归给所有用户增加读写权限
chmod -R ugo+rw directory/
5.2 chown —— 更改文件所有者
bash
更改文件所有者
sudo chown username filename
只更改所属组(带冒号)
sudo chown :groupname filename
同时更改所有者和所属组
sudo chown username:groupname filename
递归更改目录及所有子文件
sudo chown -R username:groupname directory/
⚠️ 注意:只有root用户才能改变文件所有者。文件所有者可以改变文件的所属组,但前提是所有者必须是原所属组和目标所属组的成员。
5.3 chgrp —— 更改文件所属组
bash
只更改文件的所属组
sudo chgrp groupname filename
递归更改
sudo chgrp -R groupname directory/
六、实现共享文件
Linux系统上共享文件的方法:创建组,将用户加入组,使组内所有成员享有同等的文件权限。
实现步骤:
bash
1. 创建共享组
sudo groupadd shared_group
2. 将用户加入组
sudo usermod -G shared_group user1
sudo usermod -G shared_group user2
3. 创建共享目录,设置组权限
mkdir /home/shared_dir
sudo chgrp -R shared_group /home/shared_dir
4. 设置目录权限,让组内成员可读写
sudo chmod -R 770 /home/shared_dir
或使用符号模式
sudo chmod -R g+rwx /home/shared_dir
💡 小贴士:在Linux中,目录底色为绿色通常表示该目录对其他用户可访问(权限为777),是系统的一种颜色标记提醒。
七、知识框架体系
📚 用户管理框架
text
用户管理
├── 用户信息文件
│ ├── /etc/passwd → 用户账户信息(7个字段)
│ └── /etc/shadow → 加密密码(9个字段,仅root可见)
├── 添加用户
│ ├── useradd(命令行参数)
│ │ └── -m -d -s -g -c -e
│ └── adduser(交互式)
├── 删除用户
│ ├── userdel username(保留HOME)
│ └── userdel -r username(删除HOME)
├── 修改用户
│ ├── usermod → 修改用户信息
│ ├── passwd → 修改密码
│ ├── chsh → 修改Shell
│ ├── chfn → 修改备注
│ └── chage → 管理有效期
└── 切换用户
├── su username → 切换用户
└── exit → 退出
📚 组管理框架
text
组管理
├── 组信息文件
│ └── /etc/group(4个字段)
├── 添加组
│ └── groupadd groupname
├── 修改组
│ ├── groupmod -g GID 组名 → 修改GID
│ └── groupmod -n 新名 旧名 → 修改组名
└── 用户加组
├── usermod -g 组名 → 改主组
└── usermod -G 组名 → 加附加组
📚 文件权限框架
text
文件权限
├── 权限类型:r(读),w(写),x(执行)
├── 三级安全:所有者(u),所属组(g),其他用户(o)
├── 查看:ls -l
│ └── -rwxr-xr-x → 10个字符解析
├── 权限值:八进制(0-7)
├── 默认权限:umask
│ ├── 文件 = 666 - umask
│ └── 目录 = 777 - umask
├── 修改权限
│ ├── chmod(八进制/符号模式)
│ │ ├── 八进制:chmod 755 file
│ │ └── 符号:chmod u+rwx,g+rx,o+rx file
│ └── chmod -R → 递归修改
├── 修改所有者
│ ├── chown username:group file
│ └── chgrp groupname file
└── 共享目录
├── 创建组 → 添加用户 → 设置组权限
└── chmod 770 directory
第八部分:练习题(必做)
以下练习来自PPT要求,请按步骤完成。
练习题完整流程
Step 1:创建新用户并设置密码
bash
sudo useradd -m -s /bin/bash testuser
sudo passwd testuser
查看用户是否存在
grep testuser /etc/passwd
Step 2:修改备注字段
bash
sudo usermod -c “测试用户-张三” testuser
验证
grep testuser /etc/passwd
Step 3:创建新组并加入用户
bash
创建组
sudo groupadd team_group
将用户加入组
sudo usermod -G team_group testuser
验证
grep testuser /etc/group
修改组名
sudo groupmod -n new_team_group team_group
Step 4:创建文件并查看权限
bash
切换到testuser
su - testuser
创建测试文件和目录
touch test.txt
mkdir test_dir
查看权限
ls -l
Step 5:修改权限实现组内共享
bash
退出testuser,回到root或有sudo权限的用户
exit
修改文件和目录的组及权限
sudo chgrp -R new_team_group /home/testuser/test.txt /home/testuser/test_dir
sudo chmod -R g+rwx /home/testuser/test.txt /home/testuser/test_dir
查看结果
ls -l /home/testuser/
Step 6:删除用户(可选保留)
bash
如要彻底删除
sudo userdel -r testuser
或保留用户
不执行删除
第九部分:截图清单