首页 理论教育 LinuxShell编程中的SGID权限及作用解析

LinuxShell编程中的SGID权限及作用解析

时间:2026-01-27 理论教育 峰子 版权反馈
【摘要】:学习了SUID之后,SGID就容易理解了,它是setgid的缩写。SGID的作用是:其他账户在执行时具有文件所属组的权限。例如,在Ubuntu的/usr/bin目录下,执行命令ls-l|grep'^......s',可以看见一些具有SGID属性的可执行文件:以crontab命令为例,具体解释一下SGID的作用。还可以对一个目录设置SGID,这时,SGID的作用是:任何账户如果可以在该目录内建立新文件或者新的子目录,那么新建的文件或子目录的所属组与该目录的所属组保持一致。

学习了SUID之后,SGID就容易理解了,它是setgid的缩写。可以对一个可执行二进制文件设置SGID。SGID的作用是:其他账户在执行时具有文件所属组的权限。

例如,在Ubuntu的/usr/bin目录下,执行命令ls-l|grep'^......s',可以看见一些具有SGID属性的可执行文件:

以crontab命令为例(该命令用来设置周期性的指令,这里不展开讨论它),具体解释一下SGID的作用。

任何账户都可以运行crontab命令,/usr/bin/crontab所属组为crontab(组名与命令名相同),任何账户在执行crontab命令时,都临时具有了属于crontab组时所具有的权限。

还可以对一个目录设置SGID,这时,SGID的作用是:任何账户如果可以在该目录内建立新文件或者新的子目录,那么新建的文件或子目录的所属组与该目录的所属组保持一致。下面举例说明。

账户user创建目录/home/user/doc,并在目录中创建新文件a:

现在需要使用另外一个账户,先介绍切换账户的方法。最容易想到的方法是退出Linux,用另外的账户重新登录。若不退出Linux,运行命令su<账户名>或者ssh<账户名>@<计算机名或IP>也可以切换账户。这几种方法当然都需要知道相应的账户密码。例如:

假设现已切换为账户shiqdong,该账户在目录/home/user/doc中创建新文件b:(https://www.xing528.com)

可见文件a的所属组为user,文件b的所属组为shiqdong。下面,账户user将目录/home/user/doc加上SGID属性:

账户shiqdong重新在目录/home/user/doc中创建新文件b:

可见,这时文件a和b的所属组都为user,和doc目录的所属组一致。

给文件或者目录增加SGID属性除了用命令chmodg+s之外,还可以用数值的方法,chmod后面跟四位八进制数,最前面一位为2时,表示设置SGID属性。例如:

与SUID同样道理,设置SGID属性要同时确保目录或者文件对于所属组有执行权限,如果没有,会看见大写的S,例如:

这是不正常的,增加所属组的执行权限,即运行chmodg+xphoto之后,就正常了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈