¿Cómo puede saber si ejecutar un programa requiere root?

10

Entiendo que esto es un poco fundamental y quizás una pregunta tonta, pero no he podido encontrar una respuesta.

Entiendo que cada archivo tiene el "Executable"bit.

Supuse que los programas que requieren root, que son propiedad del rootusuario y el rootgrupo, no tendrán el Executablebit Othery eso evitaría que los usuarios no root los ejecuten. Pero en los directorios /biny /sbinveo que todos los archivos tienen permisos como-rwxr-xr-x

Entonces, ¿qué determina realmente si un usuario necesita tener permiso de root para ejecutar algo?

Decano
fuente
1
Por defecto, usted o cualquier usuario puede ejecutar cualquier programa desde /bino /sbindirectorios. El problema es que algunos de esos programas se ejecutan de manera diferente según el usuario que los ejecute.
Radu Rădeanu

Respuestas:

13

En algún momento, está en el código. Por ejemplo, a mitad de camino hwclock.c, encontrarás:

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

lo que cambiará el comportamiento del programa si eres root o no.

In most other cases, it's implicit; delegated to the kernel. For example, if the program calls the system call that let you reboot the system, it will work only if you are root. If you are not root, you will have a "permission denied" error that the application (if well written) simply reports to you. Or you are trying to delete a file; if you have the right permission on the file to do it, it will succeed; if not, it depends if you are root or not --- when rm calls unlink() the kernel will check permissions.

So no, in principle you can't say just looking at the permission of the executable if the program requires root privileges or not. A lot of programs will require them only for some operation, so it will be really difficult to do something like that. The case of hwclock is one (anyone can read the clock but only root can set it), but there are hundreds of them (kill, rm, cat... )

Then there is the related and interesting world of setuid programs...

Rmano
fuente
So basically the kernel is "in charge of it"? If the program makes a system call, the kernel determines if the user running the program has to be root and enforces it?
Dean
2
Basically, yes. The program can do additional tests, but the permission check is at kernel level. Setuid-root programs are the exception; they run as root always so they need to check for permission themselves (and are a nice font of security flaws...)
Rmano