Tengo un cuadro ReadyNAS llamado "almacenamiento" que creo que se basa en Debian. Puedo usarlo como root. Estoy tratando de reconfigurar el servidor web, pero me encuentro con un problema de permisos de archivos que simplemente no entiendo. ¡No puedo hacer nada /etc/frontview/apache/apache.pem
incluso como root! No parece tener ningún permiso especial en comparación con otros archivos en el mismo directorio y puedo trabajar con ellos.
storage:~# whoami
root
storage:~# cd /etc/frontview/apache/
storage:/etc/frontview/apache# ls -lah apache.pem*
-rw------- 1 admin admin 4.0k Jul 10 2013 apache.pem
-rw------- 1 admin admin 4.0k Jun 9 05:57 apache.pem.2017-02-04
-rw------- 1 admin admin 1.5k Jun 9 05:57 apache.pem.orig
storage:/etc/frontview/apache# touch apache.pem
touch: creating `apache.pem': Permission denied
storage:/etc/frontview/apache# touch apache.pem.2017-02-04
storage:/etc/frontview/apache# rm -f apache.pem
rm: cannot unlink `apache.pem': Operation not permitted
¿Qué tiene de especial este archivo que no se puede tocar? No puedo borrarlo No puedo cambiar los permisos en él. No puedo cambiar el dueño de la misma.
El directorio parece estar bien. Le queda espacio, no está montado de solo lectura. De hecho, puedo editar otros archivos en el mismo directorio.
# ls -ld /etc/frontview/apache
drwxr-xr-x 8 admin admin 4096 Jun 9 05:44 /etc/frontview/apache
# df /etc/frontview/apache
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hdc1 2015824 504944 1510880 26% /
files
permissions
root
ext3
Stephen Ostermiller
fuente
fuente
ls -ld /etc/frontview/apache
ydf /etc/frontview/apache
. Tal vez la carpeta está en un espacio en disco montadoro
?# mount
::/dev/hdc1 on / type ext3 (rw,noatime)
Respuestas:
Acabo de encontrar el problema. El atributo "inmutable" se estableció en ese archivo.
ls
no lo muestra Necesita un comando diferente para verlo:Una vez que elimino el bit inmutable, puedo editar ese archivo:
fuente
ls
no tiene una opción para enumerar los atributos. Lo olvido, pero tal vez incluso la llamada del sistema para consultarlos no es portátil, por lo que probablemente fue más fácil implementarlos en una utilidad separada).ls
mostrara ese bit, o si alguno de los otros comandos que utilicé tuviera mensajes de error más útiles (y específicos) sobre por qué se negaron los permisos.touch
lo que se sabe es que la llamada al sistema que intentó (open("apache.pem", O_WRONLY|O_CREAT|..., 0666)
) fallóEACCESS
. (Usestrace -efile touch apache.pem
para ver las llamadas al sistema relacionadas con el archivo que hace). Como dice la página del manual para esa llamada al sistema , hay muchas razones posibles para EACCESS, y muchas de ellas involucran directorios principales en lugar del archivo en sí. Escribir código para deducir con precisión por qué una llamada al sistema devolvió el error que cometió sería extremadamente difícil, ya que los diferentes sistemas de archivos y sistemas operativos son diferentes ...errno
) e imprime eso. (Usando laperror
función de biblioteca estándar C , o equivalente). Este es uno de los raros casos en los que eso no siempre es una pista suficiente para que el usuario encuentre rápidamente el problema, pero la mayoría de las veces funciona muy bien. (Especialmente cuando se combinastrace
en caso de que haya alguna duda sobre exactamente qué operación produjo el error). No es perfecto, pero podría ser mucho peor (cf. MS Windows donde, en el mejor de los casos, obtienes un código de error para google).chattr +i
, y se dio cuenta de querm foo
(sin-f
) indicaciones:rm: remove write-protected regular file ‘foo’
. Debidofaccessat(AT_FDCWD, "/var/tmp/foo", W_OK) = -1 EACCES (Permission denied)
. POSIX requiererm
que se le solicite de forma predeterminada antes de eliminar archivos protegidos contra escritura y, por eso, se comprueba en primer lugar. Entonces habrías obtenido una gran pista más rápido si no lo hubieras usadorm -f
. : /access(3)
le pide al núcleo que verifique los permisos como si realmente se estuviera abriendo para escribir, por lo que recoge las ACL y los atributos.