L'utilisateur Root/sudo équivalent dans Cygwin?

j'essaie de lancer un script bash à Cygwin.

je reçois Must run as root, i.e. sudo ./scriptname erreurs.

chmod 777 scriptname ne fait rien pour aider.

j'ai cherché des moyens d'imiter sudo sur Cygwin, pour ajouter un utilisateur root, car appeler" su "rend l'erreur su: user root does not exist , quelque chose d'utile, et n'ont rien trouvé.

Quelqu'un a une suggestion?

142
demandé sur Ken Bellows 2010-11-03 21:24:42

16 réponses

j'ai répondu à cette question sur SuperUser mais seulement après que L'OP a ignoré la réponse inutile qui était à l'époque la seule réponse à la question.

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

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

$ cygstart --action=runas command

ceci ouvrira une boîte de dialogue Windows demandant le mot de passe administrateur et lancera la commande si le mot de passe approprié est entré.

c'est facilement scripté, tant que ~/bin est sur votre chemin. Créer un fichier ~/bin/sudo avec le contenu suivant:

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

maintenant rendre le fichier exécutable:

$ chmod +x ~/bin/sudo

Maintenant, vous pouvez exécuter des commandes avec réel des privilèges élevés :

$ sudo elevatedCommand

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

$ PATH=$HOME/bin:$PATH

testé sur Windows 64 bits 8.

193
répondu dotancohen 2017-03-20 10:18:14

vous devez probablement exécuter le shell cygwin comme administrateur. Vous pouvez cliquer droit sur le raccourci et cliquez sur exécuter en tant qu'administrateur ou d'aller dans les propriétés du raccourci et de la compatibilité avec l'article. Il suffit de se méfier.... les permissions root peuvent être dangereuses.

48
répondu Matt Williamson 2010-11-03 18:27:55

s'appuyant sur dotancohen la réponse de je suis en utilisant un alias:

alias sudo="cygstart --action=runas"

Fonctionne comme un charme:

sudo chown User:Group <file>
16
répondu thoni56 2017-05-23 12:10:27

j'ai trouvé sudo-for-cygwin , peut-être que cela fonctionnerait, c'est une application client/serveur qui utilise un script python pour lancer un processus enfant dans windows (pty) et passerelles tty de l'utilisateur et le processus I /O.

il nécessite python dans windows et modules Python greenlet, et eventlet dans Cygwin.

9
répondu AdamTheWebMan 2012-08-06 17:31:13

il semble que cygstart/runas ne gère pas correctement "$@" et donc les commandes qui ont des arguments contenant des espaces (et peut-être d'autres méta-caractères shell -- Je n'ai pas vérifié) ne fonctionneront pas correctement.

j'ai décidé d'écrire un petit script sudo qui fonctionne en écrivant un script temporaire qui fait les paramètres correctement.

#! /bin/bash

# If already admin, just run the command in-line.
# This works on my Win10 machine; dunno about others.
if id -G | grep -q ' 544 '; then
   "$@"
   exit $?
fi

# cygstart/runas doesn't handle arguments with spaces correctly so create
# a script that will do so properly.
tmpfile=$(mktemp /tmp/sudo.XXXXXX)
echo "#! /bin/bash" >>$tmpfile
echo "export PATH=\"$PATH\"" >>$tmpfile
echo " \" >>$tmpfile
shift
for arg in "$@"; do
  qarg=`echo "$arg" | sed -e "s/'/'\\\''/g"`
  echo "  '$qarg' \" >>$tmpfile
done
echo >>$tmpfile

# cygstart opens a new window which vanishes as soon as the command is complete.
# Give the user a chance to see the output.
echo "echo -ne '\n"151900920": press <enter> to close window... '" >>$tmpfile
echo "read enter" >>$tmpfile

# Clean up after ourselves.
echo "rm -f $tmpfile" >>$tmpfile

# Do it as Administrator.
cygstart --action=runas /bin/bash $tmpfile
3
répondu Brian White 2017-03-22 15:27:27

Cette réponse est basée sur des autre réponse . Tout d'abord, assurez-vous que votre compte est dans le groupe Administrateurs.

ensuite, créer un" runas-admin.bat "fichier avec le contenu suivant:

@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
    cscript //E:JScript //nologo "%~f0" %*
    @goto :EOF
)
FOR %%A IN (%*) DO (
    "%%A"
)
@goto :EOF
@end @ELSE
args = WScript.Arguments;
newargs = "";
for (var i = 0; i < args.length; i++) {
    newargs += "\"" + args(i) + "\" ";
}
ShA=new ActiveXObject("Shell.Application");
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+" "+newargs+"\"","","runas",5);
@end

puis exécutez le fichier batch comme ceci:

./runas-admin.bat "<command1> [parm1, parm2, ...]" "<command2> [parm1, parm2, ...]"

pour exaxmple:

./runas-admin.bat "net localgroup newgroup1 /add" "net localgroup newgroup2 /add"

assurez-vous juste de joindre chaque commande séparée en double citation. Vous n'obtiendrez l'invite UAC qu'une seule fois en utilisant cette méthode et cette procédure a été généralisée pour que vous puissiez utiliser n'importe quel type de commande.

2
répondu user2618594 2017-05-23 12:34:36

Une nouvelle proposition pour améliorer SUDO pour CygWin à partir de GitHub dans ce fil , nommé TOUACExt :

  • s'ouvre automatiquement sudoserver.py.
  • se ferme Automatiquement sudoserver.py après la temporisation (15 minutes par défaut).
  • Demande de contrôle de compte d'utilisateur de l'invite d'élévation Oui/Aucun style pour l'administration des utilisateurs.
  • Demande d'utilisateur Admin/mot de passe pour les utilisateurs non-administrateurs.
  • fonctionne à distance (SSH) avec les comptes administrateurs.
  • crée log.

Encore Pré-Bêta , mais semble être au travail.

2
répondu Sopalajo de Arrierez 2017-03-20 10:18:25

ou installer le paquet syswin, qui inclut un port de su pour cygwin: http://sourceforge.net/p/manufacture/wiki/syswin-su/

2
répondu Mat Khor 2014-12-17 16:44:18

j'ai atterri ici grâce à google, et je crois avoir trouvé un moyen de gagner un PROMT root entièrement fonctionnel à cygwin.

Voici mes pas.

vous devez d'abord renommer le compte Administrateur Windows en " root" Pour ce faire, ouvrez start manu et tapez "gpedit.msc "

éditer l'entrée sous Politique Informatique Locale > Configuration De L'Ordinateur > Paramètres Windows > Paramètres De Sécurité > Politiques Locales > Sécurité Options > Comptes: renommer le compte administrateur

alors vous devrez activer le compte s'il n'est pas encore activé. Politique informatique locale > Configuration de L'ordinateur > paramètres de Windows > Paramètres de sécurité > politiques locales > Options en matière de sécurité > comptes: État du compte administrateur

déconnectez-vous et connectez-vous au compte racine.

définit maintenant une variable d'environnement pour cygwin. Pour cela, le moyen facile: Clic Droit Sur Mon Ordinateur > Propriétés

cliquez (sur la barre latérale gauche) "Paramètres Système avancés "

près du bas cliquez sur le bouton" Variables de L'environnement

sous" Variables système "cliquez sur le bouton" Nouveau..."bouton

Pour le nom "cygwin" sans les guillemets. Pour la valeur, entrez dans votre cygwin répertoire racine. (La mienne était C:\cygwin )

appuyez sur OK et fermez tout ça pour revenir au bureau.

ouvre un terminal Cygwin (cygwin.chauve-souris)

éditer le fichier / etc / passwd et changez la ligne

administrateur : non utilisé: 500:503 :U - MACHINE \ administrateur , S-1-5-21-12345678-1234567890-1234567890- 500:/accueil / administrateur :/bin / bash

à ceci (vos numéros, et la machine nom sera différent, assurez-vous juste que vous changez les numéros surlignés à 0!)

root : non utilisé: 0:0 :U - MACHINE\root , S-1-5-21-12345678-1234567890-1234567890- 0:/racine : / bin /bash

maintenant que tout est terminé, ce prochain bit va faire fonctionner la commande "su". (Pas parfaitement, mais c'est assez pour l'utiliser. Je ne pense pas que les scripts fonctionneront correctement, mais bon, vous êtes arrivé jusqu'ici, peut-être que vous pouvez trouver le chemin. Et merci de partager)

exécute cette commande à 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 'All finished'

déconnectez-vous du compte root et retournez dans votre compte d'utilisateur windows normal.

après tout ça, lancez le nouveau "su.chauve-souris" manuellement en double-cliquant dessus dans l'explorateur. Entrez votre mot de passe et allez-y et fermez la fenêtre.

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

1
répondu Hydranix 2013-03-28 21:38:51

n'étant pas satisfait de la solution disponible, j'ai adopté le script de nu774 pour ajouter de la sécurité et le rendre plus facile à configurer et à utiliser. Le projet est disponible sur Github

pour l'utiliser, il suffit de télécharger cygwin-sudo.py et de l'exécuter via python3 cygwin-sudo.py **yourcommand** .

vous pouvez configurer un alias pour plus de commodité:

alias sudo="python3 /path-to-cygwin-sudo/cygwin-sudo.py"
1
répondu Chronial 2018-01-23 16:37:20

utilisez ceci pour obtenir une fenêtre admin avec bash ou cmd tournant, à partir de n'importe quel menu de contexte de répertoires. Il suffit de cliquer avec le bouton droit de la souris sur le nom d'un répertoire, puis de sélectionner l'entrée ou de cliquer sur le bouton surligné.

ceci est basé sur l'outil chere et la réponse malheureusement ne fonctionne pas (pour moi) de link_boy. Il fonctionne très bien pour moi en utilisant Windows 8,

Un effet secondaire est la couleur différente dans l'admin fenêtre cmd. Pour utiliser cela sur bash, vous pouvez changer le .fichier bashrc de l'utilisateur administrateur.

je coudln pas obtenir le "fond" de la version (clic droit sur un répertoire ouvert) pour fonctionner. N'hésitez pas à ajouter.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash]
@="&Bash Prompt Here"
"Icon"="C:\cygwin\Cygwin.ico"

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash\command]
@="C:\cygwin\bin\bash -c \"/bin/xhere /bin/bash.exe '%L'\""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash_root]
@="&Root Bash Prompt Here"
"Icon"="C:\cygwin\Cygwin.ico"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash_root\command]
@="runas /savecred /user:administrator \"C:\cygwin\bin\bash -c \\"/bin/xhere /bin/bash.exe '%L'\\"\""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd]
@="&Command Prompt Here"

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd\command]
@="cmd.exe /k cd %L"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd_root]
@="Roo&t Command Prompt Here"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd_root\command]
@="runas /savecred /user:administrator \"cmd.exe /t:1E /k cd %L\""
0
répondu user2988447 2013-11-13 15:46:23

une façon très simple d'avoir un shell cygwin et les sous-cellules correspondantes pour fonctionner avec les privilèges d'administrateur est de changer les propriétés du lien qui ouvre le shell initial.

ce qui suit est valide pour Windows 7+ (peut-être pour les versions précédentes aussi, mais je n'ai pas coché)

je démarre habituellement le shell cygwin à partir d'un lien cygwin dans le bouton démarrer (ou bureau). Ensuite, j'ai changé les propriétés du cygwin-link dans les onglets

/Compatibilité/Niveau De Privilège/

et coché la case,

"Exécuter ce programme en tant qu'administrateur"

cela permet au shell cygwin d'ouvrir avec les privilèges d'administrateur et les sous-cellules correspondantes.

0
répondu DMH 2016-07-10 21:40:52

j'ai rencontré cette discussion à la recherche de quelques détails sur l'implémentation de sudo dans différents systèmes d'exploitation. En le lisant j'ai trouvé que la solution par @brian-white ( https://stackoverflow.com/a/42956057/3627676 ) est utile mais peut être légèrement améliorée. J'ai évité de créer le fichier temporaire et implémenté pour exécuter tout par le script unique.

aussi j'ai examiné l'étape suivante de l'amélioration à la production dans le unique fenêtre de la console. Malheureusement, sans succès. J'ai essayé d'utiliser des pipes nommées pour capturer STDOUT/STDERR et imprimer dans la fenêtre principale. Mais child process n'a pas écrit à named pipes. Cependant, écrire à un fichier régulier fonctionne bien.

j'ai laissé tomber toute tentative de trouver la cause profonde et j'ai laissé la solution actuelle telle quelle. J'espère que mon post peut être utile.

améliorations:

  • pas de fichier temporaire
  • pas de l'analyse et de reconstruction de la ligne de commande options
  • attendre la commande élevée
  • utiliser mintty ou bash , si le premier non trouvé
  • de retour de la commande code de sortie

    #!/bin/bash

    # Being Administrators, invoke the command directly
    id -G | grep -qw 544 && {
        "$@"
        exit $?
    }

    # The CYG_SUDO variable is used to control the command invocation
    [ -z "$CYG_SUDO" ] && {
        mintty="$( which mintty 2>/dev/null )"
        export CYG_SUDO="$$"
        cygstart --wait --action=runas $mintty /bin/bash "" 151900920"" "$@"
        exit $?
    }

    # Now we are able to:
    # -- launch the command
    # -- display the message
    # -- return the exit code
    "$@"
    RETVAL=$?

    echo "" 151900920": Press  to close window..."
    read

    exit $RETVAL

0
répondu jsxt 2018-03-26 12:55:46

ne peut pas entièrement tester cela moi-même, je n'ai pas de script approprié pour l'essayer, et je ne suis pas un expert Linux, mais vous pourriez être en mesure de hacker quelque chose assez près.

j'ai essayé ces étapes, et elles "semblent" fonctionner, mais ne sais pas si cela suffira pour vos besoins.

Pour contourner l'absence d'un utilisateur 'root':

  • créer un utilisateur sur la machine windows locale appelé "root", en faire un membre de la Groupe "Administrateurs
  • marque la bin / bash.exe as 'Run as administrator' pour tous les utilisateurs (évidemment, vous devrez l'activer/désactiver au fur et à mesure que vous en aurez besoin)
  • maintenez enfoncé le bouton majuscule gauche dans l'Explorateur de windows en cliquant avec le bouton droit de la souris sur le Cygwin.fichier bat
  • Sélectionnez "Exécuter en tant qu'utilisateur différent'
  • Enter .\root comme nom d'utilisateur puis votre mot de passe.

vous en tant qu'utilisateur appelé "root" dans cygwin, qui couplé avec le "Run as administrator" sur le bash.le fichier exe pourrait suffire.

cependant vous avez encore besoin d'un sudo.

j'ai simulé cela (et quelqu'un d'autre avec plus de connaissances sur linux peut probablement mieux le simuler) en créant un fichier appelé 'sudo' in / bin et en utilisant cette ligne de commande pour envoyer la commande à su à la place:

su -c "$*"

la ligne de commande 'sudo vim' et d'autres semblent fonctionner correctement pour moi, de sorte que vous pouvez essayer.

Être intéressé de savoir si cela fonctionne pour vos besoins ou non.

-1
répondu LarryDavid 2012-12-11 11:41:02

ce que je fais habituellement est d'avoir un registre" ouvrir ici " helper afin d'ouvrir un shell cygwin avec des privilèges administratifs assez facile à partir de n'importe où dans mon ordinateur.

soyez conscient que vous devez avoir le paquet cygwin" chere " installé, utilisez " chere -i -m " d'un shell cygwin élevé en premier.

si votre installation cygwin est dans C:\cygwin...

voici le code d'enregistrement:

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash]

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash]
@="Open Cygwin Here as Root"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash\command]
@="c:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

[-HKEY_CLASSES_ROOT\Directory\Background\shell\cygwin_bash]

[HKEY_CLASSES_ROOT\Directory\Background\shell\cygwin_bash]
@="Open Cygwin Here as Root"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\Background\shell\cygwin_bash\command]
@="c:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

[-HKEY_CLASSES_ROOT\Drive\shell\cygwin_bash]

[HKEY_CLASSES_ROOT\Drive\shell\cygwin_bash]
@="Open Cygwin Here as Root"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Drive\shell\cygwin_bash\command]
@="c:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

Espérons que cette aide. Laissez-moi savoir si cela fonctionne pour vous. Grâce.

PS: Vous pouvez saisir ce code, le copier et le coller et le sauvegarder dans un nom.fichier reg pour l'exécuter... ou vous pouvez ajouter manuellement les valeurs.

-1
répondu link_boy 2013-07-21 07:55:04

, Essayez:

chmod -R ug+rwx <dir>

<dir> est le répertoire sur lequel vous souhaitez modifier les autorisations.

-5
répondu Shanmukh 2012-10-19 20:46:56