[bash] Cygwin에서 루트 사용자 / sudo에 해당합니까?

Cygwin에서 bash 스크립트를 실행하려고합니다.

내가 얻을 Must run as root, i.e. sudo ./scriptname오류를.

chmod 777 scriptname 도움이되지 않습니다.

Cygwin에서 sudo를 모방하고 루트 사용자를 추가하는 방법을 찾았습니다. “su”를 호출하면 오류가 발생 su: user root does not exist하고 유용하며 아무것도 찾지 못했기 때문입니다.

누구든지 제안이 있습니까?



답변

나는 SuperUser 에 대해이 질문에 대답 했지만 OP가 당시 질문에 대한 유일한 대답이었던 도움이되지 않은 대답을 무시한 후에야 만났습니다.

다음은 SuperUser에 대한 내 답변에서 복사 한 Cygwin에서 권한을 높이는 적절한 방법입니다.

Cygwin 메일 링리스트 에서 답을 찾았습니다 . commandCygwin에서 상승 된 권한으로 실행하려면 다음 과 cygstart --action=runas같이 명령을 시작 하십시오.

$ cygstart --action=runas command

그러면 관리자 암호를 묻는 Windows 대화 상자가 열리고 적절한 암호를 입력하면 명령이 실행됩니다.

~/bin경로에있는 한 쉽게 스크립팅 할 수 있습니다 . ~/bin/sudo다음 내용 으로 파일 을 만듭니다 .

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

이제 파일을 실행 가능하게 만드십시오.

$ chmod +x ~/bin/sudo

이제 실제 상승 된 권한으로 명령을 실행할 수 있습니다 .

$ sudo elevatedCommand

~/bin경로 에 추가해야 할 수도 있습니다 . Cygwin CLI에서 다음 명령을 실행하거나 다음에 추가 할 수 있습니다 ~/.bashrc.

$ PATH=$HOME/bin:$PATH

64 비트 Windows 8에서 테스트되었습니다.

위의 단계 대신이 명령의 별칭을 다음에 추가 할 수도 있습니다 ~/.bashrc.

# alias to simulate sudo
alias sudo='cygstart --action=runas'


답변

관리자로 cygwin 쉘을 실행해야 할 수도 있습니다. 바로 가기를 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 클릭하거나 바로 가기 속성으로 이동하여 호환성 섹션에서 확인할 수 있습니다. 조심하십시오 …. 루트 권한은 위험 할 수 있습니다.


답변

바탕 dotancohen의 대답은 내가 별칭을 사용하고 있습니다 :

alias sudo="cygstart --action=runas"

매력으로 작동 :

sudo chown User:Group <file>

SysInternals가 설치되어 있으면 시스템 사용자로 명령 셸을 매우 쉽게 시작할 수도 있습니다.

sudo psexec -i -s -d cmd


답변

나는 sudo-for-cygwin을 찾았습니다 . 아마도 이것이 작동 할 것입니다. 파이썬 스크립트를 사용하여 Windows (pty)에서 자식 프로세스를 생성하고 사용자의 tty와 프로세스 I / O를 연결하는 클라이언트 / 서버 응용 프로그램입니다.

Windows 및 Python 모듈 greenlet의 python과 Cygwin의 eventlet이 필요합니다.


답변

또는 cygwin 용 su 포트가 포함 된 syswin 패키지를 설치 하십시오 . http://sourceforge.net/p/manufacture/wiki/syswin-su/


답변

cygstart/runas제대로 처리되지 않는 것 "$@"같으므로 공백이 포함 된 인수 (및 아마도 다른 쉘 메타 문자-확인하지 않았 음)가있는 명령이 제대로 작동하지 않습니다.

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


답변

이 답변은 다른 답변을 기반으로합니다 . 우선, 귀하의 계정이 관리자 그룹에 있는지 확인하십시오.

다음으로 다음 내용으로 일반 “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

그런 다음 다음과 같이 배치 파일을 실행합니다.

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

예를 들어 :

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

각 개별 명령을 큰 따옴표로 묶어야합니다. 이 방법을 사용하면 UAC 프롬프트가 한 번만 표시되며이 절차는 모든 종류의 명령을 사용할 수 있도록 일반화되었습니다.