Próbuję uruchomić skrypt bash w Cygwin.
Otrzymuję Must run as root, i.e. sudo ./scriptname
błędy.
chmod 777 scriptname
nic nie pomaga.
Szukałem sposobów na naśladowanie sudo na Cygwin, aby dodać użytkownika root, ponieważ wywołanie „su” renderuje błąd su: user root does not exist
, cokolwiek pożytecznego, i nic nie znalazłem.
Czy ktoś ma jakieś sugestie?
what
skryptu, który próbujesz uruchomić? Nie ma odpowiednika „sudo” w powłoce cygwin - prawa to te od użytkownika win, który uruchomił powłokę cygwin, więc link KyleWpppd jest dobry, aby uniknąć błędów, takich jak „sudo unknown command”. W twoim przypadku wygląda na to, że jest to konkretny problem ze skryptem, który chcesz wykonać.Odpowiedzi:
Odpowiedziałem na to pytanie na SuperUser, ale dopiero po tym, jak OP zignorował nieprzydatną odpowiedź, która była wówczas jedyną odpowiedzią na pytanie.
Oto właściwy sposób na podniesienie uprawnień w Cygwin, skopiowany z mojej własnej odpowiedzi na SuperUser:
Znalazłem odpowiedź na liście mailingowej Cygwin . Aby uruchomić
command
z podwyższonymi uprawnieniami w Cygwin, poprzedź poleceniecygstart --action=runas
następująco:Spowoduje to otwarcie okna dialogowego systemu Windows z pytaniem o hasło administratora i uruchomienie polecenia, jeśli zostanie wprowadzone prawidłowe hasło.
Jest to łatwe do skryptu, o ile
~/bin
jest na twojej drodze. Utwórz plik~/bin/sudo
z następującą zawartością:Teraz uczyń plik wykonywalnym:
Teraz możesz uruchamiać polecenia z prawdziwymi podwyższonymi uprawnieniami :
Być może będziesz musiał coś dodać
~/bin
do swojej ścieżki. Możesz uruchomić następujące polecenie w Cygwin CLI lub dodać je do~/.bashrc
:Testowane na 64-bitowym systemie Windows 8.
Możesz także zamiast powyższych kroków dodać alias dla tego polecenia do
~/.bashrc
:źródło
cat << 'EOF' > ~/bin/sudo\n #!/usr/bin/bash\n cygstart --action=runas "$@"\n EOF
(Nie mogę wymyślić, jak wstawić nowe wiersze w tym komentarzu, więc dodałem do kodu '\ n') Reszta od PATH = ... i dalej jest w porządku .ls
jest zapakowanie go w długi proces, taki jak mintty, bash lub zsh. Ale to wszystko pojawia się w osobnym terminalu. Które w tym momencie mogłem po prostu otworzyć go przez GUI używając ConEMU."$@"
rozszerza się do czegoś podobnego"$1" "$2" "$3" ...
i bez,$@
rozszerza się do$1 $2 $3...
.Prawdopodobnie musisz uruchomić powłokę cygwin jako administrator. Możesz kliknąć skrót prawym przyciskiem myszy i kliknąć Uruchom jako administrator lub przejść do właściwości skrótu i sprawdzić go w sekcji zgodności. Tylko uważaj ... uprawnienia roota mogą być niebezpieczne.
źródło
sudo
w Linuksie.chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*
. Bez tego nie mógłbym uzyskać dostępu do folderów i plików zsynchronizowanych.Opierając się na odpowiedzi dotancohen, używam aliasu:
Działa jak urok:
A jeśli masz zainstalowany SysInternals, możesz nawet łatwo uruchomić powłokę poleceń jako użytkownik systemu
źródło
Znalazłem sudo-for-cygwin , może to zadziała, jest to aplikacja klient / serwer, która używa skryptu Pythona do odrodzenia procesu potomnego w oknach (pty) i łączy tty użytkownika i proces I / O.
Wymaga Pythona w oknach i modułach Pythona greenlet oraz eventlet w Cygwin.
źródło
Lub zainstaluj pakiet syswin, który zawiera port su dla cygwin: http://sourceforge.net/p/manufacture/wiki/syswin-su/
źródło
Wygląda na to, że
cygstart/runas
nie obsługuje poprawnie"$@"
i dlatego polecenia, które mają argumenty zawierające spacje (i być może inne metaznaki powłoki - nie sprawdzałem) nie będą działać poprawnie.Postanowiłem po prostu napisać mały
sudo
skrypt, który działa poprzez napisanie tymczasowego skryptu, który poprawnie wykonuje parametry.źródło
Ta odpowiedź jest oparta na innej odpowiedzi . Przede wszystkim upewnij się, że Twoje konto znajduje się w grupie Administratorzy.
Następnie utwórz ogólny plik „runas-admin.bat” o następującej zawartości:
Następnie uruchom plik wsadowy w następujący sposób:
Na przykład:
Po prostu upewnij się, że każde oddzielne polecenie jest umieszczone w cudzysłowie. Otrzymasz monit UAC tylko raz przy użyciu tej metody, a ta procedura została uogólniona, więc możesz użyć dowolnego rodzaju polecenia.
źródło
Nowa propozycja ulepszenia SUDO dla CygWin z GitHub w tym wątku , nazwana TOUACExt :
Wciąż w fazie pre-beta , ale wydaje się, że działa.
źródło
Wylądowałem tutaj przez Google i naprawdę wierzę, że znalazłem sposób na uzyskanie w pełni funkcjonującego promta roota w cygwin.
Oto moje kroki.
Najpierw musisz zmienić nazwę konta administratora systemu Windows na „root”. Zrób to, otwierając start manu i wpisując „gpedit.msc”
Edytuj wpis w obszarze Zasady komputera lokalnego> Konfiguracja komputera> Ustawienia systemu Windows> Ustawienia zabezpieczeń> Zasady lokalne> Opcje zabezpieczeń> Konta: Zmień nazwę konta administratora
Następnie musisz włączyć konto, jeśli nie jest jeszcze włączone. Lokalne zasady komputera> Konfiguracja komputera> Ustawienia systemu Windows> Ustawienia zabezpieczeń> Zasady lokalne> Opcje zabezpieczeń> Konta: stan konta administratora
Teraz wyloguj się i zaloguj do konta root.
Teraz ustaw zmienną środowiskową dla cygwin. Aby to zrobić w prosty sposób: Kliknij prawym przyciskiem Mój komputer> Właściwości
Kliknij (na lewym pasku bocznym) „Zaawansowane ustawienia systemu”
U dołu kliknij przycisk „Zmienne środowiskowe”
W sekcji „Zmienne systemowe” kliknij przycisk „Nowy ...”
Jako nazwę wpisz „cygwin” bez cudzysłowów. Jako wartość wprowadź w katalogu głównym cygwin. (Mój był C: \ cygwin)
Naciśnij OK i zamknij wszystko, aby wrócić do pulpitu.
Otwórz terminal Cygwin (cygwin.bat)
Edytuj plik / etc / passwd i zmień linię
Do tego (twoje numery i nazwa komputera będą inne, po prostu upewnij się, że zmieniłeś podświetlone liczby na 0!)
Teraz, gdy to wszystko jest skończone, następny bit sprawi, że polecenie „su” zadziała. (Niezupełnie, ale będzie działał na tyle, aby go używać. Nie sądzę, aby skrypty działały poprawnie, ale hej, dotarłeś tak daleko, może znajdziesz sposób. I udostępnij)
Uruchom to polecenie w Cygwin, aby sfinalizować umowę.
Wyloguj się z konta root i z powrotem na swoje zwykłe konto użytkownika systemu Windows.
Po tym wszystkim, uruchom nowy plik „su.bat” ręcznie, dwukrotnie klikając go w eksploratorze. Wprowadź swoje hasło i zamknij okno.
Teraz spróbuj uruchomić polecenie su z cygwin i sprawdź, czy wszystko poszło dobrze.
źródło
Będąc niezadowolonym z dostępnego rozwiązania, zaadaptowałem skrypt nu774, aby dodać zabezpieczenia i ułatwić konfigurację i użytkowanie. Projekt jest dostępny na Github
Aby z niego skorzystać, po prostu pobierz
cygwin-sudo.py
i uruchom go przezpython3 cygwin-sudo.py **yourcommand**
.Dla wygody możesz skonfigurować alias:
źródło
Użyj tego, aby uzyskać okno administratora z uruchomionym bash lub cmd, z dowolnego menu kontekstowego katalogu. Wystarczy kliknąć prawym przyciskiem myszy nazwę katalogu i wybrać wpis lub nacisnąć podświetlony przycisk.
Jest to oparte na narzędziu chere i niestety niedziałającej odpowiedzi (dla mnie) z link_boy. Działa dobrze w przypadku mnie w systemie Windows 8,
Efektem ubocznym jest inny kolor w oknie cmd administratora. Aby użyć tego na bash, możesz zmienić plik .bashrc administratora.
Nie mogę pobrać wersji „w tle” (kliknij prawym przyciskiem myszy w otwartym katalogu) do uruchomienia. Możesz go dodać.
źródło
Bardzo prostym sposobem na posiadanie powłoki Cygwin i odpowiednich podpowłok do działania z uprawnieniami administratora jest zmiana właściwości łącza, które otwiera początkową powłokę.
Poniższe dotyczy systemu Windows 7+ (być może również dla poprzednich wersji, ale nie sprawdziłem)
Zwykle uruchamiam powłokę cygwin z linku cygwin w przycisku Start (lub na pulpicie). Następnie zmieniłem właściwości linku cygwin w zakładkach
/ Zgodność / Poziom uprawnień /
i zaznaczyłem pole,
„Uruchom ten program jako administrator”
Pozwala to powłoce Cygwin na otwieranie z uprawnieniami administratora i odpowiednimi podpowłokami.
źródło
Spotkałem się z tą dyskusją, szukając szczegółów na temat
sudo
implementacji w różnych systemach operacyjnych. Czytając to stwierdziłem, że rozwiązanie @ brian-white ( https://stackoverflow.com/a/42956057/3627676 ) jest przydatne, ale można je nieco ulepszyć. Uniknąłem tworzenia pliku tymczasowego i wdrożyłem do wykonywania wszystkiego za pomocą jednego skryptu.Zbadałem również następny krok w ulepszaniu wyjścia w pojedynczym oknie / konsoli. Niestety bez sukcesu. Próbowałem użyć nazwanych potoków do przechwycenia STDOUT / STDERR i wydrukowania w głównym oknie. Ale proces potomny nie zapisywał nazwanych potoków. Jednak zapis do zwykłego pliku działa dobrze.
Porzuciłem wszelkie próby znalezienia przyczyny źródłowej i pozostawiłem obecne rozwiązanie bez zmian. Mam nadzieję, że mój post też się przyda.
Ulepszenia:
mintty
lubbash
, jeśli nie znaleziono pierwszegoźródło
cygstart --wait --action=runas $mintty /bin/bash "$0" "$@"
nie pęka, jeśli w argumencie są spacje? Zawsze mi się to udawało, przechodząc przez takie cygstart / runas.Bazując na odpowiedzi @ mat-khor, wziąłem syswin
su.exe
, zapisałem go jakomanufacture-syswin-su.exe
i napisałem ten skrypt opakowujący. Obsługuje przekierowanie stdout i stderr polecenia, więc może być używany w potoku itp. Ponadto skrypt kończy pracę ze statusem podanej komendy.Ograniczenia:
env USERNAME=...
do wywołania skryptu przesłania go. Gdyby potrzebne były inne opcje, skrypt musiałby rozróżniać między argumentami syswin-su i argumentami poleceń, np. Rozdzielając na początku--
..
źródło
Nie mogę tego w pełni przetestować, nie mam odpowiedniego skryptu, aby go wypróbować, i nie jestem ekspertem od Linuksa, ale możesz zhakować coś wystarczająco blisko.
Wypróbowałem te kroki i `` wydają się '' działać, ale nie wiem, czy to wystarczy dla Twoich potrzeb.
Aby obejść brak użytkownika `` root '':
To następnie uruchamia cię jako użytkownik o nazwie `` root '' w cygwin, co w połączeniu z `` Uruchom jako administrator '' w pliku bash.exe może wystarczyć.
Jednak nadal potrzebujesz sudo.
Sfałszowałem to (a ktoś z większą wiedzą na temat Linuksa może prawdopodobnie lepiej to sfałszować), tworząc plik o nazwie `` sudo '' w / bin i używając tego wiersza poleceń, aby wysłać polecenie do su:
Wiersz poleceń „sudo vim” i inne wydają mi się działać dobrze, więc możesz chcieć go wypróbować.
Zainteresuj się, czy to działa dla twoich potrzeb, czy nie.
źródło
Zwykle mam pomocnika rejestru „Otwórz tutaj” w celu dość łatwego otwarcia powłoki Cygwin z uprawnieniami administratora z dowolnego miejsca na moim komputerze.
Pamiętaj, że musisz mieć zainstalowany pakiet cygwin "chere",
chere -i -m
najpierw użyj " " z podwyższonej powłoki cygwin.Zakładając, że twoja instalacja cygwin znajduje się w C: \ cygwin ...
Oto kod rejestru:
Mam nadzieję że to pomoże. Daj mi znać, jeśli to zadziała. Dzięki.
PS: Możesz pobrać ten kod, skopiować i wkleić go i zapisać w pliku name.reg, aby go uruchomić ... lub możesz ręcznie dodać wartości.
źródło
Próbować:
gdzie
<dir>
jest katalog, w którym chcesz zmienić uprawnienia.źródło