Comment puis-je utiliser des commandes avec sudo sans changer le propriétaire des fichiers?

12

Lorsque j'utilise sudo pour effectuer certaines activités avec des fichiers, ces fichiers changent de propriétaire. Comment puis-je utiliser des commandes avec sudo sans changer le propriétaire des fichiers?

Le fichier exemple archivos35.sh vient d'Apache mais j'utilise sed (avec usr admin sudo)

$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh

Utilisateur adminavec sudo ---

sudo sed -i s/old/new/g archivos35.sh

Mais faire cette commande avec sudo change le propriétaire du fichier

$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh

Comment puis-je éviter d'utiliser la commande avec sudo pour changer le propriétaire du fichier? Je veux juste apporter des modifications au fichier sans modifier son propriétaire.

Dok Gus
la source
Pourquoi votre script est-il accessible en écriture dans le monde?
Jim L.
Par erreur, je l'ai réglé avec 756. Je ne devrais pas
Dok Gus

Réponses:

29

Si vous devez utiliser sudopour modifier le fichier, utilisez-le pour basculer vers le bon utilisateur. Vous n'avez pas besoin de passer à root, c'est juste la valeur par défaut. Donc, dans votre cas, vous voudriez faire:

sudo -iu apache sed -i 's/old/new/g' archivos35.sh

Cela exécutera la sedcommande en tant qu'utilisateur apache.

terdon
la source
2

Vous ne changez pas vraiment la propriété du fichier, vous supprimez plutôt l'ancien fichier et en créez un nouveau. Lorsque vous faites cela, le nouveau fichier est créé et appartient à l'uid du créateur. Pour éviter cela, vous devez modifier le fichier en place. Modifiez-le à l'aide d'un éditeur de texte qui enregistre en remplaçant le fichier d'origine en place. Ou exécutez vos commandes sed avec sortie dans un fichier temporaire, puis copiez le fichier temporaire sur le fichier d'origine.

Kyle Jones
la source
1
On pourrait penser que l' -ioption aka --in-placemodifierait réellement inplace ...
JShorthouse
Avec la réponse de @teldon, j'ai réussi à faire ce dont j'avais besoin. avec sed je modifie le lieu sans ouvrir le dossier.
Dok Gus
1
@JShorthouse On pourrait penser, mais ce n'est pas le cas, du moins pas partout.
Kyle Jones
3
@JShorthouse la plupart des soi-disant modifications `` sur place '' ne le sont pas, elles modifient principalement un fichier temporaire puis le mv sur l'original (et cela inclut la plupart, sinon la totalité, des implémentations de sed.et perl.et la plupart des autres programmes avec une option de "modification sur place"). Si vous souhaitez une modification sur place réelle, utilisez un éditeur de texte scriptable comme edou exou vi/ vim.
cas
1
Même certains éditeurs de texte utilisent la méthode temp + rename lors de l'écriture du fichier, comme sécurité intégrée en cas de plantage lors de l'écriture. Par exemple, Emacs le fait par défaut, mais vous pouvez l'écraser avec la configuration.
Barmar