在Cygwin中的根用户/ sudo等价物?

我试图在Cygwin中运行一个bash脚本。

我得到Must run as root, ie sudo ./scriptname错误。

chmod 777 scriptname没有任何帮助。

我已经find了在Cygwin上模仿sudo的方法,添加一个root用户,因为调用“su”会导致错误su: user root does not exist ,任何有用的东西,都没有find。

任何人有任何build议?

我在超级用户的问题上回答了这个问题,但是只有在OP没有考虑到当时唯一的答案的时候,这个无用的答案才是答案。

这里是提升Cygwin权限的正确方法,从我自己的超级用户的答案中复制:

我在cygwin邮件列表上find了答案。 要在Cygwin中使用提升权限运行command ,请在cygstart --action=runas命令前加上cygstart --action=runas如下所示:

 $ cygstart --action=runas command 

这将打开一个Windows对话框询问pipe理员密码,如果input正确的密码,则运行命令。

这很容易编写脚本,只要~/bin在你的path中。 使用以下内容创build一个文件~/bin/sudo

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

现在使文件可执行:

 $ chmod +x ~/bin/sudo 

现在你可以用真正的提升特权运行命令了:

 $ sudo elevatedCommand 

您可能需要将~/bin添加到您的path。 您可以在Cygwin CLI上运行以下命令,或将其添加到~/.bashrc

 $ PATH=$HOME/bin:$PATH 

在64位Windows 8上testing。

您可能需要以pipe理员身份运行cygwin shell。 您可以右键单击该快捷方式,然后单击以pipe理员身份运行或进入快捷方式的属性,并在兼容性部分检查它。 只要小心….根权限可能是危险的。

build立在dotancohen的答案我使用别名:

 alias sudo="cygstart --action=runas" 

作为一种魅力:

 sudo chown User:Group <file> 

我发现sudo-for-cygwin ,也许这会工作,它是一个客户端/服务器应用程序,它使用python脚本在windows(pty)中产生一个subprocess,并桥接用户的tty和进程I / O。

它需要Windows中的Python和Python模块greenlet,以及Cygwin中的eventlet。

在这个线程中提出了一个新的提议,在GitHub中为CygWin增强SUDO,命名为TOUACExt

  • 自动打开sudoserver.py。
  • 超时后自动closuressudoserver.py(默认15分钟)。
  • 请求UAC提升提示是/否pipe理员用户的样式。
  • 请求非pipe理员用户的pipe理员用户/密码。
  • 使用pipe理员帐户远程工作(SSH)。
  • 创build日志。

仍然在预testing版 ,但似乎正在工作。

我通过谷歌来到这里,而且我确信我已经find了一种在cygwin中获得完整function的根本提示。

这是我的步骤。

首先,您需要将Windowspipe理员帐户重命名为“root”。通过打开start manu并input“gpedit.msc”

编辑本地计算机策略>计算机configuration> Windows设置>安全设置>本地策略>安全选项>帐户:重命名pipe理员帐户下的条目

那么如果帐户尚未启用,则必须启用该帐户。 本地计算机策略>计算机configuration> Windows设置>安全设置>本地策略>安全选项>帐户:pipe理员帐户状态

现在注销并login到root帐户。

现在为cygwin设置一个环境variables。 要做到这一点,简单的方法:右键单击我的电脑>属性

点击(左侧)“高级系统设置”

在底部点击“Enviroment Variables”button

在“系统variables”下单击“新build…”button

对于名称把“cygwin”没有引号。 对于该值,请在您的cygwin根目录中input。 (我的是C:\ cygwin)

按确定并closures所有这些以返回到桌面。

打开一个Cygwinterminal(cygwin.bat)

编辑文件/ etc / passwd并更改该行

pipe理员 :未使用: 500:503 :U- MACHINE \ Administrator ,S-1-5-21-12345678-1234567890-1234567890-500 :/ home / Administrator :/ bin / bash

对此(您的号码和机器名称会有所不同,只要确保将突出显示的数字更改为0即可)

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

现在所有这些都完成了,下一步将会使“su”命令起作用。 (并不完美,但function足够用,我不认为脚本能正常工作,但是,嘿,你已经得到了这个,也许你可以find方法,请分享)

在cygwin中运行这个命令来完成交易。

 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' 

从root帐户注销并返回到正常的Windows用户帐户。

毕竟,在资源pipe理器中双击手动运行新的“su.bat”。 input您的密码并继续并closures窗口。

现在尝试从cygwin运行su命令,看看是否一切正常。

这个答案是基于另一个答案 。 首先,确保您的帐户在pipe理员组中。

接下来,使用以下内容创build一个通用的“runas-admin.bat”文件:

 @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 

然后像这样执行batch file:

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

例如:

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

只要确保将每个单独的命令括在双引号中。 一旦使用这个方法,你只会得到UAC提示,这个过程已经被推广了,所以你可以使用任何一种命令。

或者安装syswin包,其中包含一个用于cygwin的su的端口: http : //sourceforge.net/p/manufacture/wiki/syswin-su/

看起来, cygstart/runas没有正确处理"$@" ,因此包含空格参数的命令(也许还有其他的shell元字符 – 我没有检查)将无法正常工作。

我决定写一个小的sudo脚本,通过编写一个正确执行参数的临时脚本来工作。

 #! /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 "$1 \\" >>$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$0: 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 

使用这个从任何目录上下文菜单中获得一个运行bash或cmd的pipe理窗口。 只需右键点击目录名称,然后select条目或点击高亮的button。

这是基于chere工具和不幸的工作答案(对我来说)从link_boy。 它适用于我使用Windows 8,

副作用是admin cmd窗口中的不同颜色。 要在bash上使用它,可以更改admin用户的.bashrc文件。

我没有得到“背景”版本(右键点击进入一个打开的目录)运行。 随意添加它。

 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\"" 

使用cygwin shell和相应的子shell以pipe理员权限运行的一个非常简单的方法是更改​​打开初始shell的链接的属性。

以下是适用于Windows 7 +(也许也是以前的版本,但我没有检查)

我通常从启动button(或桌面)中的cygwin链接启动cygwin shell。 然后,我改变了标签中的cygwin链接的属性

/兼容性/特权级别/

并检查框中,

“以pipe理员身份运行此程序”

这允许cygwinshell打开与pipe理员权限和相应的subhells。

我不能完全testing这个,我没有一个合适的脚本来尝试,我不是Linux专家,但是你可能能够接近足够的东西。

我已经尝试了这些步骤,他们似乎“工作,但不知道是否足以满足您的需求。

为了避免“根”用户的缺乏:

  • 在本地窗口机器上创build一个名为“root”的用户,使其成为“pipe理员”组的成员
  • 将bin / bash.exe标记为所有用户的“以pipe理员身份运行”(显然,在需要时您必须将其打开/closures)
  • 在Windows资源pipe理器中按住左移button,同时右键单击Cygwin.bat文件
  • select“以其他用户身份运行”
  • input。\ root作为用户名,然后input您的密码。

然后在cygwin中以“root”用户的身份运行,这与bash.exe文件中的“以pipe理员身份运行”相结合可能就足够了。

但是你仍然需要一个sudo。

我伪造了这个(有更多的Linux知识的人可能会更好的伪造它),通过在/ bin中创build一个名为'sudo'的文件,并使用这个命令行将命令发送给su:

 su -c "$*" 

命令行“sudo vim”和其他的似乎对我来说很好,所以你可能想试试看。

有兴趣知道这是否符合您的需求。

我通常做的是有一个registry“打开这里”助手为了打开一个cygwin shell的pipe理特权很容易从我的电脑的任何地方。

请注意,您必须安装cygwin“chere”软件包,首先使用来自高架cygwinshell的“ chere -i -m ”。

假设你的cygwin安装在C:\ cygwin中…

这是registry代码:

 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" 

希望这可以帮助。 请让我知道这对你有没有用。 谢谢。

PS:你可以抓住这个代码,复制并粘贴,并保存在一个name.reg文件中运行它…或者你可以手动添加值。

尝试:

 chmod -R ug+rwx <dir> 

其中<dir>是您要更改权限的目录。