¿Puedo permitir que los usuarios modifiquen un archivo que no les pertenece?

17

Me gustaría permitir que los usuarios modifiquen un archivo que es propiedad de root o algún usuario que no sea ellos mismos. Cambié el archivo a 777 y recibí "operación no permitida". He agregado al usuario al grupo del archivo y obtengo lo mismo. ¿Por qué un usuario no puede modificar un archivo al que tiene acceso de escritura?

ashleysmithgpu
fuente
1
Según esta lógica, ¿por qué no simplemente ejecutar todo como root? Si algún usuario puede cambiar algún modo, básicamente destruye todo el modelo de permisos de Unix ...
Chris Down
1
¿Qué quieres hacer? tal vez deberías echar un vistazo a sudo: linux.die.net/man/8/sudo & linux.die.net/man/5/sudoers
xx4h
El archivo tiene permisos 777, un usuario puede ir a "mv file file.old; cat file.old> file" y ahora sería el propietario del archivo y puede modificarlo. ¿Por qué no pueden "archivo chmod 777"?
ashleysmithgpu
55
No, solo pueden hacerlo si tienen permiso de escritura en el directorio. Si el usuario tiene el derecho de cambiar los permisos de un archivo que no posee, configurando el modo 04777 y copiando / usr / bin / env en él, podría ejecutar cualquier comando como ese usuario.
Stéphane Chazelas
@StephaneChazelas Ese es un argumento extraño porque el núcleo podría decidir fácilmente (¡y lo hace!) Permitir a los no propietarios tales cambios sin estar obligados por esa decisión de permitirles todo tipo de cambios. Después de todo, SUID se restablece incluso cuando un no propietario escribe el archivo.
Hauke ​​Laging

Respuestas:

8

¿Por qué un usuario no puede modificar un archivo al que tiene acceso de escritura?

Para los derechos de acceso normales, esta es una decisión de diseño. Necesitas richacls : WRITE_ACLy tal vez WRITE_OWNER.

Hauke ​​Laging
fuente
1
Y debe advertir que Richacls no está generalmente disponible.
sendmoreinfo
@sendmoreinfo El artículo de Wikipedia dice eso y obviamente debe leerse ya que mi respuesta no explica qué son los richacls y cómo se usan. Es ridículo considerar una respuesta correcta "no útil" debido a esto. Especialmente porque no hay una alternativa equivalente. La próxima vez realice una edición si cree que dicha información es necesaria.
Hauke ​​Laging
Ya veo, es una decisión de diseño, gracias
ashleysmithgpu
2
Obviamente usó la función, así que explíquela usted mismo, en sus propias palabras.
sendmoreinfo
10

Los permisos de Unix están diseñados para ser simples. Necesita el permiso de lectura para leer de un archivo, el permiso de escritura para escribir en un archivo y el permiso de ejecución para ejecutar un archivo. Necesita poseer un archivo para modificar sus metadatos¹.

Permitir que un usuario que puede leer un archivo otorgue a otros el permiso de lectura, o permitir que un usuario que puede escribir un archivo otorgue a otros el permiso de escritura, no cambiaría mucho el modelo de seguridad. Esto se debe a que los permisos de Unix son discrecionales: un usuario que puede leer un archivo puede exponer su contenido a otros usuarios, incluso si estos otros usuarios no pudieran leer el archivo (y de manera similar para escribir, el usuario podría actuar como un proxy y escribir en nombre de otros).

Por otro lado, permitir que un usuario otorgue un permiso que no tiene rompería completamente el sistema de permisos: el usuario podría otorgarse todos los permisos.

Es bastante raro que necesite cambiar los permisos de un archivo que no es de su propiedad. Por lo general, debe hacer los arreglos para que el archivo tenga los permisos correctos tan pronto como se cree. Si realmente lo necesita, puede otorgarle al usuario sudo chmodderechos para un modo particular y un archivo particular (por ejemplo joe: ALL = (ALL) chmod g+r /path/to/file).

¹ Excepto por los tiempos de acceso y modificación, que son particulares porque la lectura o escritura en el archivo también los establece.

Gilles 'SO- deja de ser malvado'
fuente
En mi caso de uso, hay un proceso web (por www-data) y un proceso cli (por mí mismo), que desean establecer permisos en un archivo. Me agregué al grupo www-data, pero esto no es suficiente.
donquixote
Incluso cambiar el propietario / grupo a mí mismo: www-data no ayuda. (No he diseñado el mecanismo que intenta establecer los permisos, no tengo control sobre él)
donquixote