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

4XXXbit se llama bit setuid (s), no pegajoso. Sticky es eltbit y su propósito es un poco diferente: en.wikipedia.org/wiki/Sticky_bitsetuidbit, no elstickybit. (2) No borrar elsetuidbit cuando lo hacechgrpochownsería un problema de seguridad.Respuestas:
Si desea implementar su
chgrp -R nobody /whatevermientras retiene el bit setuid, puede usar estos dosfindcomandosLa
find ... -perm 04000opción recoge archivos con el conjunto de bits setuid. El primer comando luego aplica elchgrpy luego achmodpara restablecer el bit setuid que ha sido eliminado. El segundo se aplicachgrpa todos los archivos que no tienen un bit setuid.En cualquier caso, no desea llamar
chgrpochmoden enlaces simbólicos ya que eso afectaría a sus objetivos, de ahí el! -type l.fuente
chgrptambién borra el bit setgid (y las capacidades en Linux) que también podrían necesitar ser restaurados.findfindinvocació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ímitefindenfoque con uno-exec +puede ser difícil de hacer de manera confiable si eso termina dividiendo loschmod/chgrps 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 laschgrpcoincidencias para más archivos, para cada archivo debe hacerse antes delchmods.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,
uvwel 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
chownochgrpcambiar 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
uvwel programa ahora se ejecute con un grupo efectivoxyz", pero eso no se aplica al caso en discusión.chownochgrpcambiar 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 porchgrpsí 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