SUID不使用shell脚本

Sac*_*pta 9 linux bash shell suid

我创建了一个包含以下内容的小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
Run Code Online (Sandbox Code Playgroud)

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

-rw-r--r-- 1 root root 6 Sep  9 12:26 /etc/myfile.cnf
Run Code Online (Sandbox Code Playgroud)

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

/usr/bin/checksuid.sh: line 3: /etc/myfile.cnf: Permission denied
Run Code Online (Sandbox Code Playgroud)

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

Sk6*_*606 13

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

"事实上,由于它引发了大量安全漏洞,因此很多*nix实现都禁用了setuid位"

另一种方法 - 将脚本包装在可以使用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;
}
Run Code Online (Sandbox Code Playgroud)

  • 您应该在调用脚本之前/之后清除环境变量以降低安全风险. (4认同)