11

我创建了一个包含以下内容的小型 shell 脚本:

cat /usr/bin/checksuid.sh

!/bin/bash
echo "Hello" > /etc/myfile.cnf

ls -l /usr/bin/checksuid.sh
-rwsr-xr-x 1 root root 56 Sep  9 12:56 /usr/bin/checksuid.sh

我还创建了一个/etc/myfile.cnf具有 root 帐户的文件并设置权限如下:

-rw-r--r-- 1 root root 6 Sep  9 12:26 /etc/myfile.cnf

当我/usr/bin/checksuid.sh从非 root 帐户执行时,我收到以下错误:

/usr/bin/checksuid.sh: line 3: /etc/myfile.cnf: Permission denied

有人可以帮助您了解为什么 SUID 不起作用?

4

2 回答 2

22

Shell 脚本不能是 SUID。见http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html

于 2013-09-09T13:10:37.757 回答
16

来自http://www.tuxation.com/setuid-on-shell-scripts.html

“事实上,setuid 位在许多 *nix 实现中被禁用,因为它会带来巨大的安全漏洞”

另一种方法 - 将脚本包装在可以使用 setuid 的东西中,例如这个示例 c 程序。简单地调用您的脚本与使用这样的包装器(例如忽略的退出代码)显然存在差异,但这无论如何应该给您一个想法。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/path/to/script.sh" );

   return 0;
}
于 2014-07-23T19:46:47.673 回答