Je sauvegarde des serveurs sur un serveur de sauvegarde. Chaque serveur sauvegardé possède son propre compte sur le serveur de sauvegarde et les fichiers sont synchronisés. Il est important que les autorisations restent intactes (en utilisant rsync -p) pour simplifier les restaurations.
J'essaie de créer un script qui peut lire les fichiers et créer des statistiques. Je n'aime pas que ce script s'exécute sous l'utilisateur root, et il est également impossible de l'exécuter pour chaque utilisateur de sauvegarde, car le script devrait pouvoir lire tous les fichiers de tous les utilisateurs. Cependant, cela crée un problème lorsqu'un fichier est par exemple chmodded 600. Je ne veux pas toucher aux autorisations, mais un autre utilisateur à l'exception de root et le propriétaire ne peut pas le lire.
Un utilisateur spécifique - non root - devrait pouvoir lire tous les fichiers dans un répertoire ou une partition, quels que soient les niveaux d'autorisation (et le propriétaire des fichiers ne devrait avoir aucun moyen de l'empêcher). Existe-t-il un moyen d'y parvenir? J'utilise FreeBSD avec un volume ZFS.
la source
Réponses:
Utilisez
sudo
.Si votre
sudoers
fichier répertorie une commande exacte et spécifique, la commande doit être appelée exactement comme indiqué dans lesudoers
ou elle sera refusée.Par exemple:
Dans cet exemple, l'utilisateur
backup
peut exécuter la commande exactement comme indiqué:S'ils appellent
sudo rsync...
au lieu desudo /usr/bin/rsync
la commande échoue, ou si les indicateurs ou les chemins sont différents, la commande échoue.Si vous faites cela dans un script, vous souhaitez activer l'utilisation sans mot de passe de ces commandes:
Pour plus d'informations, voir la
sudoers(5)
page de manuel sousCmnd_list
.la source
pfexec
. Mais puisque vous êtes sur BSD,sudo
devra faire.Vous pouvez en écrire une
suid
versioncat
qui n'est exécutable que par votre utilisateur de sauvegarde (créer un groupe exclusif à l'utilisateur de sauvegarde et rendre l'exécutable lisible uniquement par ce groupe). Celacat
vous permettrait uniquement de lire des fichiers dans le répertoire qui vous intéresse. (Vous voudrez probablement interdire les liens symboliques et faire attention aux astuces comme/dir/../otherdir/
.)Ensuite, votre script peut utiliser cet exécutable pour lire des fichiers sans avoir les privilèges root.
la source
AVERTISSEMENT: comme Stephane l'a souligné dans les commentaires ci-dessous, les propriétaires des fichiers pourront toujours révoquer l'ACL.
Si vous avez un accès root à la machine, vous pouvez le faire avec les ACL :
Cela donnera un
USERNAME
accès en lecture à tous les fichiers et répertoires sous/path/to/directory
.la source
Bindfs est un système de fichiers FUSE qui fournit des vues d'une arborescence de répertoires avec différentes autorisations et propriétés. Il n'y a pas de port pour FreeBSD, mais vous pouvez compiler à partir des sources.
Pour donner à l'utilisateur
backupper
(et seulement à cet utilisateur) une vue d'/some/files
où tous les fichiers sont lisibles, montez une vue lisible par tous/some/files
dans un répertoire privé debackupper
.la source
ZFS dispose de certains mécanismes pour cela.
L'un des mécanismes est toujours en cours et n'est pas encore implémenté, mais permet de monter un jeu de données avec une priorité 'propriétaire'. Dans ce cas, vous pouvez cloner un instantané, le monter avec le propriétaire remplacé par l'utilisateur de sauvegarde, le sauvegarder, puis détruire le clone. l'inconvénient est que vous ne sauvegardez pas la véritable propriété des fichiers.
La meilleure solution est probablement les ACL de style nfsv4 ZFS
la source
J'ai deux idées pour résoudre ce problème en utilisant des technologies spécifiques à FreeBSD, mais je n'ai pas essayé non plus:
Utilisez Capsicum. C'est ma méthode préférée. De plus, comme il a récemment été porté sur Linux, il devrait également y fonctionner. Cela se passerait comme ceci:
Utilisez le contrôle d'accès obligatoire. Cela ne fonctionne pas sur Linux AFAIK, et il est plus difficile à configurer. Cela se passerait comme ceci:
ugidfw add subject uid root jailid BACKUP_JAIL_ID mode rsx
la source