Еще одна вещь, которую следует отметить здесь, состоит в том, что ограничение здесь происходит от bash, а не от самой системы * nix. Bash действительно делает проверки на скриптах SUID, чтобы выполнять их только с корнем EUID. Если вы берете старые раковины, вы часто получаете то, что хотите, из коробки. Например, sh не делает такого рода проверки:
$ cat wrapper.c
int main(void)
{
system("/bin/sh -c whoami");
}
$ ls -l wrapper
-rwsr-sr-x 1 root users 8887 Feb 17 14:15 wrapper
$ ./wrapper
root
С bash:
$ cat wrapper.c
int main(void)
{
system("/bin/bash -c whoami");
}
$ ls -l wrapper
-rwsr-sr-x 1 root users 8887 Feb 17 14:18 wrapper
$ ./wrapper
skinp
Тем не менее, ответ Тома, как правило, подходит для создания обертки для корневых программ SUID