¿Por qué el bit de permiso setuid no está configurado para mkdir en los sistemas Unix modernos?

3

Bach dice lo siguiente:

mkdir es un setuidprograma típico . Solo un proceso con una raíz UID efectiva puede crear una carpeta. (Sección 7.6, página 229)


Verifiqué los permisos en Ubuntu 12.04, el bit setuid no está configurado.

-rwxr-xr-x 1 root root 42624 Oct  2 08:55 mkdir
   ^??

Luego verifiqué otros programas que se supone que tienen este conjunto, como pingy suy lo tienen configurado.

-rwsr-xr-x 1 root root 34740 Nov  8  2011 ping
   ^---there it is 

Entonces, ¿cómo mkdirfunciona? ¿Han cambiado las cosas desde que Bach escribió eso?

Anirudh Ramanathan
fuente
Ese puede ser el caso, pero tampoco es una pregunta de programación.
Hasturkun
1
IIRC, en el momento en que Bach escribió que, no había llamadas al sistema separadas para directorios, open () y read () y write () también funcionaban para inodos de directorio. Con posibles efectos diasastrosos.

Respuestas:

5

La llamada mkdir () ha estado presente desde BSD 4.2. Más tarde se agregó a SYSV 3.0. Ver: http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html

BSD 4.2 salió en 1984: http://www.unix.org/what_is_unix/history_timeline.html

Si se permite el acceso a un punto de entrada en modo kernel en UNIX a través de una llamada al sistema desde el modo de usuario sin restricción, lo que indica duskwuff, entonces no se requiere setuid.

jim mcnamara
fuente
Wow, gracias por los enlaces y la línea de tiempo. La versión anterior de mkdir.c que ha vinculado no parece hacer que el setuid()sistema llame. ¿Es definitivamente la correcta?
Anirudh Ramanathan
1
Esa versión de mkdir era relativamente moderna, usa mkdir().
duskwuff
3

Ya no es necesario tener privilegios de root para crear una carpeta. Ahora hay una mkdir()llamada al sistema que cualquier proceso puede usar para crear un directorio.

al anochecer
fuente
1

¿Han cambiado las cosas desde que Bach escribió eso?

Exactamente. El permiso para crear un directorio se basa hoy en día en el permiso de escritura en el directorio principal o en el tbit (para directorios similares a / tmp donde todos pueden crear un directorio, pero usted solo puede eliminar archivos de su propiedad).

Jens
fuente
Estoy de acuerdo, pero esto se refiere a los permisos en el ejecutable mkdir, no a la carpeta de destino.
Anirudh Ramanathan
Bueno, esto es exactamente lo que ha cambiado. El hash de verificación de permisos pasó de verificar el bit setuid del ejecutable mkdir al bit de escritura del directorio principal para el usuario efectivo.
Jens