When executing shell scripts that have the setuid bit (e.g., perms of rwsr-xr-x), the scripts run as the user that executes them, not as the user that owns them. This is contrary to how setuid is handled for binaries (e.g., /usr/bin/passwd), which run as the user that owns them, regardless of which user executes them.
Check this page: https://access.redhat.com/site/solutions/124693
This is a security measure taken by operating system. You should use your script with sudo instead.
If you really need to use setuid o your script you can create a binary that will do the work. Create a new file “program.c” and copy the following code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("./program.sh"); #This line is dangerous: It allows an attacker to execute arbitrary code on your machine (even by accident).
return 0;
}
Compile and execute the code using the following commands:
$ gcc program.c -o program
$ sudo chown root.root program
$ sudo chmod 4755 program
$ ./program
This way it will work. The setuid works for compiled file, and this file can execute others files as root.
./program.sh
. This would enable every user who can executeprogram
to run arbitrary code as the user who ownsprogram
. From my point of view, a safer solution would be to port the code from./program.sh
directly into C code and add it toprogram.c
. – tones Nov 06 '18 at 12:17./program.sh
. This would enable every user who can execute program to run arbitrary code as the user who owns program. It runs./program.sh
in the present working directory. – ctrl-alt-delor Feb 07 '21 at 10:43program.sh
is any directory. Then runPath/to/that/program
. – ctrl-alt-delor Feb 07 '21 at 10:47program.sh
is any directory. Then runPath/to/that/program
. – ctrl-alt-delor Feb 07 '21 at 10:48program.sh
is any directory. Then runPath/to/that/program
. – ctrl-alt-delor Feb 07 '21 at 10:48