Tenemos imágenes de Linux basadas en HR; en el que tengo que "aplicar" algún "archivo especial" para actualizarlos a la última versión de desarrollo de nuestro producto.
La persona que creó el archivo pensó que dentro de nuestra imagen base, algunos permisos son incorrectos; entonces nos dijeron que corrieramos
sudo chgrp -R nobody /whatever
Nosotros hicimos eso; y más tarde, cuando nuestra aplicación se está ejecutando, surgieron problemas oscuros.
Lo que encontré más adelante: la llamada a chgrp va a borrar la información de bit setuid en nuestros archivos binarios en / lo que sea.
Y el problema real es: algunos de nuestros binarios deben tener ese bit setuid establecido para funcionar correctamente.
Larga historia corta: ¿hay alguna manera de ejecutar ese comando "chgrp" sin matar mis bits setuid?
Acabo de ejecutar lo siguiente en mi Ubuntu local; conduciendo al mismo resultado:
mkdir sticky
cd sticky/
touch blub
chmod 4755 blub
ls -al blub
-> me muestra el nombre del archivo con fondo rojo -> entonces, sí, setuid
chgrp -R myuser .
ls -al blub
-> me muestra el nombre del archivo sin fondo rojo -> setuid se ha ido
4XXX
bit se llama bit setuid (s
), no pegajoso. Sticky es elt
bit y su propósito es un poco diferente: en.wikipedia.org/wiki/Sticky_bitsetuid
bit, no elsticky
bit. (2) No borrar elsetuid
bit cuando lo hacechgrp
ochown
sería un problema de seguridad.Respuestas:
Si desea implementar su
chgrp -R nobody /whatever
mientras retiene el bit setuid, puede usar estos dosfind
comandosLa
find ... -perm 04000
opción recoge archivos con el conjunto de bits setuid. El primer comando luego aplica elchgrp
y luego achmod
para restablecer el bit setuid que ha sido eliminado. El segundo se aplicachgrp
a todos los archivos que no tienen un bit setuid.En cualquier caso, no desea llamar
chgrp
ochmod
en enlaces simbólicos ya que eso afectaría a sus objetivos, de ahí el! -type l
.fuente
chgrp
también borra el bit setgid (y las capacidades en Linux) que también podrían necesitar ser restaurados.find
find
invocación. No me gustan las líneas largas en SE cuando tienes que desplazar el texto. Mi adición de la! -tipo que lo hice ir al límitefind
enfoque con uno-exec +
puede ser difícil de hacer de manera confiable si eso termina dividiendo loschmod
/chgrp
s en varias invocaciones.find . ! -type l -exec chgrp nobody {} + \( -perms -6000 -exec chmod gu+s {} + -o -perms -4000 -exec chmod u+s {} + -o -perms -2000 -exec chmod g+s {} + \)
debería estar bien. Debido a laschgrp
coincidencias para más archivos, para cada archivo debe hacerse antes delchmod
s.Borrar bits SUID y SGID en
chgrp
(ochown
) es perfectamente razonable. Es una medida de seguridad para evitar problemas de seguridad. Para SGID (en ejecutables, supongo) significa ejecutar este programa con un grupo efectivo del propietario del grupo .Si cambia el propietario del grupo, entonces, en términos de seguridad y control de acceso, esto es algo completamente diferente, es decir, en lugar de ejecutarse con un grupo efectivo,
uvw
el programa ahora se ejecuta con un grupo efectivoxyz
.Por lo tanto, debe restaurar el bit SUID o SGID explícitamente en el cambio de propiedad.
Anexo: En el reclamo de que chgrp (o chown) solo debe borrar SGID (o SUID, resp.)
Al cambiar
chown
ochgrp
cambiar 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 la configuración equivocada de SUID o SGID.Entonces, no hay una razón más profunda por la cual Unix se comporta de esta manera, es solo una decisión de diseño conservadora.
fuente
uvw
el programa ahora se ejecute con un grupo efectivoxyz
", pero eso no se aplica al caso en discusión.chown
ochgrp
cambiar la configuración de seguridad, esta es una razón suficiente para eliminar los atributos de elevación de privilegios. Hay muchas posibilidades de que esto de otra manera golpee a los incautos.La eliminación del bit
setuid
,setgid
(al menos en Linux) en los no directorios se realiza por el núcleo en lachown()
llamada del sistema realizada porchgrp
, no porchgrp
sí mismo. Entonces, la única forma es restaurarlo después.También borra las capacidades de seguridad.
Entonces, en GNU Linux:
Y ejecuta (como
root
):para cambiar el grupo al intentar preservar los permisos.
Recurrentemente, podrías hacer:
(todo lo que se supone que nada está alterando los archivos al mismo tiempo).
fuente
Como es habitual en la administración, hay muchos caminos por recorrer.
La solución que puse en su lugar es la siguiente:
fuente