GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo evitar que chgrp borre el "bit setuid"?

Si desea implementar su chgrp -R nobody /whatever mientras conserva el bit setuid, puede usar estos dos find comandos

find /whatever ! -type l -perm -04000 -exec chgrp nobody {} + \
                                      -exec chmod u+s {} +
find /whatever ! -type l ! -perm -04000 -exec chgrp nobody {} +

El find ... -perm 04000 La opción recoge archivos con el conjunto de bits setuid. El primer comando luego aplica el chgrp y luego un chmod para restablecer el bit setuid que se ha eliminado. El segundo aplica chgrp a todos los archivos que no tienen un bit setuid.

En cualquier caso, no quieres llamar a chgrp o chmod en los enlaces simbólicos, ya que eso afectaría a sus objetivos, de ahí el ! -type l .


Borrado de bits SUID y SGID en chgrp (o chown ) es perfectamente razonable. Es una medida de seguridad para prevenir problemas de seguridad. Para SGID (en ejecutables, supongo) significa ejecutar este programa con el grupo efectivo del propietario del grupo .

Si cambia el propietario del grupo, en términos de seguridad y control de acceso, esto es algo completamente diferente, es decir, en lugar de ejecutarse con el grupo efectivo uvw el programa ahora se ejecuta con el grupo efectivo xyz .

Por lo tanto, debe restaurar el bit SUID o SGID explícitamente en el cambio de propiedad.

Anexo:sobre la afirmación de que chgrp (o chown) solo debe borrar SGID (o SUID, respectivamente)

Por chown ing o chgrp Al pedirle que cambie la configuración de seguridad de un ejecutable, esta es una razón suficiente para borrar cualquier atributo de elevación de privilegios. El poder de Unix proviene de la simplicidad conceptual, y la seguridad de Unix ya es bastante complicada. Con este fin, eliminar SUID y SGID en cualquier cambio de propiedad es simplemente una red de seguridad; después de todo, en la historia de Unix/Linux hubo bastantes vulnerabilidades debido a configuraciones erróneas de SUID o SGID.

Así que no hay una razón más profunda por la que Unix se comporte de esta manera, es solo una decisión de diseño conservador.


La limpieza del setuid , setgid bit (al menos en Linux) en no directorios lo realiza el kernel en el chown() llamada al sistema realizada por chgrp , no por chgrp sí mismo. Entonces, la única forma es restaurarlo después.

También borra las capacidades de seguridad.

Entonces, en GNU Linux:

chown_preserve_sec() (
  newowner=${1?}; shift
  for file do
    perms=$(stat -Lc %a -- "$file") || continue
    cap=$(getfattr -m '^security\.capability$' --dump -- "$file") || continue
    chown -- "$newowner" "$file" || continue
    [ -z "$cap" ] || printf '%s\n' "$cap" | setfattr --restore=-
    chmod -- "$perms" "$file"
  done
)

Y ejecuta (como root ):

chown_preseve_sec :newgroup file1 file2...

para cambiar el grupo al intentar conservar los permisos.

De forma recursiva, podrías hacer:

# save permissions (and ACLs). Remove the "# owner" and "# group" lines
# to prevent them being restored!
perms=$(getfacl -RPn . | grep -vE '^# (owner|group): ')
# save capabilities
cap=$(getfattr -Rhm '^security\.capability$' --dump .)

chgrp -RP nobody .

# restore permissions, ACLs and capabilities
printf '%s\n' "$perms" | setfacl --restore=-
[ -z  "$cap" ] || printf '%s\n' "$cap" | setfattr -h --restore=-

(todo eso suponiendo que nada interfiera con los archivos al mismo tiempo).


Linux
  1. Journalctl:¿Cómo evitar que el texto se trunque en la terminal?

  2. ¿Evitar que Tmux se inicie en Ssh?

  3. ¿Cómo evitar que `ls` ordene la salida?

  4. ¿Evitar que Signint llegue a los procesos secundarios?

  5. Cómo evitar que un proceso escriba archivos

Comando Chgrp en Linux (Cambiar grupo)

Comando Chgrp de Linux para principiantes (5 ejemplos)

Comando Chgrp de Linux con ejemplos

Aprenda el uso del comando chgrp (Change Group) en Linux

HDD Power-Up en Standby:evita que gire

Linux NFLOG - documentación, configuración desde C