Linux怎么设置SUID和SGID权限_Linux特殊权限位配置方法教程【进阶】

大杰姑娘_7000

大杰姑娘_7000

2026-03-31

731人浏览

原创

必须正确配置suid(4)或sgid(2)权限位以实现临时提权:可用数字模式(如chmod 4755)或符号模式(如chmod u+s)设置,需验证权限显示为小写s、测试二进制程序实际切换euid/egid,并排除脚本无效、noexec挂载、selinux限制等常见失效原因。

linux怎么设置suid和sgid权限_linux特殊权限位配置方法教程【进阶】

如果您需要让普通用户在执行特定程序时临时获得文件所有者或所属组的权限,则必须正确配置SUID或SGID特殊权限位。以下是多种可行的配置方法:

一、使用数字模式设置SUID和SGID

数字模式通过在标准三位八进制权限前添加特定位数值实现:SUID对应4,SGID对应2。该方式直接、明确,适用于脚本批量操作或权限精确控制场景。

1、为可执行文件设置SUID权限:执行chmod 4755 /path/to/executable,使文件权限变为-rwsr-xr-x。

2、为可执行文件同时设置SUID和SGID权限:执行chmod 6755 /path/to/executable,使文件权限变为-rwsr-sr-x。

3、为目录设置SGID权限:执行chmod 2775 /shared/dir,确保新创建的文件自动继承目录所属组。

4、验证设置是否生效:运行ls -l /path/to/target,检查属主或属组执行位是否显示为小写s;若显示大写S,说明对应位置无执行权限,SUID/SGID实际无效。

二、使用符号模式设置SUID和SGID

符号模式通过字符指令动态增删权限,不依赖当前权限值,避免覆盖误操作,适合交互式环境下的精细调整。

1、为文件添加SUID位:执行chmod u+s /usr/local/bin/custom-tool。

2、为文件添加SGID位:执行chmod g+s /usr/local/bin/group-helper。

3、为目录添加SGID位:执行chmod g+s /var/www/html/uploads,使该目录下新建文件归属自动设为目录所属组。

4、撤销SUID位:执行chmod u-s /path/to/file;撤销SGID位:执行chmod g-s /path/to/file_or_dir。

5、确认结果:运行stat -c "%A %U:%G %n" /path/to/target,比ls -l更可靠地识别权限位状态,排除大小写歧义。

三、验证SUID/SGID实际运行效果

设置完成后必须验证权限是否在进程执行时真实切换,仅看文件权限显示不足以确认功能生效,因内核策略可能拦截(如对Shell脚本丢弃SUID)。

1、编写测试程序(C语言):创建一个调用seteuid(getpwnam("root")->pw_uid)的二进制,编译后设chmod 4755。

2、在程序中插入printf("real uid=%d, effective uid=%d\n", getuid(), geteuid());输出调试信息。

3、以普通用户身份运行该程序,观察输出中effective uid是否等于root的UID(通常为0)。

4、对SGID验证:运行id -u; id -g; id -G对比进程有效GID与文件属组GID,确认getegid()返回值匹配。

5、注意:Shell脚本即使显示rwsr-xr-x,执行时仍以当前用户身份运行,SUID无效;必须使用编译后的二进制才能触发内核级UID/GID切换。

四、强制确保SUID/SGID不被umask干扰

umask影响新建文件默认权限,但不影响已设置的SUID/SGID位本身;不过SGID对目录的作用效果受umask制约,尤其影响新文件的组读写权限。

1、检查当前umask值:执行umask,典型输出为0002或0022。

2、若需SGID目录中新文件默认具备组写权限,应确保umask的组位为0,例如umask 0002使新建文件权限为664而非644。

3、临时修改umask:执行umask 0002后再进入SGID目录创建文件。

4、永久生效:将umask 0002加入/etc/profile或用户shell配置文件(如~/.bashrc)。

5、验证:在SGID目录中执行touch testfile && ls -l testfile,确认其组权限包含w位且属组与目录一致。

五、排查SUID/SGID失效的常见原因

即使权限位已正确设置,SUID/SGID仍可能因系统策略或配置错误而无法触发预期行为,需逐项核查底层条件是否满足。

1、确认目标文件为可执行二进制:运行file /path/to/executable,输出必须含ELF字样;若为shell script,SUID必然失效。

2、检查文件是否位于noexec挂载的文件系统:执行mount | grep "$(df . | tail -1 | awk '{print $1}')" | grep noexec,若存在noexec选项,需重新挂载或更换路径。

3、验证SELinux状态:执行getenforce,若返回Enforcing,则需检查SELinux布尔值setuid是否启用:getsebool setuid,必要时执行setsebool -P setuid on。

4、确认文件未被chattr锁定:运行lsattr /path/to/executable,若输出含i或a属性,SUID/SGID将被内核忽略。

5、检查内核参数fs.suid_dumpable:执行sysctl fs.suid_dumpable,值为0时部分SUID进程core dump受限,虽不阻断权限切换,但影响调试验证流程。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2620

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

249

24

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

2023.06.20

708

5

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.28

1009

10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3890

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3333

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2473

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5990

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5622

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习