Estoy trabajando en una aplicación web LAMP y hay un proceso programado en algún lugar que sigue creando una carpeta llamada shopen la raíz del sitio. Cada vez que esto aparece causa conflictos con las reglas de reescritura en la aplicación, no es bueno.
Hasta que encuentre el script ofensivo, ¿hay alguna manera de evitar que shopse cree una carpeta llamada en la raíz? Sé que puedo cambiar los permisos en una carpeta para evitar que se cambie su contenido, pero no he encontrado una manera de evitar que se cree una carpeta con un nombre determinado.
linux
directory
directory-structure
Andrés
fuente
fuente

Respuestas:
No puede, dado que el usuario que crea el directorio tiene permiso suficiente para escribir en el directorio principal.
En su lugar, puede aprovechar la
inotifyfamilia de llamadas al sistema proporcionadas por el kernel de Linux, para observar la creación (y opcionalmentemv-ing) del directorioshopen el directorio dado, si se creó (u opcionalmentemv-ed),rmel directorio.El programa de espacio de usuario que necesita en este caso es
inotifywait(viene coninotify-tools, instálelo primero si es necesario).Suponiendo que el directorio
shopresidiría en el/foo/bardirectorio, configuremos un monitoreo para la/foo/bar/shopcreación, erminstantáneamente si se crea:inotifywait -qme create /foo/barvigila el/foo/bardirectorio para cualquier archivo / directorio que pueda crearse, es decir, observe cualquiercreateeventoSi se crea,
awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'comprueba si el archivo es un directorio y el nombre esshop(/,ISDIR shop$/), de ser así,rmel directorio (system("rm -r -- /foo/bar/shop"))Debe ejecutar el comando como un usuario que tiene permiso de escritura en el directorio
/foo/barpara eliminarlo delshopdirectorio.Si también desea monitorear las
mvoperaciones de llamada, agregue también la observación demoved_toeventos:Solo para tener en cuenta, si está buscando un archivo, no un directorio, llamado
shop:fuente
inotifywaita hacer esto, también es posible que el disparador también pueda atrapar el proceso conps -efPara responder literalmente en función de la cuestión de evitar que se cree una carpeta de cierto nombre.
touch shopNo puede crear un directorio si existe un archivo con un nombre idéntico
mkdir: cannot create directory ‘shop’: File existsfuente
chattr +i shoppara hacerlo inmutable. Hasta que se elimine la bandera inmutable, ni siquiera se puede renombrar / eliminar.rename(2)seguir funcionando, ya que el nombre no es parte del inodo, pero no lo es. La búsqueda rápida en Internet no revela por qué. ¿Alguna pista?renamefuncione.¿Qué hay de secuestrar
mkdirsyscall conLD_PRELOAD...?Tenga en cuenta que dentro de este controlador puede registrar el PID del proceso que desea crear este directorio:
Debe colocar esto en la
~/.bashrcraíz (o quien esté ejecutando su aplicación) para asegurarse de que se utilizará:fuente
LD_PRELOADLos trucos como este son básicamente incorrectos, y a menos que sepas lo que estás haciendo, pueden dañar el programa en el que los cargas rompiendo propiedades como la seguridad de la señal asíncrona de la función que estás reemplazando.fopendebería tener en"a"lugar de"w", por lo que puede preservar los registros anteriores(Hubiera comentado la respuesta de Miati pero no recuerdo mi cuenta anterior y no tengo suficiente reputación en esta nueva ...)
Puede bloquear la creación creando un archivo y luego cambiando los atributos del archivo.
Entonces, cualquier intento de hacer algo con ese archivo se bloqueará, incluso si el usuario se convierte en root.
fuente
Cree un enlace simbólico que apunte a una ubicación no existente dentro de un directorio no existente. Esto tiene algunas implicaciones divertidas:
EEXIST(El archivo existe).ENOENT(No existe tal archivo o directorio)ENOENT. Por supuesto, lstat devolverá la información sobre el enlace simbólico.Esto tiene dos ventajas sobre algunas de las otras soluciones propuestas aquí: (a) no necesita un servicio en ejecución que rastrea la creación del directorio y (b) el nombre parece no existir para la mayoría de los comandos.
Tendrá que intentarlo, pero sospecho que, independientemente de las reglas de reescritura que tenga, no usan lstat u otros comandos sin referencia, lo que hace que fallen.
fuente