答案:查看用户权限需结合用户组和文件权限,通过groups和ls -l命令分析;SUID、SGID、Sticky Bit分别控制执行时的身份提升、组继承和删除限制;sudo通过/etc/sudoers策略实现权限提升与审计。

Linux查看用户权限,其实就是看用户属于哪些用户组,以及这些用户组对哪些文件或目录拥有什么样的权限。
id 用户名 groups 用户名
如何查看特定用户对特定文件的权限?
这问题有点意思,直接看用户权限,不如直接看用户对特定文件的权限来得实在。先说说背景,Linux权限这块,主要靠用户(user)、用户组(group)和其他人(others)来划分。每个文件或目录都有这三种身份的权限设置,通常是读(r)、写(w)、执行(x)。
要查特定用户对特定文件的权限,得这么来:
确认用户所属的用户组:
groups username
。比如,groups john
,看看john属于哪些组。查看文件权限:
ls -l filename
。比如,ls -l myfile.txt
,会输出类似-rw-r--r-- 1 user group size date filename
的信息。-
分析权限:
- 第一个字符表示文件类型(
-
代表普通文件,d
代表目录)。 - 接下来的9个字符分三组,分别代表用户、用户组、其他人的权限。
- 如果john是文件的所有者,就看第一组(rw-),表示john对myfile.txt有读写权限。
- 如果john不拥有该文件,但属于该文件的用户组,就看第二组(r--),表示john所在的用户组对myfile.txt有读权限。
- 如果john既不是文件所有者,也不属于文件用户组,那就看第三组(r--),表示其他人对myfile.txt有读权限。
- 第一个字符表示文件类型(
注意,如果john属于多个用户组,而这些用户组对myfile.txt的权限不同,那john实际拥有的权限是这些权限的并集。还有,ACL(Access Control Lists)也能影响权限,但这里先不深入了。

如何理解Linux中的SUID、SGID和Sticky Bit权限?
这三个东西,SUID、SGID和Sticky Bit,不是每天都能用上,但理解它们能让你对Linux权限有更深的认识。
ISite企业建站系统是为懂点网站建设和HTML技术的人员(例如企业建站人员)而开发的一套专门用于企业建站的开源免费程序。本系统采用了全新的栏目维护模式,内容添加过程中,前后台菜单是一样的,需要维护前台某个栏目的内容,只需要进后台相应栏目即可,一般的企业人员只需要查看简易的说明就可以上手维护网站内容。通过自由度极高的模板系统,可以适应大多数情况的界面需求,后台带有标签生成器,建站只需要构架好HTM
-
SUID (Set User ID): 当一个可执行文件设置了SUID位,任何用户执行这个文件时,都会暂时获得文件所有者的身份。听起来有点危险?是的,所以要谨慎使用。常见的例子是
passwd
命令,普通用户可以用它来修改自己的密码,而密码文件/etc/shadow
只有root才能写。passwd
命令之所以能工作,就是因为设置了SUID位,让普通用户临时拥有root权限去修改密码文件。 - SGID (Set Group ID): 跟SUID类似,但影响的是用户组。如果一个可执行文件设置了SGID位,执行者会暂时获得文件所属用户组的身份。对于目录,SGID的作用是,在该目录下创建的新文件或子目录,都会自动继承该目录的用户组。这在团队协作时很有用,可以确保所有成员创建的文件都属于同一个用户组。
-
Sticky Bit: 这个位通常用在公共目录上,比如
/tmp
。当一个目录设置了Sticky Bit,只有文件所有者、目录所有者和root用户才能删除或重命名该目录下的文件。这样可以防止用户误删或恶意删除其他用户的文件。
要查看文件或目录是否设置了这些位,可以用
ls -l命令。如果设置了SUID,用户权限位的
x会变成
s;如果设置了SGID,用户组权限位的
x也会变成
s;如果设置了Sticky Bit,其他人权限位的
x会变成
t。当然,如果对应的执行权限没有设置,这些位会显示为大写的
s或
t,表示这些位无效。

如何使用sudo
命令?sudo
背后的机制是什么?
sudo命令,Linux用户肯定不陌生,它允许普通用户以其他用户(通常是root)的身份执行命令。但
sudo背后的机制是什么呢?
简单来说,
sudo的工作原理是:它会读取
/etc/sudoers文件,这个文件定义了哪些用户或用户组可以以哪些用户的身份执行哪些命令。当你执行
sudo command时,系统会检查
/etc/sudoers文件,看你是否有权限执行这个命令。如果有,
sudo会暂时提升你的权限,以指定用户的身份执行命令,然后恢复你的原始权限。
/etc/sudoers文件非常重要,也很脆弱,直接编辑可能会出错。所以,通常用
visudo命令来编辑它。
visudo会检查语法的正确性,防止你破坏这个文件。
/etc/sudoers文件里的规则通常是这样的:
username hostname= (user) commands
username
:允许使用sudo
的用户或用户组。hostname
:允许执行sudo
的主机名。(user)
:以哪个用户的身份执行命令,通常是root
。commands
:允许执行的命令。
比如,
john ALL=(ALL) ALL,表示john可以在所有主机上以任何用户的身份执行任何命令。
sudo的安全性在于,它允许管理员精确控制哪些用户可以执行哪些特权操作,而不是简单地把root权限交给所有用户。同时,
sudo会记录所有的
sudo使用情况,方便审计。









