J'essaye d'exécuter un script bash dans Cygwin.
J'ai des 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, d'ajouter un utilisateur root, car appeler "su" rend l'erreur su: user root does not exist
, quelque chose d'utile, et je n'ai rien trouvé.
Quelqu'un a des suggestions?
what
script que vous essayez d'exécuter? Il n'y a pas d'équivalent à 'sudo' dans un shell cygwin - les droits sont ceux de l'utilisateur win qui a lancé le shell cygwin, donc le lien KyleWpppd est bon pour éviter des erreurs telles que "sudo unknown command". Dans votre cas, cela semble être un problème spécifique avec le script que vous souhaitez exécuter.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 autorisations dans Cygwin, copiée à partir de ma propre réponse sur SuperUser:
J'ai trouvé la réponse sur la liste de diffusion Cygwin . Pour exécuter
command
avec des privilèges élevés dans Cygwin, faites précéder la commandecygstart --action=runas
comme suit:Cela ouvrira une boîte de dialogue Windows demandant le mot de passe administrateur et exécutera la commande si le mot de passe correct est entré.
Ceci est facilement scripté, du moment qu'il se
~/bin
trouve sur votre chemin. Créez un fichier~/bin/sudo
avec le contenu suivant:Maintenant, rendez le fichier exécutable:
Vous pouvez désormais exécuter des commandes avec de réels privilèges élevés :
Vous devrez peut-être ajouter
~/bin
à votre chemin. Vous pouvez exécuter la commande suivante sur la CLI Cygwin ou l'ajouter à~/.bashrc
:Testé sur Windows 8 64 bits.
Vous pouvez également, au lieu des étapes ci-dessus, ajouter un alias pour cette commande pour
~/.bashrc
:la source
cat << 'EOF' > ~/bin/sudo\n #!/usr/bin/bash\n cygstart --action=runas "$@"\n EOF
(Je ne peux pas comprendre comment insérer des nouvelles lignes dans ce commentaire, j'ai donc ajouté des '\ n's au code) Le reste du PATH = ... .ls
c'est de l'envelopper dans un processus de longue durée comme mintty ou bash ou zsh aussi. Mais tout apparaît dans un terminal séparé. À ce stade, j'aurais pu simplement l'ouvrir via l'interface graphique en utilisant ConEMU."$@"
développe en quelque chose comme"$1" "$2" "$3" ...
et sans, se$@
développe en$1 $2 $3...
.Vous devez probablement exécuter le shell cygwin en tant qu'administrateur. Vous pouvez faire un clic 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 de compatibilité. Attention, les permissions root peuvent être dangereuses.
la source
sudo
sous Linux.chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*
. Sans lui, je ne pourrais pas accéder aux dossiers et fichiers rsynced.En m'appuyant sur la réponse de dotancohen, j'utilise un alias:
Fonctionne comme un charme:
Et si vous avez installé SysInternals, vous pouvez même démarrer très facilement un shell de commande en tant qu'utilisateur système
la source
J'ai trouvé sudo-for-cygwin , peut-être que cela fonctionnerait, c'est une application client / serveur qui utilise un script python pour générer un processus enfant dans Windows (pty) et relie le tty de l'utilisateur et les E / S de processus.
Il nécessite python dans les fenêtres et les modules Python greenlet, et eventlet dans Cygwin.
la source
Ou installez le package syswin, qui inclut un port de su pour cygwin: http://sourceforge.net/p/manufacture/wiki/syswin-su/
la source
Il semble que
cygstart/runas
cela 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 du shell - je n'ai pas vérifié) ne fonctionneront pas correctement.J'ai décidé d'écrire simplement un petit
sudo
script qui fonctionne en écrivant un script temporaire qui fait correctement les paramètres.la source
Cette réponse est basée sur une autre réponse . Tout d'abord, assurez-vous que votre compte est dans le groupe Administrateurs.
Ensuite, créez un fichier générique "runas-admin.bat" avec le contenu suivant:
Ensuite, exécutez le fichier de commandes comme ceci:
Par exemple:
Assurez-vous simplement de mettre chaque commande distincte entre guillemets. 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 afin que vous puissiez utiliser n'importe quel type de commande.
la source
Une nouvelle proposition pour améliorer SUDO pour CygWin à partir de GitHub dans ce fil , nommé TOUACExt :
Toujours en pré-bêta , mais semble fonctionner.
la source
J'ai atterri ici via Google, et je pense en fait que j'ai trouvé un moyen d'obtenir un root promt pleinement fonctionnel dans cygwin.
Voici mes étapes.
Vous devez d'abord renommer le compte administrateur Windows en "root". Pour ce faire, ouvrez le manuel de démarrage et tapez "gpedit.msc"
Modifiez l'entrée sous Stratégie de l'ordinateur local> Configuration ordinateur> Paramètres Windows> Paramètres de sécurité> Stratégies locales> Options de sécurité> Comptes: Renommer le compte administrateur
Ensuite, vous devrez activer le compte s'il n'est pas encore activé. Stratégie de l'ordinateur local> Configuration ordinateur> Paramètres Windows> Paramètres de sécurité> Stratégies locales> Options de sécurité> Comptes: état du compte administrateur
Déconnectez-vous maintenant et connectez-vous au compte root.
Maintenant, définissez une variable d'environnement pour cygwin. Pour ce faire facilement: Cliquez avec le bouton droit sur Poste de travail> Propriétés
Cliquez (dans la barre latérale gauche) "Paramètres système avancés"
En 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 dans votre répertoire racine cygwin. (Le mien était C: \ cygwin)
Appuyez sur OK et fermez tout cela pour revenir au bureau.
Ouvrez un terminal Cygwin (cygwin.bat)
Editez le fichier / etc / passwd et changez la ligne
Pour cela (vos numéros et le nom de la machine seront différents, assurez-vous simplement de changer les numéros en surbrillance en 0!)
Maintenant que tout cela est terminé, ce bit suivant fera fonctionner la commande "su". (Pas parfaitement, mais cela fonctionnera suffisamment pour être utilisé. 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 partagez s'il vous plaît)
Exécutez cette commande dans cygwin pour finaliser la transaction.
Déconnectez-vous du compte root et revenez à 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 continuez et fermez la fenêtre.
Maintenant, essayez d'exécuter la commande su depuis cygwin et voyez si tout s'est bien passé.
la source
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 à installer et à utiliser. Le projet est disponible sur Github
Pour l'utiliser, téléchargez-le
cygwin-sudo.py
et exécutez-le viapython3 cygwin-sudo.py **yourcommand**
.Vous pouvez configurer un alias pour plus de commodité:
la source
Utilisez ceci pour obtenir une fenêtre d'administration avec bash ou cmd en cours d'exécution, à partir de n'importe quel menu contextuel de répertoires. Faites un clic droit sur un nom de répertoire et sélectionnez l'entrée ou appuyez sur le bouton surligné.
Ceci est basé sur l'outil chere et la réponse qui ne fonctionne malheureusement pas (pour moi) de link_boy. Cela fonctionne bien pour moi avec Windows 8,
Un effet secondaire est la couleur différente dans la fenêtre cmd d'administration. Pour l'utiliser sur bash, vous pouvez modifier le fichier .bashrc de l'utilisateur admin.
Je ne peux pas obtenir la version "d'arrière-plan" (clic droit dans un répertoire ouvert) à exécuter. N'hésitez pas à l'ajouter.
la source
Un moyen très simple d'avoir un shell cygwin et les sous-shell correspondants 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 valable pour Windows 7+ (peut-être pour les versions précédentes aussi, mais je n'ai pas vérifié)
Je démarre généralement le shell cygwin à partir d'un lien cygwin au début bouton de (ou sur le 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écutez ce programme en tant qu'administrateur"
Cela permet au shell cygwin de s'ouvrir avec les privilèges d'administrateur et les sous-shell correspondants également.
la source
J'ai rencontré cette discussion à la recherche de quelques détails sur l'
sudo
implémentation dans différents systèmes d'exploitation. En le lisant, j'ai trouvé que la solution de @ 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 mis en œuvre pour tout exécuter par le script unique.J'ai également étudié la prochaine étape de l'amélioration de la sortie dans la fenêtre / console unique. Malheureusement, sans aucun succès. J'ai essayé d'utiliser des tubes nommés pour capturer STDOUT / STDERR et imprimer dans la fenêtre principale. Mais le processus enfant n'a pas écrit dans les tubes nommés. Cependant, l'écriture dans un fichier normal fonctionne bien.
J'ai abandonné toutes les tentatives pour trouver la cause première et laissé la solution actuelle telle quelle. J'espère que mon message pourra également être utile.
Améliorations:
mintty
oubash
, si le premier n'est pas trouvéla source
cygstart --wait --action=runas $mintty /bin/bash "$0" "$@"
pas casser s'il y a des espaces dans un argument? Cela a toujours été le cas pour moi en passant par cygstart / runas.Sur la base de la réponse de @ mat-khor, j'ai pris le syswin
su.exe
, l'ai enregistré sousmanufacture-syswin-su.exe
et j'ai écrit ce script wrapper. Il gère la redirection de stdout et stderr de la commande, afin qu'il puisse être utilisé dans un tube, etc. De plus, le script se termine avec l'état de la commande donnée.Limites:
env USERNAME=...
de l'appel de script le remplace. Si d'autres options étaient nécessaires, le script devrait faire la distinction entre syswin-su et les arguments de commande, par exemple en divisant en premier--
..
la source
Je ne peux pas tester complètement cela moi-même, je n'ai pas de script approprié pour l'essayer, et je ne suis pas un expert Linux, mais vous pourrez peut-être pirater quelque chose d'assez proche.
J'ai essayé ces étapes, et elles «semblent» fonctionner, mais je ne sais pas si cela suffira à vos besoins.
Pour contourner le manque d'utilisateur «root»:
Cela vous exécute ensuite en tant qu'utilisateur appelé «root» dans cygwin, ce qui, associé au «Exécuter en tant qu'administrateur» sur le fichier bash.exe, peut suffire.
Cependant, vous avez toujours besoin d'un sudo.
J'ai simulé cela (et quelqu'un d'autre avec plus de connaissances Linux peut probablement le simuler mieux) en créant un fichier appelé `` sudo '' dans / bin et en utilisant cette ligne de commande pour envoyer la commande à su à la place:
La ligne de commande «sudo vim» et d'autres semblent fonctionner correctement pour moi, vous voudrez peut-être l'essayer.
Soyez intéressé de savoir si cela répond à vos besoins ou non.
la source
Ce que je fais habituellement, c'est d'avoir un assistant de registre "Ouvrir ici" afin d'ouvrir un shell cygwin avec des privilèges administratifs assez facilement de n'importe où dans mon ordinateur.
Sachez que vous devez avoir installé le paquet cygwin "chere", utilisez d'abord "
chere -i -m
" à partir d'un shell cygwin élevé.En supposant que votre installation cygwin se trouve dans C: \ cygwin ...
Voici le code de registre:
J'espère que cela t'aides. Dites-moi si cela marche pour vous. Merci.
PS: Vous pouvez récupérer ce code, le copier et le coller et l'enregistrer dans un fichier name.reg pour l'exécuter ... ou vous pouvez ajouter manuellement les valeurs.
la source
Essayer:
où
<dir>
est le répertoire sur lequel vous souhaitez modifier les autorisations.la source