Użytkownik root / odpowiednik sudo w Cygwin?


156

Próbuję uruchomić skrypt bash w Cygwin.

Otrzymuję Must run as root, i.e. sudo ./scriptnamebłę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?


cześć KenB, czy możesz podać nam więcej szczegółów na temat whatskryptu, 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ć.
Stefano

1
Szczerze mówiąc, jest to problem dawno miniony i właściwie nie pamiętam, jaki był scenariusz. Jednak dzięki za zainteresowanie.
Ken Bellows,

Odpowiedzi:


225

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ć commandz podwyższonymi uprawnieniami w Cygwin, poprzedź polecenie cygstart --action=runasnastępująco:

$ cygstart --action=runas command

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 ~/binjest na twojej drodze. Utwórz plik ~/bin/sudoz następującą zawartością:

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

Teraz uczyń plik wykonywalnym:

$ chmod +x ~/bin/sudo

Teraz możesz uruchamiać polecenia z prawdziwymi podwyższonymi uprawnieniami :

$ sudo elevatedCommand

Być może będziesz musiał coś dodać ~/bindo swojej ścieżki. Możesz uruchomić następujące polecenie w Cygwin CLI lub dodać je do ~/.bashrc:

$ PATH=$HOME/bin:$PATH

Testowane na 64-bitowym systemie Windows 8.

Możesz także zamiast powyższych kroków dodać alias dla tego polecenia do ~/.bashrc:

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

12
Doskonała odpowiedź. Po kilku poprawkach w kodzie basha (poniżej) udało mi się uruchomić polecenie z podwyższonym poziomem uprawnień z wiersza poleceń. Oto zmiana, której potrzebowałem, aby kod działał: 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 .
josmith42

3
Rozumiem! Jeśli się nie mylę, to Twój sposób na zapisanie pliku na dysk, zamiast otwierania edytora tekstu. Fajnie, dziękuję! Nie wiedziałem, jak używać heredoców w Bash!
dotancohen

8
Problem z tym polega na tym, że tworzy zupełnie nowe okno terminala (zwykle conhost). Dane wyjściowe nie są wstawiane do bieżącego terminala.
CMCDragonkai

1
Jedynym sposobem na uruchomienie takich rzeczy lsjest 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.
CMCDragonkai

1
Bez cudzysłowów nawet cytowane argumenty są ponownie dzielone na spacje, @katriel. Z cudzysłowami "$@"rozszerza się do czegoś podobnego "$1" "$2" "$3" ...i bez, $@rozszerza się do $1 $2 $3....
Palec

51

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.


1
W ciągu trzech lat, odkąd zadano to pytanie bez dobrej odpowiedzi, w przeciwieństwie do tego obejścia, znalazłem właściwy sposób na podniesienie uprawnień do pojedynczego polecenia w istniejącym oknie Cygwin w odpowiedzi poniżej. Dzięki temu działa dokładnie tak, jak sudow Linuksie.
dotancohen,

Pracował dla mnie na Win10 64. Musiałem zmienić własność plików pobranych z serwera za pomocą rsync. 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.
lowtechsun

25

Opierając się na odpowiedzi dotancohen, używam aliasu:

alias sudo="cygstart --action=runas"

Działa jak urok:

sudo chown User:Group <file>

A jeśli masz zainstalowany SysInternals, możesz nawet łatwo uruchomić powłokę poleceń jako użytkownik systemu

sudo psexec -i -s -d cmd

9

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.


Używam tego od jakiegoś czasu i zdarzenie obsługuje interaktywne rzeczy, takie jak nano, bez żadnych problemów!
MemphiZ


4

Wygląda na to, że cygstart/runasnie 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 sudoskrypt, który działa poprzez napisanie tymczasowego skryptu, który poprawnie wykonuje parametry.

#! /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

1
zaakceptowana odpowiedź nie działała dla mnie na Win7, ale ta odpowiedź działała jak urok. Udało mi się ustawić exim-config z podwyższonymi uprawnieniami, a następnie vim-edytować plik /etc/exim.conf. Przysiek.
nanker

2

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:

@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

Następnie uruchom plik wsadowy w następujący sposób:

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

Na przykład:

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

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.


2

Nowa propozycja ulepszenia SUDO dla CygWin z GitHub w tym wątku , nazwana TOUACExt :

  • Automatycznie otwiera sudoserver.py.
  • Automatycznie zamyka sudoserver.py po przekroczeniu limitu czasu (domyślnie 15 minut).
  • Zażądaj monitu o podniesienie uprawnień UAC dla administratorów stylu Tak / Nie.
  • Poproś o użytkownika / hasło administratora dla użytkowników niebędących administratorami.
  • Działa zdalnie (SSH) z kontami administratora.
  • Tworzy dziennik.

Wciąż w fazie pre-beta , ale wydaje się, że działa.


1

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ę

Administrator : nieużywany: 500: 503 : U- MACHINE \ Administrator , S-1-5-21-12345678-1234567890-1234567890-500 : / home / Administrator : / bin / bash

Do tego (twoje numery i nazwa komputera będą inne, po prostu upewnij się, że zmieniłeś podświetlone liczby na 0!)

root : nieużywane: 0: 0 : U- MASZYNA \ root , S-1-5-21-12345678-1234567890-1234567890- 0: / root : / bin / bash

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ę.

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'

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.


1

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.pyi uruchom go przez python3 cygwin-sudo.py **yourcommand**.

Dla wygody możesz skonfigurować alias:

alias sudo="python3 /path-to-cygwin-sudo/cygwin-sudo.py"

0

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ć.

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

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.


Jedynym drobnym problemem jest to, że nie możesz stwierdzić, czy jest otwarty jako administrator.
Edwin Pratt

0

Spotkałem się z tą dyskusją, szukając szczegółów na temat sudoimplementacji 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:

  • brak pliku tymczasowego
  • bez analizowania i rekonstruowania opcji wiersza poleceń
  • czekać na podwyższone polecenie
  • użyj minttylub bash, jeśli nie znaleziono pierwszego
  • zwraca kod zakończenia polecenia
    #! / bin / bash

    # Będąc administratorami, wywołaj polecenie bezpośrednio
    id -G | grep -qw 544 && {
        „$ @”
        wyjść $?
    }

    # Zmienna CYG_SUDO służy do sterowania wywołaniem komendy
    [-z "$ CYG_SUDO"] && {
        mintty = "$ (który mintty 2> / dev / null)"
        eksportuj CYG_SUDO = "$$"
        cygstart --wait --action = runas $ mintty / bin / bash "$ 0" "$ @"
        wyjść $?
    }

    # Teraz możemy:
    # - uruchom polecenie
    # - wyświetl wiadomość
    # - zwraca kod wyjścia
    „$ @”
    RETVAL = $?

    echo "$ 0: Naciśnij, aby zamknąć okno ..."
    czytać

    zamknij $ RETVAL


Jak 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.
Brian White

0

Bazując na odpowiedzi @ mat-khor, wziąłem syswin su.exe, zapisałem go jako manufacture-syswin-su.exei 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:

  • Opcje syswin-su są obecnie zakodowane na stałe, aby używać bieżącego użytkownika. Prepping 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 --.
  • Jeśli monit UAC zostanie anulowany lub odrzucony, skrypt zawiesza się.

.

#!/bin/bash
set -e

# join command $@ into a single string with quoting (required for syswin-su)
cmd=$( ( set -x; set -- "$@"; ) 2>&1 | perl -nle 'print $1 if /\bset -- (.*)/' )

tmpDir=$(mktemp -t -d -- "$(basename "$0")_$(date '+%Y%m%dT%H%M%S')_XXX")
mkfifo -- "$tmpDir/out"
mkfifo -- "$tmpDir/err"

cat >> "$tmpDir/script" <<-SCRIPT
    #!/bin/env bash
    $cmd > '$tmpDir/out' 2> '$tmpDir/err'
    echo \$? > '$tmpDir/status'
SCRIPT

chmod 700 -- "$tmpDir/script"

manufacture-syswin-su -s bash -u "$USERNAME" -m -c "cygstart --showminimized bash -c '$tmpDir/script'" > /dev/null &
cat -- "$tmpDir/err" >&2 &
cat -- "$tmpDir/out"
wait $!
exit $(<"$tmpDir/status")

-1

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 '':

  • Utwórz użytkownika na LOKALNYM komputerze z systemem Windows o nazwie „root”, uczyń go członkiem grupy „Administratorzy”
  • Oznacz bin / bash.exe jako `` Uruchom jako administrator '' dla wszystkich użytkowników (oczywiście będziesz musiał to włączać / wyłączać, kiedy potrzebujesz)
  • Przytrzymaj lewy przycisk Shift w eksploratorze Windows, klikając prawym przyciskiem myszy plik Cygwin.bat
  • Wybierz „Uruchom jako inny użytkownik”
  • Wpisz. \ Root jako nazwę użytkownika, a następnie hasło.

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:

su -c "$*"

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.


-1

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 -mnajpierw użyj " " z podwyższonej powłoki cygwin.

Zakładając, że twoja instalacja cygwin znajduje się w C: \ cygwin ...

Oto kod rejestru:

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"

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.


-5

Próbować:

chmod -R ug+rwx <dir>

gdzie <dir>jest katalog, w którym chcesz zmienić uprawnienia.


5
Jak to uczyni go zakorzenionym, jak pyta?
Nikana Reklawyks
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.