SUID不能使用shell脚本

我创build了一个包含以下内容的小型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 

我也用root帐户创build了一个/etc/myfile.cnf文件,设置权限如下:

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

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

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

有人可以帮助你,为什么SUID不工作?

Solutions Collecting From Web of "SUID不能使用shell脚本"

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

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

“事实上,由于它引发的巨大安全漏洞,setuid位在许多* nix实现上被禁用”

另一种方法 – 将脚本包装在可以使用setuid的东西中,就像这个例子中的c程序一样。 简单地调用你的脚本vs使用这样的包装(例如忽略退出代码)显然是不同的,但是这应该给你一个想法。

 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { setuid( 0 ); system( "/path/to/script.sh" ); return 0; }