¿Podría explicar por qué un archivo compilado binario (en, por ejemplo /usr/sbin
) tiene permiso de escritura para el root
usuario?
Para mí, esto está compilado. Lo que significa que la escritura directa no tiene uso y puede exponer el archivo a algún problema de seguridad de alguna manera.
Un script (por ejemplo, un bash
archivo) puede ser grabable porque es básicamente un archivo de texto, pero ¿por qué es lo mismo para un archivo compilado donde no es realmente necesario escribir hasta donde yo sé?
Gracias de antemano por sus comentarios.
linux
files
permissions
root
t1m0th33
fuente
fuente
root
tiene permiso de escritura en un archivo binario. Por lo menos, ayudaría al actualizar ese paquete.memmove()
para mover la última parte hasta el final y abra un agujero, luego inserte texto nuevo en el agujero. O puede usar una serie depread()
/pwrite()
para hacer lo mismo.ETXTBSY
). En cambio, el binario antiguo se elimina y el nuevo binario se escribe en un nuevo archivo con el mismo nombre. Eliminar archivos no requiere permisos de escritura en ellos, simplemente en el directorio que los contiene (es decir,/usr/sbin/
).Respuestas:
Realmente no importa si los archivos en
/bin
(o cualquier otro directorio estándar donde se guardan los archivos ejecutables) se pueden escribir por root o no. En un servidor Linux que estoy usando, pueden ser escritos por root, pero en mi máquina OpenBSD, no lo son.¡Mientras no sean editables por el grupo o por "otro"!
No hay problemas de seguridad que tengan, p. Ej.
Si alguien quisiera sobrescribirlo, tendrían que ser root, y si lo son
root
y sobrescribirlo, entonces sonOtra cosa a considerar es que root puede escribir en el archivo sin importar si está protegido contra escritura o no, porque ... root.
Observe también que "un script" es tanto un archivo ejecutable como un archivo binario. Un script no necesita ser escribible "porque es un archivo de texto". En todo caso, probablemente debería tener el mismo permiso que los otros ejecutables en el mismo directorio.
¡No vayas a cambiar los permisos de todo ahora! Eso puede causar todo tipo de estragos y potencialmente confundir a los administradores de paquetes que pueden verificar que los permisos estén configurados correctamente. También puede hacer que el sistema sea vulnerable si accidentalmente cambia los permisos de manera incorrecta en una aplicación crítica para la seguridad.
Simplemente suponga que los permisos en los ejecutables están configurados correctamente, a menos que encuentre algo que parezca realmente extraño, en cuyo caso probablemente debería contactar al responsable del paquete correspondiente para verificar en lugar de comenzar a cambiar las cosas.
De los comentarios y en el chat , hubo una llamada para un poco de historia.
La historia de los permisos en binarios en Linux no es algo de lo que sepa nada. Se puede especular que simplemente heredaron los permisos del directorio, o simplemente del valor predeterminado
umask
de Linux, pero realmente no lo sé.Lo que sí sé es que OpenBSD instala los binarios en el sistema base 1 con el modo de permiso 555 por defecto (
-r-xr-xr-x
). Esto se especifica en un fragmento de Makefile en el/usr/share/mk/bsd.own.mk
que se estableceBINMODE
en 555 (a menos que ya esté configurado). Esto se utiliza más tarde, cuando la instalación de los ejecutables durantemake build
en/usr/src
.Eché un vistazo al registro CVS anotado para este archivo y descubrí que esta línea en el archivo no ha cambiado desde que se importó de NetBSD en 1995.
En NetBSD, el archivo se colocó por primera vez en CVS en 1993, con
BINMODE
555.El proyecto FreeBSD parece haber usado exactamente el mismo archivo que NetBSD desde al menos 1994 , y con una confirmación posterior agrega una pista en el mensaje de confirmación de que los archivos antiguos eran de la versión 4.4BSD de Berkeley Software Distribution.
Más allá de eso, el CSRG en Berkeley mantuvo las fuentes en SCCS, pero su repositorio está disponible en forma de Git en GitHub 2 . El archivo que estamos dando al tratamiento forense aquí parece haber sido cometido por Keith Bostic (o alguien muy cercano a él) en 1990.
Así que esa es la historia. Si quieres saber por qué , entonces supongo que tendremos que preguntarle a Keith. Tenía la esperanza de ver un mensaje de confirmación para un cambio diciendo " esto debe ser 555 porque ... ", pero no.
1 Los sistemas BSD tienen una división más estricta en "sistema base" y "paquetes de terceros" (puertos / paquetes) que Linux. El sistema base es una unidad coherente que proporciona un conjunto completo de instalaciones para ejecutar el sistema operativo, mientras que los puertos o paquetes se ven como "software local" y se instalan debajo
/usr/local
.2 También está disponible un repositorio GitHub más completo de versiones de Unix desde los años 70 en adelante .
fuente
root
.chmod -R
el usuario/usr
o/var
, y sorpresa: susudo
no funciona o algo más no funciona.