Accorder des autorisations utilisateur à tous les fichiers et dossiers

9

Je souhaite qu'un utilisateur ait accès à tous les fichiers et dossiers du système. C'est dans le but d'utiliser RSYNC sur une machine locale pour sauvegarder une machine distante.

Pour le moment, nous utilisons l'utilisateur backupset bien que nous ayons ajouté cet utilisateur aux groupes sudoet adminrsync renvoie toujours des messages comme:

rsync: opendir "/ location / to / folder" a échoué: autorisation refusée (13)

rsync: send_files n'a pas réussi à ouvrir "/ location / to / file": autorisation refusée (13)

Toute idée de la façon dont nous donnons à l'utilisateur la backupspermission d'accéder à tout (à moins d'ajouter l'utilisateur à tous les groupes - le serveur distant que nous essayons de sauvegarder est un serveur d'hébergement dédié où chaque compte a son propre utilisateur sur le système).

Merci pour toute aide.

Thomas Clayson
la source
1
Pouvez-vous donner des exemples de chemins? Si c'est le cas /proc, /devetc. , des erreurs sont à prévoir.
Phil
ajouter un utilisateur backupsà sudoet adminne pas changer quoi que ce soit.
favadi
@Phil J'essaie de sauvegarder tout le répertoire / home. Les fichiers / répertoires qui échouent sont ceux tels que ceux /home/a/c/account/users/mail:usernamequi ont des autorisations similaires drwx------et qui leur appartiennent mail:4096. Je suppose que parce que l'utilisateur backupsest dans le groupe sudoou adminqu'il n'y a pas accès car il n'y a pas d'autorisations d'accès pour les groupes? Je ne sais pas, mais son erreur sur les dossiers / fichiers comme ça.
Thomas Clayson
@favadi Je l'ai déjà fait ... ne fonctionne toujours pas.
Thomas Clayson
Vous devrez exécuter la rsynccommande avec sudo.
Phil

Réponses:

6

Le simple fait d'ajouter l'utilisateur backupsau groupe d'utilisateurs sudone donne pas automatiquement au compte l'accès à tous les fichiers du système. Il donne à l'utilisateur l'autorisation d'exécuter la sudocommande.

Étant donné que vous utilisez l'authentification par clé publique (probablement sans phrase secrète), j'aborderais cela avec la sécurité et la facilité de mise en œuvre à l'esprit. L'utilisation sshvous permet de restreindre l'utilisateur à exécuter uniquement des commandes très spécifiques. Dans ce cas, vous pouvez autoriser l'utilisateur backupsà exécuter rsyncavec des autorisations de superutilisateur.

Vous avez déjà effectué l'échange de clés et l'authentification vérifiée a réussi. Dans le authorized_keysfichier sur l'hôte distant à partir duquel vous sauvegardez le /homerépertoire, vous pouvez ajouter une command=directive à la clé utilisée par l'utilisateur backups. Cette directive autorise uniquement l' exécution de cette commande lorsque cette clé est utilisée pour l'authentification. Ainsi, le premier champ de la clé ressemblerait à ceci:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

Vous pouvez aller encore plus loin et ajouter plus d'options à la clé, telles que from=myhost,no-pty,no-X11-forwarding.

Cela devrait vous donner une sécurité décente et ne pas vous obliger à modifier les autorisations du système de fichiers sous-jacent. Vous devrez probablement jouer avec la commande que vous placez dans le authorized_keysfichier jusqu'à ce qu'elle fonctionne comme prévu; cela peut prendre un peu pour envelopper votre cerveau autour de lui. La commande spécifiée dans le authorized_keysremplacera essentiellement les rsyncoptions que vous passerez de l'hôte qui se connecte.

Beaucoup de bonnes informations man sshd. Vous souhaitez lire spécifiquement la section AUTHORIZED_KEYS FORMAT.

George M
la source
D'accord, je suis, je pense. L'ajout de cette directive au fichier authorized_keys vous permettra d'exécuter une commande à distance avec des autorisations de superutilisateur, n'est-ce pas? Comment changer la commande rsync -e ssh -az [email protected]:/home /location/of/local/folderpour lui demander de s'exécuter en tant que superutilisateur sur la machine distante? Ou le fera-t-il automatiquement? Merci pour votre temps et votre aide. :)
Thomas Clayson
1
La directive ne vous permet pas automatiquement d'exécuter la commande en tant que superutilisateur. Lorsque cette clé spécifique est utilisée pour l'authentification, elle limite l'utilisateur à SEULEMENT la commande spécifiée. Les autorisations de superutilisateur proviennent de "sudo". Techniquement, vous pouvez placer l'intégralité de votre commande "rsync" dans le fichier authorized_keys et simplement lancer la connexion ssh à partir de l'hôte de sauvegarde. L'ensemble du processus démarre alors automatiquement une fois l'authentification terminée. Je voudrais commencer la connexion avec quelque chose comme "ssh backups @ remotehost sudo rsync"
George M
Il faut un peu pour envelopper votre cerveau, mais c'est plutôt cool quand il clique enfin et que vous réalisez ce que vous pouvez faire.
George M
2

Une option consiste à exécuter un serveur rsync sur le système distant.

Fondamentalement, créez un rsync.confavec uid=rootpuis utilisez rsync -az rsync://domain.com.

Voir http://pastebin.com/5hQx1mRV pour un exemple écrit par quelqu'un d'autre et Configuration du démon rsync pour quelques notions de base sur l'activation d'un serveur dans Ubuntu.

Notez que vous devez considérer la sécurité de ceci. Une meilleure approche consiste probablement à pousser le système distant vers votre système local.

Mikel
la source
Ça a l'air plutôt bien merci. Cela va-t-il alors tout resynchroniser du /backup/lcdossier sur le serveur distant? Dois-je changer le pathbit /homepour que cela fonctionne?
Thomas Clayson
Merci pour le mec édité. Le seul problème avec cela est que nous ne pouvons pas garantir une adresse IP statique où nous sommes, et nous voulons le faire via cron afin que cela se produise tout le temps. Si nous «poussons», cela pourrait cesser de fonctionner si notre adresse IP change. : /
Thomas Clayson
@ThomasClayson: C'est à cela que sert le DNS dynamique. :)
Warren Young
1

Vous pouvez peut-être utiliser ACL si le système de fichiers sous-jacent le prend en charge.

Vous devez ajouter la sauvegarde de groupe dans l'ACL de chaque fichier et répertoire. Mais pour être ajouté automatiquement pour le fichier et le répertoire nouvellement créés, vous devez d'abord définir l'ACL par défaut sur tous les répertoires existants. Donc sur le serveur distant:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

Ensuite, vous devez avoir l'autorisation rx pour tous les répertoires existants et lire les fichiers. Vous pouvez le faire avec 2 commandes (sans le -d cette fois)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

Cela vous donnera une autorisation supplémentaire pour lire les fichiers dans la sauvegarde de groupe sans changer l'utilisateur et le groupe existants qui sont propriétaires de chaque fichier.

Remarque: pour accélérer la recherche | Commande xargs vous pouvez ajouter l'option suivante à la commande xargs: -P navec n le nombre de processus parallèles. Vous pouvez le régler sur le nombre de CPU que vous avez sur votre machine + 1.

Huygens
la source
Les xargs parallèles n'accéléreront pas les choses dans ce cas, car le goulot d'étranglement est les E / S, pas le CPU.
Mikel
Linux utilise des caches en mémoire avant de valider les modifications sur le disque, donc cela semble plus rapide du point de vue de l'utilisateur. Et même un petit disque dur d'ordinateur portable pourrait gérer la charge de définir plusieurs ACL en parallèle. Ce n'est pas tant d'E / S. Essayez-le :)
Huygens
Je viens de lire ici superuser.com/a/422954/53206 que vous pourriez simplement utiliser: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) beaucoup plus simple!
Huygens