我有一个(S\g)uid文件世界-可写:
ls -lh suid_bin.sh
-rwsr-srwx 1 root root 168 mai 23 16:46 suid_bin.sh使用非根用户帐户登录。我使用vi (或其他编辑器)修改"suid_bin.sh“。保存新内容后,(S\g)uid位被取消设置:
ls -lh suid_bin.sh
-rwxr-xrwx 1 root root 168 mai 23 16:46 suid_bin.sh为什么?有什么办法在修改后保留(S)uid位吗?
发布于 2016-05-23 16:02:01
Unix权限允许写入文件,如果不小心有人会在setuid文件上设置组或世界可写位,但不允许陌生人更改这些文件的所有者和组ids。
因此,修改后,内核从文件中删除setuid/setgid位,以确保没有恶意代码写入文件。
根用户当然可以恢复setuid位,但是普通用户,如果他,由于某人的错误,获得了对特权可执行文件的写访问权,将无法利用它。
而且,我不确定在不编辑内核源代码和重新编译的情况下,是否可以禁用内核的部分。
请注意,Linux中的setuid脚本在执行后不会获得setuid状态,因为实际上内核在没有setuid状态的情况下启动脚本解释器,其上一次解析参数为脚本的完整路径,然后解释器将脚本作为普通文件读取。但在其他Unix系统上,这种情况可能有所不同。
https://unix.stackexchange.com/questions/284947
复制相似问题