Tengo una instalación de Dokuwiki localmente, que sincronizo regularmente con mi servidor con rsync. También le daré a un amigo mío una cuenta ssh y alojaré su instalación pública de Dokuwiki. Sin embargo, tengo un problema con los permisos de acceso: aunque el espejo es de sólo lectura, Dokuwiki todavía necesita permisos de escritura en el directorio de datos para caché, etc. El servidor Apache se ejecuta como usuario www-data, y cada vez que lo hago un rsync, restablece los permisos.
Según algunas otras respuestas en este sitio, intenté usar setfacl para establecer permisos predeterminados, pero no parece funcionar: getfacl indica que los permisos existen, pero Dokuwiki no se ejecuta y cuando intento escribir un archivo como usuario www-data, tampoco funciona. ¿Qué me estoy perdiendo?
wiki/data$ sudo su www-data
$ pwd
/var/www/wiki/data
$ whoami
www-data
$ touch hi
touch: cannot touch `hi': Permission denied
$ getfacl /var/www/wiki/data
getfacl: Removing leading '/' from absolute path names
# file: var/www/wiki/data
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Aquí está el comando que utilicé para configurar los permisos:
setfacl -R -d -m u:www-data:7 /var/www/*
Respuesta1
Problema #1: Rsync está eliminando las ACL
Después de aplicar los permisos de ACL, debe tener cuidado de que cuando realice su uso rsync
esté utilizando el interruptor -A
o --acls
. Esto le indica rsync
que se asegure de conservarlos al realizar la sincronización.
extracto de la página de manual de rsync
-A, --acls preserve ACLs (implies -p)
Problema #2: Sin permisos ACL
Al observar su ejemplo, contiene los permisos siguientes.
permanentes tradicionales
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
ACL
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Pero estas ACL son para la creación de nuevos objetos y no funcionan exactamente como cree. Aún debe crear una entrada para el usuario www-data
además de los permisos ACL predeterminados.
Ejemplo
$ pwd
/tmp/somedir
$ mkdir data
$ setfacl -R -d -m u:gopher:7 data
$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Un experimento
Ahora intentemos escribir un archivo en el data
directorio como usuario gopher
.
$ sudo -u gopher touch /tmp/somedir/data/afile
touch: cannot touch `/tmp/somedir/data/afile': Permission denied
¿Parecer familiar?
Agregar permisos ACL adicionales
Es porque necesita agregar una ACL para el usuario www-data
, las reglas predeterminadas no son para el acceso, son para crear nuevos archivos/directorios.
$ setfacl -R -m u:gopher:7 data
Ahora revisa el data
directorio nuevamente:
$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
user:gopher:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
La única diferencia es que ahora tenemos una ACL que dice que el usuario gopher
tiene rwx
acceso:
user:gopher:rwx
Repita el experimento
Intente escribir datos en el directorio nuevamente:
$ sudo -u gopher touch /tmp/somedir/data/afile
$
¡¡¡Funcionó!!! Verifique dos veces el archivo resultante:
$ ls -l /tmp/somedir/data/afile
-rw-rw-r--+ 1 gopher gopher 0 Oct 7 21:36 /tmp/somedir/data/afile