Comment puis-je exécuter un script shell en tant que root (sudo)?
J'ai un dépôt SVN serveur qui s'exécute dans le référentiel de l'utilisateur. Je veux lancer un script après chaque post-commit. J'ai écrit un script shell qui s'exécute à partir du crochet après chaque livraison. Il doit être exécuté en tant que root. C'est pourquoi j'ai utilisé sudo dans le script, mais il ne fonctionne pas. Est-il un moyen pour exécuter le script en tant que root?
sudo su
echo "password"
svn export --force file:///home/repository/trunk/ /home/memarexweb/public_html/devel/
chmod -R 777 /home/memarexweb/public_html/devel/
préférable de déplacer la question de superuser.com
une option pourrait être de désactiver le mot de passe mais n'est pas vraiment une bonne solution maestric.com/doc/unix/ubuntu_sudo_without_password
Il pourrait ne pas être une bonne idée pour rendre les fichiers en mode 777, ils seront monde accessible en écriture.
une option pourrait être de désactiver le mot de passe mais n'est pas vraiment une bonne solution maestric.com/doc/unix/ubuntu_sudo_without_password
Il pourrait ne pas être une bonne idée pour rendre les fichiers en mode 777, ils seront monde accessible en écriture.
OriginalL'auteur Loqman | 2011-09-21
Vous devez vous connecter pour publier un commentaire.
J'étais à la recherche autour et a trouvé cette solution utile:
Modifier votre
sudoers
fichier pour permettre l'exécution de certaines commandes sans mot de passe.Il est préférable de diviser votre
post-commit
script en deux parties, dont l'une sera exécuté à traverssudo
.entrée dans
/etc/sudoers
:Votre post-commit hook:
Script
/usr/local/bin/svn-postcommit-export
:(Vous pouvez choisir n'importe quel nom et mettre le script n'importe où; j'ai juste suggéré
svn-postcommit-export
comme un exemple, et/usr/local/bin
comme un lieu commun.)OriginalL'auteur Loqman
démarre un nouveau processus, appartient à l'utilisateur root. Après que le processus est terminé ou arrêté, la ligne suivante est exécutée, encore une fois que l'utilisateur qui exécute le script.
Une solution possible est d'exécuter le script en entier à l'aide de sudo, et de lui donner un utiliser sudo droits de exectute les scripts. Pour ce faire, vous devez modifier le
/etc/sudoers
fichier à l'aide de lavisudo
commande.OriginalL'auteur pvoosten
Dans la dernière ligne de votre script, vous décidez de changer le mode de
/home/memarexweb/public_html/devel/
de 777, de sorte que l'utilisateur "référentiel" devrait être en mesure de copier les fichiers dans ce répertoire sans les privilèges root. Dans ce cas, vous n'avez pas besoin d'utiliser sudo ou su.Cependant, changer les permissions du répertoire en 777 est dangereux, car il permet à quiconque d'écrire dans ce répertoire et de créer ou de supprimer des fichiers. Il serait préférable de changer le propriétaire du répertoire de l'utilisateur "référentiel" et de modifier le mode de 755. Si ce n'est pas possible, vous pouvez être en mesure d'ajouter une ACL POSIX permettant de "référentiel" pour écrire dans le répertoire. Vous pouvez Google "ACL POSIX" pour plus d'informations, ou de lire les pages de manuel pour
getfacl
etsetfacl
.OriginalL'auteur Jonathan
Cela ne fonctionne pas, la meilleure chose est de ne mettre que l'exige commandes dans le shell script. Et puis setuid le script lui-même, comme ceci (à l'aide de la racine):
Comme ça, l'exécution de ce script va vous donner les autorisations du propriétaire du script (racine).
EDIT: Comme mentionné dans les commentaires, stuid n'est pas autorisé pour un script shell. Cette solution fonctionne pour les fichiers exécutables.
suid
drapeaux sur script shell est DANGEREUX pour le prolonger, que Linux va l'ignorer. Voir l'article de Wikipédia liés à la réponse pour plus de détails.désolé, A. H., je n'ai pas bien compris vous. Tu veux dire Linux ignore setuid? Et pourquoi c'est DANGEREUX?
Linux va ignorer
suid
scripts, les exécutables sont ok. De nombreux UNIX dérivés de le faire ces jours-ci. Certaines raisons sont expliqué iciVous êtes en droit A. H
OriginalL'auteur Yousf