¿Cómo borro el permiso "s" en un directorio en Linux?

24

Tengo un directorio que se muestra con la máscara de permiso drwsrwsr-x. Cuando trato de restablecer los permisos a 755la S todavía permanece.

¿Qué es la "s" y por qué no puedo volver a cambiar los permisos a 775 ( drwxrwxr-x)?

Matt Elhotiby
fuente

Respuestas:

25

Los mensajes que está viendo en la posición de "ejecución" en la columna de usuario y grupo son los bits SetUID (Establecer ID de usuario en ejecución) y SetGID (Establecer ID de grupo en ejecución).

Los permisos de archivos Unix son en realidad un número octal de 4 dígitos SUGO

  • S controla los bits SetUID (4), SetGID (2) y "Sticky" (1)
  • U controla los bits de lectura (4) / escritura (2) / ejecución (1) para el propietario del archivo
  • G controla los bits de lectura / escritura / ejecución para el grupo del archivo
  • O controla los bits de lectura / escritura / ejecución para todos los demás.

Puede eliminar los bits setuid de su directorio con chmod ug-s directory, ochmod 0755 directory

Para obtener más información, consulte la página de manual chmody esta página de Wikipedia sobre el bit SetUID .

Hrvoje Špoljar
fuente
Es "sgid" (no "u").
Pausado hasta nuevo aviso.
"¿Qué es el drwsrwsrwx?" <- verifique nuevamente
Hrvoje Špoljar
66
chmod 0755no no borrar el bit setuid, al menos no en Linux. Actualmente estoy probando en otros sistemas.
FUZxxl
1
POSIX dice que su implementación está definida para tipos de archivos que no sean archivos normales, ya sea que chmodcon un modo octamal borre los bits setuid, setgid y vtx.
FUZxxl
2
Para borrar el bit setuid en un directorio en Linux, use chmod 00755; ver unix.stackexchange.com/q/393531/46851
Roger Lipscombe
23

setuid y setgid

setuid y setgid (abreviatura de establecer ID de usuario tras la ejecución y establecer ID de grupo tras la ejecución, respectivamente) son indicadores de derechos de acceso de Unix que permiten a los usuarios ejecutar un ejecutable con los permisos del propietario o grupo del ejecutable. A menudo se usan para permitir a los usuarios en un sistema informático ejecutar programas con privilegios elevados temporalmente para realizar una tarea específica. Si bien los privilegios supuestos de identificación de usuario o de grupo proporcionados no siempre son elevados, como mínimo son específicos.

Para eliminar los bits setuid y setgid numéricamente, debe prefijar el patrón de bits con un 0(por ejemplo, se 0775convierte en 00775).

Ejecute para eliminar setuid y setgid:

chmod 00775 path

o

chmod a-st path
ooshro
fuente
Está en el directorio, no en el archivo
Hrvoje Špoljar
1
un directorio también es un archivo en un sistema de archivos unix, lo que ooshro dice es completamente correcto
lynxman
sí, todo es un archivo, pero la descripción no se ajusta, ya que no ejecuta algo que se parece a drwxrwxr-x: |
Hrvoje Špoljar
En Unix, el inodo es lo que obtiene los permisos.
Chris
2
GNU chmod no borra los bytes setuid y setgid en los directorios cuando lo ejecuta con un modo octamal. POSIX permite este comportamiento.
FUZxxl
2

Agregando a la respuesta de ooshro ...

Si usa permisos suid o sgid en un directorio, cualquier archivo creado dentro de ese directorio tendrá el mismo propietario (si suid) o grupo (sgid) que el directorio en cuestión.

Lo uso para mi casa Samba compartir. El directorio base es propiedad del usuario nobody y group olympia, y los permisos son 2770. Por lo tanto, debe estar en el grupo olympia para leer o escribir cualquier cosa debajo de ese directorio, y se asegurará de que olympia sea el grupo propietario de todo lo que se encuentre debajo de él. . También tengo Samba configurado para usar una máscara de dir 2770 y una máscara de archivo de 660 para mantener los permisos correctos en todo el árbol.

Baumgart
fuente