
El problema básico es que tengo un QNAP conectado a un dominio y quiero publicar las instantáneas de RSnapshot a través de Samba para que los usuarios puedan recuperar sus propios archivos a partir de las copias de seguridad. (Según el procedimiento RSnapshot original:http://rsnapshot.org/rsnapshot/docs/docbook/rest.html#restoring-backups)
Sin embargo, a menos que establezca una ACL predeterminada (setfacl -mg:MYDOM\Domain\ Users:rx) que heredarán las nuevas instantáneas, simplemente no puedo explorar el contenido de las instantáneas compartidas.
Descripción general de RSnapshot
Crea instantáneas cada hora/diario/semanal/mensual y conserva correctamente las ACL estándar y extendida de Linux. Las instantáneas se almacenan en el siguiente directorio:
/share/CACHEDEV1_DATA/Local Backups
Para evitar que se produzcan cambios en los permisos, borré las ACL predeterminadas de ese directorio y simplemente configuré los permisos predeterminados. Los permisos son:
# ls -al
drwxrwxrwx 4 admin administ 4096 Nov 22 17:00 Local Backups/
# getfacl Local\ Backups/
# file: Local Backups/
# owner: admin
# group: administrators
user::rwx
user:admin:rwx
user:guest:---
group::rwx
group:MYDOM\domain\040users:r-x
mask::rwx
other::rwx
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::rwx
Esto significa que los permisos predeterminados de los subdirectorios de instantáneas (hora.0, hora.1, etc.) se ven así:
# cd hourly.0
# ls -al
drwxrwxrwx 3 admin administ 4096 Nov 22 16:02 ./
# getfacl .
# file: .
# owner: admin
# group: administrators
user::rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::rwx
En este punto, RSnapshot está completamente probado y funciona como se esperaba. (Los permisos son bastante liberales para determinar si el problema son los permisos de FS o Samba).
Descripción general de la samba
Creé un recurso compartido a través de WebGUI llamado LocalBackups y, al revisar el archivo smb.conf, espero que funcione sin modificaciones. Aunque puedo acceder bien al directorio LocalBackups, cada vez que intento acceder a una de las copias de seguridad, es decir, hora.0, hora.1, etc., aparece el mensaje de error "No tienes permisos para acceder a \192.168.1.20\LocalBackups\". cada hora.0.
Desde smb.conf, la sección [global] es:
[global]
# Add this, apparently Windows 7 Bug.
# acl allow execute always = yes
log level = 3
passdb backend = smbpasswd
workgroup = MYDOM
security = ADS
server string =
encrypt passwords = Yes
username level = 0
#map to guest = Bad User
null passwords = yes
max log size = 10
socket options = TCP_NODELAY SO_KEEPALIVE
os level = 20
preferred master = no
dns proxy = No
smb passwd file=/etc/config/smbpasswd
username map = /etc/config/smbusers
guest account = guest
directory mask = 0777
create mask = 0777
oplocks = yes
locking = yes
disable spoolss = no
load printers = yes
veto files = /.AppleDB/.AppleDouble/.AppleDesktop/:2eDS_Store/Network Trash Folder/Temporary Items/TheVolumeSettingsFolder/.@__thumb/.@__desc/:2e*/.@__qini/.Qsync/.@upload_cache/.qsync/.qsync_sn/.@qsys/.streams/.digest/
delete veto files = yes
map archive = no
map system = no
map hidden = no
map read only = no
deadtime = 10
server role = auto
use sendfile = yes
unix extensions = no
store dos attributes = yes
client ntlmv2 auth = yes
dos filetime resolution = no
wide links = yes
#force unknown acl user = yes
force unknown acl user = yes
template homedir = /share/homes/DOMAIN=%D/%U
inherit acls = yes
domain logons = no
min receivefile size = 256
case sensitive = auto
domain master = auto
local master = no
enhance acl v1 = yes
remove everyone = yes
conn log = no
kernel oplocks = no
max protocol = SMB2_10
smb2 leases = yes
durable handles = yes
kernel share modes = no
posix locking = no
lock directory = /share/CACHEDEV1_DATA/.samba/lock
state directory = /share/CACHEDEV1_DATA/.samba/state
cache directory = /share/CACHEDEV1_DATA/.samba/cache
printcap cache time = 0
acl allow execute always = yes
server signing = disabled
aio read size = 1
aio write size = 0
streams_depot:delete_lost = yes
streams_depot:check_valid = no
fruit:nfs_aces = no
fruit:veto_appledouble = no
winbind expand groups = 1
pid directory = /var/lock
printcap name = /etc/printcap
printing = cups
show add printer wizard = no
realm = mydom.local
ldap timeout = 5
password server = mydc001.mydom.local
pam password change = yes
winbind enum users = Yes
winbind enum groups = Yes
winbind cache time = 3600
idmap config * : backend = tdb
idmap config * : range = 400001-500000
idmap config MYDOM : backend = rid
idmap config MYDOM : range = 10000001-20000000
host msdfs = yes
vfs objects = shadow_copy2 acl_xattr catia fruit qnap_macea streams_depot aio_pthread
La sección [LocalBackups] es:
[LocalBackups]
comment =
path = /share/CACHEDEV1_DATA/Local Backups
browsable = yes
oplocks = yes
ftp write only = no
recycle bin = no
recycle bin administrators only = no
qbox = no
public = yes
#invalid users = "guest"
#read list = @"MYDOM\Domain Users"
#write list = "admin"
#valid users = "root","admin",@"MYDOM\Domain Users"
guest ok = yes
read only = yes
inherit permissions = no
shadow:snapdir = /share/CACHEDEV1_DATA/_.share/LocalBackups/.snapshot
shadow:basedir = /share/CACHEDEV1_DATA/Local Backups
shadow:sort = desc
shadow:format = @GMT-%Y.%m.%d-%H:%M:%S
smb encrypt = disabled
strict allocate = yes
streams_depot:check_valid = yes
mangled names = yes
admin users =
admin only = "admin"
#nt acl support = no
Con esta configuración, puedo ingresar al directorio LocalBackupds, pero no puedo ingresar a ninguno de los subdirectorios de instantáneas, es decir, hourly.0, hourly.1, etc.
Las líneas comentadas son cosas que he intentado para ver si hacen una diferencia, pero el comportamiento ha sido consistente con o sin las líneas comentadas.
Si cambio la ACL en uno de los directorios de instantáneas (es decir, cada hora.0) para incluir MYDOM\Domain Users, puedo ingresar a ese directorio (es decir, cada hora.0) a través de Samba. Los permisos del directorio son entonces:
# cd hourly.0
# ls -al
drwxrwxrwx 3 admin administ 4096 Nov 22 18:00 ./
# getfacl .
# file: .
# owner: admin
# group: administrators
user::rwx
group::rwx
group:MYDOM\domain\040users:rwx
mask::rwx
other::rwx
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::rwx
En este punto, no he podido descubrir cómo habilitar el inicio de sesión adecuado en QNAP. A partir de la información de registro básica de WebUI, puedo ver la solicitud de conexión SMB pasando con mi nombre de usuario, etc. Me inclino por que la configuración de Samba sea más estricta que los permisos de FS, pero supongo.
En este punto no estoy seguro si mis conocimientos sobre ACL, Samba o ambos me están fallando. ¿Algunas ideas?
Respuesta1
En lugar de intentar resolver esto a través de Samba, restablecí la configuración de samba al valor predeterminado que creó QNAP. (Es decir, descomentar las líneas comentadas. Esto también parece más seguro a largo plazo, ya que la GUI web puede potencialmente sobrescribir el smb.conf
archivo optimizado si yo u otros administradores creamos nuevos recursos compartidos, etc.).
Luego cambio los permisos del sistema de archivos para agregar la ACL extendida para el MYDOM\Domain Users
grupo con lectura r+x
para los directorios:
/share
/share/CACHEDEV1_DATA
/share/CACHEDEV1_DATA/homes
De esta manera, cuando se realiza una copia de seguridad de los archivos, los usuarios del dominio pueden navegar hasta el homes
directorio. Sin embargo, dado que no existe una ACL predeterminada que se hereda del directorio de instantáneas ( /share/CACHEDEV1_DATA/Local Backups
) ni cambios en los directorios de inicio del usuario, solo los usuarios originales pueden acceder a sus propios directorios de inicio.
Cambios en la instantánea RS
Pensé que las ACL extendidas se conservaban. No lo eran, sólo parecía correcto porque las ACL estándar de los directorios principales estaban configuradas con un usuario y un grupo de dominio. Entonces se conservaron las ACL estándar, pero no las extendidas. Para solucionar este problema, edité el script rsnapshot y agregué la -A
bandera a rsync cambiando:
my $default_rsync_short_args = '-a';
a
my $default_rsync_short_args = '-aA';
Para arreglar el acceso a los directorios de instantáneas (es decir, cada hora.0, etc.), también agregué un cambio de permiso a la create_backup_point_dir
función agregando justo en la parte inferior de la función:
system("setfacl -m g:MYDOM\\\\Domain\\ Users:rx \"$destpath\"");
Ahora funciona como se esperaba y los usuarios pueden recuperar sus propios archivos privados a partir de copias de seguridad. :)
Intentaré incluir esto en un parche para rsnapshot una vez que haya realizado más pruebas.