首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux(二)用户和文件权限

Linux(二)用户和文件权限

原创
作者头像
落幕
发布2025-06-11 09:35:12
发布2025-06-11 09:35:12
1920
举报

Linux(二)用户和文件权限

1.用户和用户组

一、用户(User)

什么是liunx用户 :本质就是可以登录系统并使用系统资源(如运行程序、操作文件)的实体。使用操作系统的人都是用户。

作用

  • 身份标识: 区分不同的使用者(如 alice, bob, www-data, mysql)。
  • 权限控制: 每个文件和进程都有“所有者”。文件的所有者决定了谁可以修改该文件的权限或删除它。进程的运行身份决定了它能访问哪些资源。
  • 资源隔离: 确保不同用户的数据和操作环境相对独立和安全。
  • 审计: 系统日志可以记录哪个用户执行了特定操作。

类型

  • 超级用户(root):UID为0,拥有系统级最高权限,可执行所有操作(如修改系统配置、访问任意文件)
  • 系统用户(伪用户):UID范围通常为1-999(不同系统可能略有差异),用于运行系统服务(如bindaemon),默认无法登录
  • 普通用户:UID≥1000,由管理员创建,权限受限,仅能访问授权资源

二、用户组(Group)

什么是Linux 用户组:一组用户的集合。它是一种逻辑分组机制,用于简化权限管理。用户组就是是具有相同系统权限的一组用户

作用

  • 简化权限分配:简化权限管理,允许将相同权限批量分配给组内成员,而非逐个用户设置。

类型

  • 基本组(私有组):用户创建时自动生成,与用户名相同,每个用户仅有一个基本组。
  • 附加组(公有组):用户可加入多个附加组,继承组内权限(如sudo组允许执行管理员命令)

用户与组的关系:

  • 主组 (Primary Group): 每个用户必须属于一个主组。用户创建文件时,文件的“属组”默认就是用户的主组。用户的主组信息存储在 /etc/passwd 中。
  • 附加组 (Supplementary Groups): 一个用户可以同时属于零个或多个附加组。用户获得这些附加组所拥有的权限。附加组成员关系存储在 /etc/group 文件中。
  • 总结: 用户和组的关系是多对多的。一个用户可以属于多个组;一个组可以包含多个用户。

2 配置文件

2.1 /etc/group - 用户组信息库

代码语言:bash
复制
# 查看 /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 - 用户组加密信息

代码语言:bash
复制
[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 - 用户账户信息文件

代码语言:bash
复制
[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 - 用户安全信息文件

代码语言:bash
复制
 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

显示当前用户名

whoamiroot

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 bobbob : sudo dev

last

显示用户登录历史

-n (行数)

last alice → alice的登录记录

1. 显示登录的用户名

代码语言:bash
复制
[root@lavm-zo7f3xq5c6 ~]# whoami
root

2. 显示用户身份信息

代码语言:bash
复制
[root@lavm-zo7f3xq5c6 ~]# id root
uid=0(root) gid=0(root) 组=0(root)

3. 切换用户

代码语言:bash
复制
su - alice  # 切换到 alice 用户并加载其环境
Password:   # 输入 alice 的密码
alice@host:~$ 

4. 以超级用户权限执行命令

代码语言:bash
复制
# 查看系统日志
sudo tail -f /var/log/syslog

5. 显示用户所属组

代码语言:bash
复制
[root@lavm-zo7f3xq5c6 ~]# groups root
root : root

6. 显示用户登录历史

代码语言:bash
复制
[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 添加用户组

代码语言:bash
复制
# 语法
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 修改用户组名称

代码语言:bash
复制
# 语法
groupmod -n 新组名 旧组名
# 示例
groupmod -n dev-team developers  # 重命名组
# 查看 
[root@lavm-zo7f3xq5c6 ~]# cat /etc/group | grep dev-team
dev-team:x:1001:

4.3 修改用户组编号

代码语言:bash
复制
# 语法
groupmod -g 新GID 组名
# 示例
groupmod -g 2000 dev-team  # 修改组ID

# 查看
[root@lavm-zo7f3xq5c6 ~]# cat /etc/group | grep dev-team
dev-team:x:2000:

4.4 创建分组并指定编号

代码语言:bash
复制
# 语法
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 删除用户组

代码语言:bash
复制
# 语法
groupdel 组名
# 不能删除用户的主组
# 示例
groupdel qa-team  # 删除组

4.6 添加用户

代码语言:bash
复制
#语法
useradd [选项] 用户名

选项

作用

示例值

-d

指定主目录

/home/alice

-g

指定主组

developers

-G

指定附加组

sudo,www-data

-s

指定登录Shell

/bin/bash

-u

指定UID

1500

-m

创建主目录

(无参数值)

-r

创建系统用户

(无参数值)

代码语言:bash
复制
# 示例 
useradd -g dev-team zhangsan  #创建用户并指定用户组
# 查看
[root@lavm-zo7f3xq5c6 ~]# id zhangsan
uid=1000(zhangsan) gid=2000(dev-team) 组=2000(dev-team)

4.7 指定个人文件夹

代码语言:bash
复制
#语法
usermod -d 新目录 -m 用户名  # -m移动现有文件
  # 创建用户并指定家目录
useradd -d /home/wangwu wangwu 

# 指定wangwu2
usermod -d /home/wangwu2 wangwu

4.8 修改用户组

代码语言:bash
复制
#语法
usermod [选项] 用户名

操作

命令格式

修改主组

usermod -g 新主组 用户名

替换所有附加组

usermod -G 组1,组2 用户名

追加附加组

usermod -aG 追加组 用户名

修改UID

usermod -u 新UID 用户名

代码语言:bash
复制
usermod -g dev-team alice          # 修改主组
usermod -G docker,nginx alice      # 替换附加组
usermod -aG sudo alice             # 追加sudo组
usermod -u 2001 alice              # 修改UID

4.9 删除用户

代码语言:bash
复制
# 语法
userdel [选项] 用户名
# 选项
# -r: 同时删除主目录和邮件
# -f: 强制删除(即使已登录)
userdel -r alice  # 完全删除用户及目录

5 .文件权限

代码语言:bash
复制
[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):既非属主也非属组成员的用户
代码语言:bash
复制
ls -l 文件名  # 示例:-rwxr-xr-- 表示属主有rwx,属组有r-x,其他用户有r--

5.2 基本权限的修改

符号模式

代码语言:bash
复制
#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  

数字表示法(常用):

代码语言:bash
复制
# 权限数据
# 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--

递归修改(目录及内容):

代码语言:bash
复制
chmod -R 755 目录/

5.3 权限的作用

1 文件权限

权限

含义

示例操作

r

读取文件内容:允许查看文件内容(如 catlessheadtail)。

cat example.txt

w

修改文件内容:允许编辑文件内容(需配合目录的 w 权限才能删除文件)。

vim example.txt

x

执行文件:允许运行文件(如脚本、二进制程序)。

./script.sh

关键点

  • 文件的 w 权限仅允许修改内容,删除文件需目录的 w 权限
  • 文件默认权限为 644rw-r--r--),即所有者可读写,其他用户只读。
2 目录权限

权限

含义

示例操作

r

列出目录内容:允许查看目录中的文件列表(如 ls)。

ls /home/user

w

修改目录结构:允许在目录中创建、删除、重命名文件或子目录。

touch file.txtrm file.txt

x

进入目录:允许访问目录内的元数据和文件(如 cd)。

cd /home/user

关键点

  • 目录的 w 权限是最关键的操作权限,即使没有 r 权限,只要目录有 x 权限,用户仍可进入目录并操作文件(需知道文件名)。
  • 目录默认权限为 755rwxr-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(权限掩码)

功能:控制新创建文件/目录的默认权限,通过“屏蔽”部分权限实现。

代码语言:bash
复制
#查看当前 umask
umask  # 输出示例:0022

结构解析

  • 第一位 0:文件特殊权限(SetUID/SetGID/Sticky Bit)
  • 后三位 022:文件/目录的基础 umask 值
2 文件默认权限规则

规则

说明

最大权限

666(rw-rw-rw-)

不可执行原则

新建文件默认无 x 权限(安全机制)

计算方式

文件权限 = 666 - umask(需二进制按位减,非算术减)

示例(umask=022)

666 - 022 = 644rw-r--r--(非744!)

3 目录默认权限规则

规则

说明

最大权限

777(rwxrwxrwx)

计算方式

目录权限 = 777 - umask

示例(umask=022)

777 - 022 = 755rwxr-xr-x

📌 关键区别:目录保留执行权限(x),确保可进入

4 修改 umask 值
  • 临时修改(仅当前会话有效):
代码语言:bash
复制
umask 0002  # 新文件:664(rw-rw-r--),目录:775(rwxrwxr-x)
  • 永久修改
代码语言:bash
复制
 vi /etc/profile  # 在末尾添加: umask 0002
  source /etc/profile  # 立即生效

7. sudo权限

核心概念

root 授权普通用户执行特权命令的工具

操作对象:系统命令(需绝对路径) 配置文件:/etc/sudoers(必须用 visudo 编辑!)

4.1 visudo 配置语法
代码语言:bash
复制
# 语法
用户名 被管理主机=(可切换身份) 授权命令(绝对路径)

# 配置示例
# 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

权限生效验证

代码语言:bash
复制
# 检查 sudo 权限
sudo -l  # 查看当前用户可执行的 sudo 命令

# 执行特权命令:
sudo /usr/bin/systemctl restart nginx  # 需输入用户密码(除非配置NOPASSWD)

安全守则

  1. umask 推荐值
    • 普通用户:0002(文件664,目录775)
    • 超级用户:0022(文件644,目录755)
  2. sudo 最小化授权
    • 禁止无限制 ALL 权限(如必须,则用 NOPASSWD: 需谨慎)
    • 命令路径必须为绝对路径(防止路径劫持)

通过 visudo -c 可检查配置文件语法是否正确

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux(二)用户和文件权限
    • 1.用户和用户组
      • 一、用户(User)
      • 二、用户组(Group)
    • 2 配置文件
      • 2.1 /etc/group - 用户组信息库
      • 2.2 /etc/gshadow - 用户组加密信息
      • 2.3 /etc/passwd - 用户账户信息文件
      • 2.4 /etc/shadow - 用户安全信息文件
    • 3. 用户命令
      • 1. 显示登录的用户名
      • 2. 显示用户身份信息
      • 3. 切换用户
      • 4. 以超级用户权限执行命令
      • 5. 显示用户所属组
      • 6. 显示用户登录历史
    • 4. 用户和用户组操作
      • 4.1 添加用户组
      • 4.2 修改用户组名称
      • 4.3 修改用户组编号
      • 4.4 创建分组并指定编号
      • 4.5 删除用户组
      • 4.6 添加用户
      • 4.7 指定个人文件夹
      • 4.8 修改用户组
      • 4.9 删除用户
    • 5 .文件权限
      • 5.1 文件基本权限
      • 5.2 基本权限的修改
      • 5.3 权限的作用
    • 6. 默认权限
    • 7. sudo权限
      • 安全守则
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档