Supprimer les fichiers créés par un autre utilisateur avec rsync

0

Problème

J'ai le scénario suivant:

  • motion crée des répertoires et des fichiers avec l'utilisateur: groupe motion:motionet les autorisations755
  • en tant que tâche périodique, j'aimerais copier périodiquement ces fichiers sur un ordinateur distant , puis les supprimer . La commande que j'essaie d'utiliser est

    sudo rsync -avz --remove-source-files /home/pi/Pictures/SecurityCamera/ username@host:/Users/username/Pictures/SecurityCamera

  • Les fichiers sont correctement copiés sur la machine distante . Toutefois, sans le sudo, les fichiers locaux ne sont pas supprimés . Avec le sudo, je dois entrer mon mot de passe pour la machine distante, même si j'ai configuré l'authentification par clé publique .


Tentative de solutions

J'ai essayé de changer quelques paramètres dans le sshd_config distant en vain

PermitRootLogin without-password 
StrictModes no 

J'ai également essayé d'ajouter l' utilisateur piet rootau groupe de mouvement, mais en regardant de plus près les autorisations, les groupes n'ont pas d'accès en écriture aux fichiers que je déplace.


TL; DR

Comment puis-je utiliser sudo rsyncpour supprimer des fichiers locaux créés par un autre utilisateur sans entrer de mot de passe pour la machine distante?

James Webster
la source

Réponses:

0

Il me semble que vous faites cela sur Raspberry Pi.

  1. Ajouter cette chaîne pi ALL=(ALL) NOPASSWD: ALLà la/etc/sudoers
  2. Ajouter un utilisateur piau groupe motion:usermod -a -G motion pi
  3. Changer l'autorisation du répertoire où motionenregistrer les fichiers sur 775 ( chmod -R 775 /path/to/motion/dir) Vous pouvez utiliser maintenant sudo rsyncsans fournir de mot de passe, mais conserver dans un emplacement de sauvegarde les informations d'identification de l'utilisateur 'pi' car il s'agit presque rootmaintenant.

PS Un autre moyen est de permettre à l’utilisateur motiond’être un utilisateur normal en lui attribuant un mot de passe et un shell. Ainsi sudo usermod -s /bin/sh motion; sudo passwd motion , vous pouvez vous connecter pour la synchronisation en tant que mouvement d’utilisateur.

Après le commentaire PPS, vous avez réellement besoin de:

echo '*/5 * * * * root /usr/bin/rsync -avz --remove-source-files /home/pi/Pictures/SecurityCamera/ username@host:/Users/username/Pictures/SecurityCamera' | sudo /usr/bin/tee /etc/cron.d/saveMotionPics.task

Alex
la source
J'appelle rsync comme une tâche cron. Les tâches cron ne sont-elles pas toujours exécutées en tant que root?
James Webster
Pas vraiment, si vous utilisez system cron, vous devez spécifier l'utilisateur - qui va exécuter un programme, un peu comme ça, */5 * * * * motion /pat/to/the/program/to/run.shmotionest un utilisateur qui va réellement run.shutiliser la cause de votre rootchoix motion- de cette façon, vous n'avez pas besoin de sudo
Alex
J'ai ajouté right job cron à ma réponse après PPS. Corrige simplement la fréquence de synchronisation souhaitée. J'y fixe toutes les 5 minutes
Alex