Estoy respaldando servidores en un servidor de respaldo. Cada servidor que está respaldado tiene su propia cuenta en el servidor de respaldo, y los archivos están sincronizados. Es importante que los permisos permanezcan intactos (usando rsync -p) para simplificar las restauraciones.
Estoy tratando de crear un script que pueda leer los archivos y crear algunas estadísticas. No me gusta que el script se ejecute bajo el usuario root, y también es imposible ejecutarlo para cada usuario de respaldo, ya que el script debería poder leer todos los archivos de todos los usuarios. Sin embargo, esto crea un problema cuando un archivo es, por ejemplo, chmodded 600. No quiero tocar los permisos, pero otro usuario excepto el root y el propietario no pueden leerlo.
Un usuario específico, no root, debería poder leer todos los archivos en un directorio o partición, independientemente de los niveles de permiso (y el propietario de los archivos no debería tener forma de evitarlo). ¿Hay una manera de lograr esto? Estoy ejecutando FreeBSD con un volumen ZFS.
fuente
Respuestas:
Uso
sudo
.Si su
sudoers
archivo enumera un comando exacto y específico, entonces el comando debe llamarse exactamente como se indica ensudoers
o se rechazará.P.ej:
En este ejemplo, el usuario
backup
puede ejecutar el comando exactamente como se muestra:Si llaman en
sudo rsync...
lugar delsudo /usr/bin/rsync
comando falla, o si los indicadores o las rutas son diferentes, el comando falla.Si está haciendo esto en un script, entonces desea habilitar el uso sin contraseña de esos comandos:
Para más información, vea la
sudoers(5)
página del manual debajoCmnd_list
.fuente
pfexec
. Pero como estás en BSD,sudo
tendrá que hacerlo.Puede escribir una
suid
versión decat
eso que solo sea ejecutable por su usuario de respaldo (haga un grupo exclusivo para el usuario de respaldo y haga que el ejecutable sea legible solo por ese grupo). Estocat
solo le permitiría leer archivos en el directorio que le interesa. (Probablemente desee no permitir enlaces simbólicos y estar atento a trucos como/dir/../otherdir/
).Entonces su script puede usar este ejecutable para leer archivos sin tener privilegios de root.
fuente
ADVERTENCIA: Como Stephane señaló en los comentarios a continuación, los propietarios de los archivos aún podrán revocar la ACL.
Si tiene acceso de root a la máquina, puede hacer esto con las ACL :
Esto le dará
USERNAME
acceso de lectura a todos los archivos y directorios en/path/to/directory
.fuente
Bindfs es un sistema de archivos FUSE que proporciona vistas de un árbol de directorios con diferentes permisos y propiedad. No hay puerto para FreeBSD, pero puede compilar desde la fuente.
Para darle al usuario
backupper
(y solo a ese usuario) una vista de/some/files
dónde se pueden leer todos los archivos, monte una vista de lectura mundial/some/files
en un directorio privado debackupper
.fuente
ZFS tiene algunos mecanismos para esto.
Uno de los mecanismos aún está en proceso y aún no está implementado, pero permite que un conjunto de datos se monte con una anulación de "propietario". En este caso, podría clonar una instantánea, montarla con el propietario anulado al usuario de copia de seguridad, hacer una copia de seguridad y luego destruir el clon. La desventaja es que no respaldas la propiedad real de los archivos.
La mejor solución es probablemente las ACL de estilo ZFS nfsv4
fuente
Tengo dos ideas sobre cómo resolver este problema utilizando tecnologías específicas de FreeBSD, aunque tampoco lo he intentado:
Use pimiento. Este es mi método preferido. Además, dado que recientemente se ha portado a Linux, también debería funcionar allí. Iría así:
Utilice el control de acceso obligatorio. Esto no funciona en Linux AFAIK, y es más difícil de configurar. Iría así:
ugidfw agregar sujeto uid root jailid BACKUP_JAIL_ID modo rsx
fuente