这个解决方案似乎不起作用。我不知道为什么,因为我没有将 SetUID 与 shell 脚本一起使用。但是我让这个答案留在这里,以防有人想参考它。
出于安全原因,我建议您将代码放入 bash 文件中。使用SetUID 位在任何其他用户中以 root 身份执行 bash 文件。这样,除了 root 之外的任何其他人都无法写入您的文件,并且您不需要使用 sudo 处理。否则,您允许您的 php 进程以 root 身份执行代码,这在大多数情况下是一个非常糟糕的主意。
您没有收到任何输出的原因可能是因为它要求输入密码,而 exec 无法输入密码。
编辑:
将您的 php 调用更改为:
<?
exec("/var/www/MountTheDisk.sh");
?>
比创建一个包含这样的内容的 bash 文件(/var/www/MountTheDisk.sh)
#!/bin/sh
// this script will be executed as root
diskutil mount /dev/xvdb1 /mnt/theDisk/
echo trying to mount
现在设置 SetUID 位并将所有者更改为 root。(必须通过 root shell 完成)
// make script executable
chmod +x /var/www/MountTheDisk.sh
// setuid bit
chmod u+s /var/www/MountTheDisk.sh
// change owner to root
chown root:root /var/www/MountTheDisk.sh
注意:任何用户都可以运行此文件。任何调用都将导致它以 root 身份执行。