J'ai un petit script bash:
#!/bin/bash
touch dummy.txt
Si j'exécute ce script avec sudo
alors il va créer dummy.txt
qui sera protégé par root .
Ce que je veux faire c'est:
Que ce script soit exécuté en utilisant sudo
ou un utilisateur normal, le fichier nedummy.txt
doit pas être protégé par root.
chown
etchmod
dans votre script pour définir la propriété et les autorisations comme vous le souhaitez.Réponses:
Vous pouvez tester si le script est en cours d' exécution par l' intermédiaire en
sudo
utilisant lesEUID
et lesSUDO_USER
variables, puis exécutertouch
commeSUDO_USER
si vrai - quelque chose commela source
==
utilisé pour la comparaison de chaînes. Puisque$EUID
est censé retourner une valeur entière, je vous recommande d'utiliser la-ed
comparaison. Les espaces sont autorisés dans les noms d'utilisateur , alors citez probablement la$SUDO_USER
variable. Sinon, bonne réponse - c'est quelque chose que j'utiliserais personnellement.sudo -u
s'il détecte qu'il s'exécute en tant que root. L'OP a parlé d'avoir plusieurs commandes dans un seul script. Mais attention à éviter une boucle infinie sur les erreurs.[[...]]
donc pas strictement nécessaire pour citer la variable dans l'instruction if @Serg et I gues-ed
était une faute de frappe pour-eq
-eq
. Je ne savais pas qu'il[[
n'y avait pas de fractionnement de mots. Merci. Personnellement, je citerais toujours pour de bonnes habitudes de scriptSi votre script n'est pas destiné à être exécuté en tant que
root
, le moyen le plus sûr de résoudre le problème est d'interrompre l'exécution du script au tout début:En option, vous pouvez réexécuter votre script en tant qu'utilisateur de secours (par exemple
sudo -u FALLBACK_USER "$0"
) au lieu de simplement abandonner.Essayer de corriger les caprices de commandes individuelles rendra votre script inutilement complexe et difficile à déboguer. Chaque fois que vous le modifiez, vous devrez effectuer tous les tests deux fois (en tant qu'utilisateur normal, puis en tant que
root
) et corriger tous lesroot
bogues liés qui surviennent. Ce n'est pas une solution d'avenir, pour ainsi dire.la source
Par défaut, les fichiers créés avec root root ont les autorisations suivantes:
Ce fichier appartient à l'utilisateur root et au groupe root, et est lisible et inscriptible par root, mais uniquement lisible par d'autres.
L'approche la plus simple serait de
chown
renvoyer le fichier à l'utilisateur d'origine.Vous pouvez utiliser une
$SUDO_USER
variable accessible uniquement lorsqu'ellesudo
est appelée, comme ceci:Si vous exécutez le script en tant qu'utilisateur normal, la
chown
partie n'est pas nécessaire du tout, vous pouvez donc envisager d'utiliser if-statement ou&&
test pour tester le cas où le script est exécuté en tant que root, et faire quelque chose comme suit:L'approche ci-dessus est recommandée. Il y en a d'autres, comme l'utilisation
chmod
pour modifier les autorisations de lecture-écriture-exécution pour les utilisateurs et le groupe, mais ce n'est pas recommandé.la source
sudo
, alors non - vous ne pouvez pas l'ignorer. Votre option est d'exécuter le script en tant qu'utilisateur normal (ce que je ne comprends pas pourquoi vous ne le faites pas, car vous créez simplement un fichier pour votre utilisateur ici) ou de changer la propriété du fichier comme je le montre dans ma réponse.