在Linux系统中,用户权限是保障系统安全与资源合理分配的核心机制,通过精细化的权限控制,确保不同用户只能访问其被授权的资源,要查看用户权限,需从用户身份、文件/目录权限、特殊权限、sudo授权等多个维度入手,结合多种命令和工具进行综合分析,以下将从基础到进阶,详细说明Linux中查看用户权限的方法及核心知识点。
用户与用户组基础:权限的归属主体
Linux中的权限分配以用户(User)和用户组(Group)为单位,每个文件或目录都有明确的“属主”(Owner,即用户)、“属组”(Group,即用户组)及“其他用户”(Others)三类权限主体,理解用户与用户组的关系是查看权限的前提。
- 用户标识:Linux通过用户ID(UID)唯一标识用户,普通用户UID通常大于1000(不同发行版略有差异),系统用户(如www-data、nobody)UID一般小于1000,可通过
/etc/passwd
文件查看所有用户信息,例如cat /etc/passwd | grep username
会显示用户的UID、家目录、默认Shell等。 - 用户组标识:用户组通过组ID(GID)标识,用户可属于一个主组(Primary Group,创建用户时自动生成)和多个附加组(Supplementary Groups)。
/etc/group
文件记录了所有组信息,例如cat /etc/group | grep groupname
可查看组成员及GID。
权限表示方法:字符与数字的对应
Linux权限分为“读(r)”“写(w)”“执行(x)”三类,分别对应数字4、2、1(无权限为0),权限位通常以字符或数字形式呈现,常见于文件/目录的属性中。
字符表示法
通过ls -l
命令可查看文件/目录的详细权限,-rwxr-xr-- 1 user group 4096 Oct 20 10:30 file.txt
- 第1位:文件类型(普通文件,
d
目录,l
软链接等); - 第2-4位:属主权限(rwx,属主user可读、写、执行);
- 第5-7位:属组权限(r-x,属组group可读、执行,不可写);
- 第8-10位:其他用户权限(r–,其他用户仅可读)。
数字表示法
将三类权限的数字相加,得到简化的权限表示,
- rwx = 4+2+1 = 7(完全权限);
- r-x = 4+0+1 = 5(读+执行);
- r– = 4+0+0 = 4(仅读)。
上述file.txt
的权限可简写为755
(属主7,属组5,其他5)。
查看用户权限的核心命令
ls
命令:查看文件/目录权限
ls
是查看文件属性最常用的命令,结合不同选项可获取权限细节:
- 基础权限:
ls -l file.txt
(如上文所示,显示字符权限); - 隐藏文件权限:
ls -la
(包含以开头的隐藏文件,如.bashrc
); - 目录自身权限:
ls -ld /var/log
(查看目录本身的权限,而非目录内文件); - 数字权限:
ls -n file.txt
(以UID/GID形式显示属主/属组,而非用户名,便于调试)。
id
命令:查看用户身份与组信息
id
命令用于显示指定用户的UID、GID及所属组,是快速定位用户权限归属的关键工具:
- 当前用户信息:
id
(输出示例:uid=1000(user) gid=1000(user) groups=1000(user),4(adm),27(sudo)
,显示UID、GID及所有附加组); - 指定用户信息:
id username
(如id www-data
,输出uid=33(www-data) gid=33(www-data) groups=33(www-data)
); - 仅显示UID/GID:
id -u username
(仅UID)、id -g username
(仅GID)。
groups
命令:查看用户所属组
groups
命令以简洁方式列出用户的所有组(主组+附加组):
- 当前用户组:
groups
(输出:user : user adm sudo
); - 指定用户组:
groups username
(如groups mysql
,输出mysql : mysql root
)。
sudo -l
命令:查看sudo授权权限
sudo(Superuser Do)允许普通用户以其他用户(通常是root)身份执行命令,sudo -l
用于查看当前用户被授权执行的sudo命令:
- 当前用户sudo权限:
sudo -l
(输出示例:User user may run the following commands on hostname: (ALL : ALL) ALL
,表示可切换为任何用户执行任何命令;或/usr/bin/apt update
,表示仅可执行apt update
); - 指定用户sudo权限:
sudo -l -U username
(需root权限,查看其他用户的sudo授权)。
文件/目录权限的深度解读
文件权限与目录权限的区别
- 文件权限:
- 读(r):查看文件内容(如
cat file.txt
); - 写(w):修改或删除文件(需对文件所在目录有写权限,否则无法删除);
- 执行(x):运行可执行文件(如脚本、二进制程序,无x权限则无法通过
./file.sh
执行)。
- 读(r):查看文件内容(如
- 目录权限:
- 读(r):列出目录内容(如
ls /var/log
,需r权限); - 写(w):在目录中创建/删除文件/子目录(如
touch /var/log/newfile
,需w权限); - 执行(x):进入目录(如
cd /var/log
,需x权限,无x权限则无法访问目录内文件,即使有r权限)。
- 读(r):列出目录内容(如
权限对操作的影响示例
假设目录/data
权限为drwxr-x--- 2 root root 4096 Oct 20 11:00
(属主root,属组root,权限750),文件/data/file.txt
权限为-rw-r--r-- 1 user group 4096 Oct 20 11:00
:
- 用户
user
(属group组)可ls /data
(目录有rx权限),可cat /data/file.txt
(文件有r权限),但无法touch /data/newfile
(目录无w权限); - 其他用户(如guest)无法
ls /data
(目录无其他用户权限),更无法访问file.txt
。
特殊权限:SUID、SGID与Sticky Bit
除常规rwx权限外,Linux还支持三种特殊权限,用于满足特定场景需求:
特殊权限 | 作用场景 | 符号表示 | 数字表示 | 示例与说明 |
---|---|---|---|---|
SUID | 可执行文件 | s | 4 | /usr/bin/passwd 权限为-rwsr-xr-x ,属root,用户执行时以root身份修改密码(仅影响文件执行过程)。 |
SGID | 目录或可执行文件 | s | 2 | /home/shared 目录权限为drwxrws--- ,属组shared,用户在目录内创建的文件自动继承属组shared,便于团队协作。 |
Sticky Bit | 公共目录 | t | 1 | /tmp 目录权限为drwxrwxrwt ,普通用户可创建/删除自己的文件,但无法删除其他用户的文件(防止误删)。 |
查看特殊权限:ls -l
中,若属主权限位为s
(而非x
)表示SUID,属组权限位为s
表示SGID,其他用户权限位为t
表示Sticky Bit。-rwsr-xr-t 1 root root 4096 file
(包含SUID和Sticky Bit)。
ACL权限:更精细的访问控制
传统权限仅支持“用户-用户组-其他”三类主体,而ACL(Access Control List)可针对特定用户/用户组设置独立权限,适用于需要精细化控制的场景(如Web服务器目录)。
查看ACL权限:getfacl
getfacl
命令用于显示文件/目录的ACL权限:
getfacl /var/www/html # 输出示例: # file: var/www/html # owner: root # group: www-data # user::rwx # user:apache:r-x # 用户apache有rx权限 # group::r-x # 属组www-data有rx权限 # mask::r-x # 权限掩码,限制最大有效权限 # other::r-- # 其他用户有r权限
设置ACL权限:setfacl
- 为用户添加权限:
setfacl -m u:username:rw /file
(给用户username添加读写权限); - 为用户组添加权限:
setfacl -m g:groupname:r-x /dir
(给groupname组添加读执行权限); - 删除ACL权限:
setfacl -x u:username /file
(删除用户username的ACL权限)、setfacl -b /dir
(删除所有ACL权限)。
实际应用场景:排查权限问题
当用户无法访问文件或执行命令时,可按以下步骤排查权限:
- 确认用户身份:
id username
,查看UID/GID及所属组; - 查看文件/目录权限:
ls -l /path
,确认属主、属组及三类主体的rwx权限; - 检查特殊权限:
ls -l
中是否有s、t字符,或getfacl /path
查看ACL权限; - 验证sudo授权:
sudo -l -U username
,确认是否有sudo权限执行目标命令。
权限字符与数字对应表
权限字符 | 权限含义 | 数字值 | 示例(权限位) |
---|---|---|---|
r | 读 | 4 | r– = 4 |
w | 写 | 2 | -w- = 2 |
x | 执行 | 1 | –x = 1 |
无权限 | 0 | — = 0 | |
s | SUID/SGID | 4/2 | rws = 7 (SUID) |
t | Sticky Bit | 1 | rwt = 7 (Sticky) |
文件权限与目录权限作用对比表
操作类型 | 文件权限要求 | 目录权限要求 | 说明 |
---|---|---|---|
查看文件内容 | r | 需对文件有r权限,与目录权限无关(除非通过目录路径访问,此时需目录x权限)。 | |
修改文件内容 | w | 需对文件有w权限,若要删除文件,需对文件所在目录有w权限。 | |
执行文件 | x | 需对文件有x权限(如./script.sh )。 |
|
列出目录内容 | r | 需对目录有r权限(如ls /dir )。 |
|
进入目录 | x | 需对目录有x权限(如cd /dir ),无x权限则无法访问目录内文件。 |
|
在目录中创建/删除文件 | w | 需对目录有w权限(如touch /dir/file 、rm /dir/file )。 |
相关问答FAQs
Q1:为什么有些目录即使有r权限也无法进入?
A:目录的“执行(x)”权限是进入目录的必要条件,若仅有r权限无x权限,可通过ls /dir
列出目录内容(因有r权限),但无法执行cd /dir
进入目录(因缺少x权限),目录权限为drwxr-----
(属主7,属组5,其他0),其他用户有r权限(4)但无x权限(1),因此无法进入。
Q2:如何查看某个用户是否有sudo权限?
A:可通过以下两种方式查看:
- 使用
sudo -l
命令(推荐):以root身份或目标用户身份执行sudo -l -U username
,若输出“User username may run the following commands…”则表示有sudo权限,否则提示“User username is not allowed to run sudo on hostname”。 - 检查
/etc/sudoers
文件:需root权限,执行visudo
(安全编辑/etc/sudoers
),查找username ALL=(ALL:ALL) ALL
或类似规则,存在则表示有sudo权限(ALL
表示可从任何终端、以任何用户身份执行任何命令)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35799.html