Usando setfacl para crear permisos recursivos para Apache con rsync

Usando setfacl para crear permisos recursivos para Apache con rsync

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 rsyncesté utilizando el interruptor -Ao --acls. Esto le indica rsyncque 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-dataademá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 datadirectorio 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 datadirectorio 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 gophertiene rwxacceso:

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

información relacionada