在Linux系统中,用户权限是保障系统安全的核心机制,它决定了用户对文件、目录以及系统资源的访问能力,要查看Linux下的用户权限,需要从文件权限、用户与用户组关系、特殊权限、ACL(访问控制列表)以及sudo权限等多个维度进行综合分析,本文将详细讲解不同场景下的权限查看方法,帮助用户全面掌握Linux权限管理。
文件与目录权限查看:基础命令ls -l
文件和目录的权限是Linux权限最直观的体现,通过ls -l
命令(或ll
,通常为ls -l
的别名)可以查看详细的权限信息,例如执行ls -l test.txt
,输出可能为:-rw-r--r-- 1 user1 group1 0 Jan 1 10:00 test.txt
权限位解析
输出行的第2-10位为权限信息,分为4部分:
- 第1位:文件类型(表示普通文件,
d
表示目录,l
表示软链接,b
表示块设备等)。 - 第2-4位:属主(文件所有者)权限(
r
读、w
写、x
执行)。 - 第5-7位:所属组权限(
r
、w
、x
)。 - 第8-10位:其他用户权限(
r
、w
、x
)。
上例中,rw-r--r--
表示:属主可读写(rw-
),所属组只读(r--
),其他用户只读(r--
)。
数字权限表示法
Linux权限也可用3位八进制数字表示,对应r
(4)、w
(2)、x
(1)的组合:
7
(rwx
):完全权限6
(rw-
):读写权限5
(r-x
):读和执行权限4
(r--
):只读权限0
():无权限
常见权限组合如下表:
权限字符 | 数字表示 | 含义 | 典型场景 |
---|---|---|---|
rwx |
7 | 完全权限 | 属主对个人配置文件 |
rw- |
6 | 读写 | 网站目录(允许上传) |
r-x |
5 | 读和执行 | 可执行脚本 |
r-- |
4 | 只读 | 共享文档 |
0 | 无权限 | 临时禁止访问的文件 |
目录权限的特殊性
目录的权限与文件不同:
- 读(r):允许查看目录内容(如
ls
命令)。 - 写(w):允许在目录中创建/删除文件/子目录(需对目录有w权限,与文件自身权限无关)。
- 执行(x):允许进入目录(如
cd
命令),是访问目录下文件的“通行证”。
若目录权限为755
(rwxr-xr-x
),属主可任意操作,其他用户可进入和查看,但无法创建/删除文件。
用户与用户组权限查看:身份与归属
文件权限的“属主”和“所属组”关联到具体的用户和用户组,需通过以下命令查看用户身份和组关系。
查看当前用户信息
whoami
:显示当前登录用户名,如user1
。id
:显示当前用户的UID(用户ID)、GID(主组ID)及所属组列表,
uid=1000(user1) gid=1000(group1) groups=1000(group1),1001(group2)
表示user1
的主组是group1
,同时属于group2
。
查看系统所有用户
用户信息存储在/etc/passwd
文件中,每行代表一个用户,格式为:用户名:密码占位符:UID:GID:用户描述:家目录:登录Shell
user1:x:1000:1000:User:/home/user1:/bin/bash
x
:表示密码存储在/etc/shadow
文件中(实际为加密占位符)。UID
:0为root用户,1-999为系统用户(通常不可登录),1000+为普通用户。
可通过cat /etc/passwd
查看所有用户,或grep "username" /etc/passwd
过滤特定用户。
查看用户组信息
用户组信息存储在/etc/group
文件中,格式为:组名:密码占位符:GID:组成员列表
group1:x:1000:user1,user3
表示group1
的GID为1000,成员包括user1
和user3
。
常用命令:
groups
:显示当前用户所属的所有组,如user1 : group1 group2
。groupmems -g groupname
:查看指定组的成员(需安装glibc-common
包)。
特殊权限查看:SUID、SGID与Sticky Bit
除基础权限外,Linux还有3种特殊权限,用于实现特定场景下的权限提升或限制,可通过ls -l
查看特殊字符标识。
SUID(Set User ID,权限位4)
- 作用:文件执行时,以文件属主的权限运行(而非执行者权限)。
- 标识:属主权限位的
x
变为s
(如rws
),若无执行权限则为S
(rwS
)。 - 示例:
/usr/bin/passwd
文件权限为-rwsr-xr-x
,普通用户执行passwd
时,临时以root权限修改密码(需属主为root)。
SGID(Set Group ID,权限位2)
- 作用:
- 对文件:执行时以文件所属组的权限运行(较少见)。
- 对目录:目录下新建的文件/目录自动继承该目录的所属组。
- 标识:所属组权限位的
x
变为s
(如rws
),无执行权限为S
(rwS
)。 - 示例:共享目录
/project
权限为2775
(rwxrwsr-x
),组为dev
,开发者在此目录创建的文件自动属于dev
组。
Sticky Bit(粘滞位,权限位1)
- 作用:仅对目录有效,限制用户只能删除/移动自己的文件(即使对目录有w权限)。
- 标识:其他用户权限位的
x
变为t
(如rwt
),无执行权限为T
(rwT
)。 - 示例:
/tmp
目录权限为1777
(rwxrwxrwt
),所有用户可创建文件,但只能删除自己的文件(root除外)。
特殊权限与数字对应关系如下表:
特殊权限 | 权限字符 | 数字表示 | 作用对象 | 典型示例 |
---|---|---|---|---|
SUID | s /S |
4 | 可执行文件 | /usr/bin/passwd |
SGID | s /S |
2 | 文件/目录 | 共享开发目录 |
Sticky Bit | t /T |
1 | 目录 | /tmp |
ACL权限查看:精细化访问控制
传统权限(rwx)仅支持“属主-所属组-其他”三级控制,ACL(Access Control List)可针对特定用户/用户组设置独立权限,适用于多用户共享场景。
查看ACL权限
使用getfacl
命令查看文件的ACL信息,
getfacl project.txt
输出可能为:
# file: project.txt
# owner: user1
# group: group1
# flags: -s- # 表示启用SGID
user:user1:rwx # 用户user1有完全权限
group:group1:r-- # 组group1只读
mask::rwx # 权限掩码,限制实际有效权限
other::--- # 其他用户无权限
ACL关键字说明
user:username:权限
:指定用户的权限(如user:user2:rw-
)。group:groupname:权限
:指定用户组的权限(如group:dev:r-x
)。mask::权限
:权限掩码,限制所有用户/组的最大有效权限(如mask:rwx
表示实际权限不超过rwx
)。default::权限
:仅对目录有效,设置目录下新建文件的默认ACL(需搭配-d
选项)。
ACL与普通权限的关系
ACL是普通权限的扩展,若未设置ACL,则getfacl
输出与ls -l
一致;若设置了ACL,实际权限为“普通权限与ACL的交集”,且受mask
限制,普通权限为644
(rw-r--r--
),但ACL中user:user2:rw-
且mask:r--
,则user2
的实际权限为r--
(被mask限制)。
sudo权限查看:临时提权管理
sudo允许普通用户以其他用户(通常是root)的身份执行命令,需通过/etc/sudoers
文件配置。
查看当前用户的sudo权限
使用sudo -l
命令,
sudo -l
输出可能为:
User user1 may run the following commands on this host:
(ALL : ALL) ALL # 表示可切换为任何用户,执行任何命令
(root) /usr/bin/apt update # 限制仅能以root身份执行apt update
sudoers文件解析
/etc/sudoers
文件定义sudo权限规则,格式为:用户/用户组 主机=(用户) 命令
用户/用户组
:授权的主体(如user1
、%group1
表示group1
组所有用户)。主机
:允许从哪些主机执行(ALL
表示任意主机)。(用户)
:切换的目标用户(ALL
表示任意用户,通常为root
)。命令
:允许执行的命令(需绝对路径,ALL
表示所有命令)。
user1 ALL=(ALL) /usr/bin/systemctl restart nginx
,表示user1
可在任意主机以任意用户身份执行systemctl restart nginx
。
Linux用户权限的查看需结合多维度信息:
- 文件/目录权限:通过
ls -l
查看基础权限(rwx)和特殊权限(SUID/SGID/Sticky Bit)。 - 用户与组关系:通过
id
、groups
、/etc/passwd
、/etc/group
确认用户身份和所属组。 - ACL权限:通过
getfacl
查看精细化访问控制规则,注意mask
的影响。 - sudo权限:通过
sudo -l
查看用户可执行的提权命令,规则由/etc/sudoers
定义。
理解这些权限机制,既能保障系统安全,又能合理分配资源访问权限,是Linux系统管理的基础技能。
相关问答FAQs
Q1: 如何快速查看某个用户对指定文件的实际权限?
A1: 需结合普通权限、ACL权限和用户所属组综合判断,步骤如下:
- 使用
ls -l filename
查看文件普通权限(属主、所属组、其他权限)。 - 使用
getfacl filename
查看ACL规则,确认是否有针对该用户的独立权限条目(如user:username:权限
)。 - 使用
id username
查看用户所属组,结合ACL中的group:groupname:权限
和mask
权限,计算实际有效权限(实际权限≤普通权限∩ACL权限∩mask权限)。
文件普通权限644
(rw-r--r--
),ACL中有user:user2:rw-
且mask:r--
,则user2
的实际权限为r--
(被mask限制)。
Q2: 为什么目录设置了777
权限,用户仍无法进入目录?
A2: 可能原因如下:
- 缺少执行权限(x):目录的
777
权限中,若属主、所属组或其他用户的权限位缺少x
(如777
实际为776
,即rwxrwxrw-
),则无法进入目录,需确保权限位包含x
(777
表示rwxrwxrwx
)。 - 父目录权限限制:进入目录需对父目录有
x
权限,若/home
目录权限为750
(rwxr-x---
),非home
组成员无法进入/home/user1
,即使user1
目录权限为777
。 - SELinux或AppArmor强制访问控制:若系统启用了SELinux,即使权限位正确,SELinux上下文(如
user_u:object_r:user_home_t:s0
)也可能阻止访问,可通过ls -Z filename
查看上下文,使用semanage fcontext
调整或临时关闭SELinux(setenforce 0
)测试。 - 文件系统挂载选项限制:如目录所在文件系统以
noexec
挂载,会禁止执行任何文件(包括目录的x
权限),需检查mount | grep 目录
确认挂载选项。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/36071.html