169 votes

Utilisateur root/sudo équivalent dans Cygwin?

Je tente d'exécuter un script bash dans Cygwin.

Je reçois des erreurs Doit être exécuté en tant que root, c'est-à-dire sudo ./scriptname.

chmod 777 scriptname ne fait rien pour aider.

J'ai cherché des moyens d'imiter sudo sur Cygwin, d'ajouter un utilisateur root, car l'appel de "su" renvoie l'erreur su: utilisateur root n'existe pas, mais je n'ai rien trouvé de utile.

Quelqu'un a des suggestions?

0 votes

Bonjour KenB, pourriez-vous nous donner plus de détails sur le script what que vous essayez d'exécuter? Il n'y a pas d'équivalent à 'sudo' à l'intérieur d'un shell cygwin - les droits sont ceux de l'utilisateur Windows qui a lancé le shell cygwin, donc le lien de KyleWpppd est bon pour éviter les erreurs telles que "commande inconnue sudo". Dans votre cas, il semble que ce soit un problème spécifique avec le script que vous voulez exécuter.

1 votes

Honnêtement, c'est un problème depuis longtemps, et je ne me rappelle pas vraiment quel était le script. Merci de l'intérêt, cependant.

0 votes

247voto

dotancohen Points 4657

J'ai répondu à cette question sur SuperUser mais seulement après que l'OP a ignoré la réponse inutile qui était à ce moment-là la seule réponse à la question.

Voici la bonne façon d'élever les permissions dans Cygwin, copiée de ma propre réponse sur SuperUser :

J'ai trouvé la réponse sur la liste de diffusion Cygwin. Pour exécuter commande avec des privilèges élevés dans Cygwin, précédez la commande avec cygstart --action=runas comme ceci :

$ cygstart --action=runas commande

Cela ouvrira une boîte de dialogue Windows demandant le mot de passe administrateur et exécutera la commande si le mot de passe approprié est saisi.

Cela peut être facilement scripté, tant que ~/bin est dans votre chemin. Créez un fichier ~/bin/sudo avec le contenu suivant :

#!/usr/bin/bash
cygstart --action=runas "$@"

Maintenant rendez le fichier exécutable :

$ chmod +x ~/bin/sudo

Maintenant vous pouvez exécuter des commandes avec de vrais privilèges élevés :

$ sudo commandeElevée

Vous devrez peut-être ajouter ~/bin à votre chemin. Vous pouvez exécuter la commande suivante sur l'interface en ligne de commande de Cygwin, ou l'ajouter à ~/.bashrc :

$ PATH=$HOME/bin:$PATH

Testé sur Windows 8 64 bits.

Vous pourriez également, au lieu des étapes ci-dessus, ajouter un alias pour cette commande à ~/.bashrc :

# alias pour simuler sudo
alias sudo='cygstart --action=runas'

13 votes

Excellente réponse. Avec quelques ajustements à votre code bash (ci-dessous), j'ai pu exécuter une commande élevée à partir de la ligne de commande. Voici le changement que j'ai dû apporter pour que votre code fonctionne : cat << 'EOF' > ~/bin/sudo\n #!/usr/bin/bash\n cygstart --action=runas "$@"\n EOF (Je n'arrive pas à insérer de nouvelles lignes dans ce commentaire, j'ai donc ajouté des '\n' au code) Le reste à partir de PATH=... est correct.

0 votes

@josmith42: Merci! Je ne vois pas la différence entre mon script et le tien. Quelle est la différence?

0 votes

C'est principalement la première ligne : J'ai cat << 'EOF' > ~/bin/sudo. Et j'ai ajouté EOF en dessous de la ligne cygstart pour fermer le document ici.

51voto

Matt Williamson Points 10894

Vous devez probablement exécuter l'invite de commandes cygwin en tant qu'administrateur. Vous pouvez cliquer avec le bouton droit sur le raccourci et cliquer sur exécuter en tant qu'administrateur ou aller dans les propriétés du raccourci et le vérifier dans la section compatibilité. Soyez juste prévenu.... les permissions de root peuvent être dangereuses.

1 votes

Dans les trois années écoulées depuis que cette question a été posée sans réponse satisfaisante par rapport à cette solution de contournement, j'ai trouvé le moyen correct d'élever les permissions pour une seule commande dans la fenêtre Cygwin existante dans la réponse ci-dessous. Ainsi, cela fonctionne exactement comme sudo sous Linux.

0 votes

A fonctionné pour moi sur Win10 64. J'ai dû changer la propriété des fichiers téléchargés à partir d'un serveur avec rsync. chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*. Sans cela, je ne pouvais pas accéder aux dossiers et fichiers rsyncés.

9voto

AdamTheWebMan Points 59

J'ai trouvé sudo-for-cygwin, peut-être que cela fonctionnerait, c'est une application client/serveur qui utilise un script python pour créer un processus enfant dans windows (pty) et relie le tty de l'utilisateur et les entrées/sorties du processus.

Cela nécessite python sous Windows et les modules Python greenlet et eventlet sous Cygwin.

0 votes

Je l'utilise depuis un moment maintenant et il gère même des éléments interactifs comme nano sans aucun problème!

2voto

Une nouvelle proposition pour améliorer SUDO pour CygWin provenant de GitHub dans ce fil de discussion, nommée TOUACExt:

  • Ouvre automatiquement sudoserver.py.
  • Ferme automatiquement sudoserver.py après un délai (par défaut 15 minutes).
  • Demande l'élévation UAC de style Oui/Non pour les utilisateurs admin.
  • Demande l'utilisateur/admin et le mot de passe pour les utilisateurs non-admin.
  • Fonctionne à distance (SSH) avec les comptes administrateur.
  • Crée un journal.

Toujours en Pre-Bêta, mais semble fonctionner.

1voto

Hydranix Points 29

Je suis arrivé ici via google, et je crois effectivement avoir trouvé un moyen d'obtenir un invite de commande root entièrement fonctionnel dans cygwin.

Voici mes étapes.

Tout d'abord, vous devez renommer le compte administrateur de Windows en "root" Faites ceci en ouvrant le menu Démarrer et en tapant "gpedit.msc"

Modifiez l'entrée sous Stratégie de l'ordinateur local > Configuration de l'ordinateur > Paramètres Windows > Paramètres de sécurité > Options de sécurité > Comptes : Renommer le compte administrateur

Ensuite, vous devrez activer le compte s'il n'est pas déjà activé. Stratégie de l'ordinateur local > Configuration de l'ordinateur > Paramètres Windows > Paramètres de sécurité > Options de sécurité > Comptes : État du compte administrateur

Déconnectez-vous maintenant et connectez-vous au compte root.

Ensuite, définissez une variable d'environnement pour cygwin. Pour ce faire de manière simple : Cliquez avec le bouton droit sur Poste de travail > Propriétés

Cliquez (dans la barre latérale gauche) sur "Paramètres système avancés"

Près du bas, cliquez sur le bouton "Variables d'environnement"

Sous "Variables système", cliquez sur le bouton "Nouveau..."

Pour le nom, mettez "cygwin" sans les guillemets. Pour la valeur, entrez le répertoire racine de votre cygwin. (Le mien était C:\cygwin)

Cliquez sur OK et fermez tout cela pour revenir au bureau.

Ouvrez un terminal Cygwin (cygwin.bat)

Modifiez le fichier /etc/passwd et changez la ligne

Administrator:unused:500:503:U-MACHINE\Administrator,S-1-5-21-12345678-1234567890-1234567890-500:/home/Administrator:/bin/bash

Par ceci (vos numéros et le nom de votre machine seront différents, assurez-vous simplement de changer les chiffres en surbrillance en 0 !)

root:unused:0:0:U-MACHINE\root,S-1-5-21-12345678-1234567890-1234567890-0:/root:/bin/bash

Maintenant que tout est terminé, cette prochaine étape fera fonctionner la commande "su". (Pas parfaitement, mais suffisamment pour être utilisée. Je ne pense pas que les scripts fonctionneront correctement, mais bon, vous êtes arrivé jusque-là, peut-être que vous trouverez le moyen. Et s'il vous plaît partagez)

Exécutez cette commande dans cygwin pour finaliser l'accord.

mv /bin/su.exe /bin/_su.exe_backup
cat > /bin/su.bat << "EOF"
@ECHO OFF
RUNAS /savecred /user:root %cygwin%\cygwin.bat
EOF
ln -s /bin/su.bat /bin/su
echo ''
echo 'Tout est terminé'

Déconnectez-vous du compte root et reconnectez-vous à votre compte utilisateur Windows normal.

Après tout cela, exécutez manuellement le nouveau "su.bat" en double-cliquant dessus dans l'explorateur. Entrez votre mot de passe et fermez la fenêtre.

Essayez maintenant d'exécuter la commande su depuis cygwin et voyez si tout s'est bien passé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X