我创建了一个包含以下内容的小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帐户创建了一个文件/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无法正常工作吗?
答案 0 :(得分:22)
Shell脚本不能是SUID。见http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html
答案 1 :(得分:13)
来自http://www.tuxation.com/setuid-on-shell-scripts.html:
"事实上,由于它产生的大量安全漏洞,很多* nix实现上的setuid位被禁用了#34;
另一种方法 - 将脚本包装在可以使用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;
}