W systemach * nix możesz uzyskać powłokę root:
$ su # or 'sudo -s'
#
Powłoka root jest spawnowana w tym samym terminalu.
Usiłuję znaleźć coś, co robi podobną, lokalną elewację w wierszu polecenia systemu Windows. Innymi słowy, nie powinno się odradzać nowego okna ani wyświetlać monitów UAC. Do tej pory byłem w stanie wykonać zaplanowane zadanie, które omija UAC, ale podwyższone okno wiersza polecenia nie pojawia się na swoim miejscu.
Czy istnieje podobne polecenie dla systemu Windows, które wykonuje elewację lokalną bez odradzania nowego okna?
windows
command-line
uac
user2064000
źródło
źródło
sudo
czasami monituje o hasło, ale robi to za pomocą interfejsu tekstowego. Zastanawiam się, jak radzą sobie z tym serwery Nano (które, jak sądzę, nawet domyślnie nie oferują GUI dla pulpitu zdalnego).Odpowiedzi:
TL; DR - jedyną opcją jest odrodzenie innego procesu. (Nowa
cmd.exe
.) W przypadku wiersza polecenia uruchomienie nowej instancji za pomocą tokena dostępu, który ma wyższe uprawnienia , zawsze spowoduje utworzenie nowego okna .Nie można przyznać dodatkowych uprawnień już działającemu procesowi.
Gdy użytkownik z uprawnieniami administracyjnymi loguje się na komputerze z systemem Windows z włączoną kontrolą konta użytkownika (UAC), tworzone są dwa oddzielne tokeny dostępu :
W momencie tworzenia procesu (np.
CMD.EXE
) Jest mu przypisywany jeden z tych dwóch tokenów dostępu . Jeśli proces jest uruchamiany jako „podniesiony” jako Administrator, używany jest niefiltrowany token dostępu. Jeśli procesowi nie przyznano uprawnień administratora, używany jest odfiltrowany standardowy token użytkownika.Po utworzeniu procesu nie można zastąpić tokena dostępu . 1 W tym wątku MSDN Application Security dla Windows Desktop plakat przedstawiający się jako członek zespołu jądra systemu Windows stwierdza:
Uwaga: Kontrola konta użytkownika została wprowadzona wraz z wydaniem systemu Windows Vista .
Ta odpowiedź superużytkownika przytacza dwa dodatkowe źródła potwierdzające to samo:
W blogu devzest.com Programowanie podwyższone uprawnienia / UAC :
Artykuł techtarget.com Jak poprawnie podnieść uprawnienia programów za pomocą UAC Visty :
Dlatego po prostu nie można podnieść wiersza polecenia ani żadnego innego procesu w miejscu. Jedyną opcją jest odrodzenie innego procesu z nowym tokenem dostępu (w razie potrzeby może to być kolejna instancja oryginalnego procesu). W przypadku wiersza polecenia uruchomienie nowej instancji z tokenem dostępu, który ma wyższe uprawnienia, zawsze spowoduje utworzenie nowego okna, a jeśli w systemie zostaną włączone monity UAC, zostaną one również uruchomione.
1 Możesz dostosować uprawnienia w istniejącym tokenie dostępu za pomocą funkcji AdjustTokenPrivileges , ale zgodnie z MSDN :
źródło
Chociaż jestem entuzjastycznym użytkownikiem
TCC-LE
, istnieje rozwiązanie, które nie wymaga żadnych nowych programów: -cmd
jako administrator.%SystemRoot%\system32\
- jeśli nie,cd
tam.copy cmd.exe cmdadmin.exe
(lub dowolną wybraną przez Ciebie nazwę, np.su.exe
).cmdadmin.exe
.Teraz
cmdadmin
jest twójsu
lubsudo
: możesz go uruchomić bez parametrów, aby dać ci powłokę z uprawnieniami administracyjnymi, lub możesz go uruchomić,/c
aby wykonać pojedyncze polecenie w tym trybie. W zależności od twoich zasad możesz zostać poproszony o potwierdzenie.Zauważ, że to zawsze otworzy nowe okno (podobnie jak rozwiązanie TCC
start /elevated ...
): oczekuje się tego w przypadku aplikacji GUI, ale w przypadku programu wiersza polecenia możesz użyć/k
zamiast tego/c
, aby dać ci szansę zobaczyć wynik ; lub możesz uruchomić za pomocą pliku wsadowego (sudo.cmd
być może?), który łączy& pause
się z końcem łańcucha uruchamiania.W obu przypadkach nie jest to to samo, co
su
lubsudo
, ale jest najbliżej. Dzięki ręcznemu ustawieniu układu okien nowe okno można utworzyć bezpośrednio pod nim i przylegać do oryginału.źródło
sudo
, z zastrzeżeniem, że nadal trzeba radzić sobie z pojawieniem się nowego okna / procesu. Chociaż prawdopodobnie nie jest to najlepszy pomysł z punktu widzenia bezpieczeństwa, wyłączenie wszystkich monitów UAC wyeliminuje konieczność reagowania na monity UAC po uruchomieniu podwyższonego procesu.mklink cmdadmin.exe cmd.exe
Istnieje raczej niewygodny sposób:
Były lepsze sposoby, ale Microsoft je zamknął. Oczywiście zawsze możesz podwinąć rękawy i napisać własny skrypt odpowiadający
sudo
kodowi źródłowemu, który ci dałem.Bluźnierstwo! Spal go na stosie! ;) Żart na bok, nie. Nie ma Byłby to błąd i luka w zabezpieczeniach. Microsoft dołożył wyraźnych starań, aby proces podwyższony i standardowy miały jak najmniej wspólnego.
Inteligentne dzieciaki, które myślą o dwóch zapleczach (jednym standardowym i jednym podwyższonym) i jednym graficznym interfejsie dla obu, powinny przeczytać o izolacji sesji 0 .
źródło
Nie ma wbudowanego takiego polecenia. Chociaż tego nie udowodniłem, wierzę w to, ponieważ widziałem wiele sposobów korzystania z dodatkowego oprogramowania / kodu w celu obejścia tego problemu.
Zapomnij o tym. Absolutnie o tym zapomnij. Jest to sprzeczne z projektem UAC. Jeśli dasz sobie radę, przełamujesz podstawowy proces bezpieczeństwa. Spodziewaj się, że Twoje rozwiązanie przebije się przez łatę po tym, jak Microsoft się dowie i naprawi, bez względu na proces, który możesz zrobić, aby obejść ten problem.
Rozwiązaniem pozwalającym uniknąć monitów UAC jest na początek wysoka wysokość. UAC nie powinien ci przeszkadzać, jeśli masz wystarczające uprawnienia. Jeśli zaczniesz od niższego poziomu (co jest często zalecane ze względów bezpieczeństwa), a następnie spróbujesz zrobić coś wymagającego wyższego poziomu, spodziewaj się interakcji UAC.
źródło
elevate cmd
aby otworzyć nowe okno wiersza polecenia z poleceniem UAC (strona zawiera również polecenia menu kontekstowego!). Lub, oczywiście, możesz po prostu Ctrl + Shift + kliknąć ikonę paska zadań dowolnego istniejącego okna wiersza polecenia, aby zrobić to samo - najczęściej tak robię. (Wiem, że nie jest to, o co poprosił OP, ale to, o co poprosił OP, jest blokowane przez projekt.)To, czego chcesz, jest niemożliwe w systemie Windows, ponieważ nie obsługuje tej koncepcji. Musisz rozpocząć nowy proces z wyższymi uprawnieniami .
Używam nircmd do podniesienia procesów z linii poleceń. Twoje polecenie byłoby
nircmdc elevate cmd
źródło
Widziałem to pytanie i wpadłem na proste rozwiązanie. Jest to małe narzędzie o nazwie
rsudo
, które uruchamia eskalowane polecenia ze zwykłego okna CMD.Uwaga: pojawi się monit UAC . Ukrywanie tego nie jest możliwe, tak właśnie zaprojektowano UAC.
Pobierz[Pobierz nie działa, wkrótce się zaktualizuje]Uwaga: polecenia są uruchamiane w nowym oknie. Jeśli chcesz wyświetlić dane wyjściowe, uruchom
rsudo.exe "pause && [command]"
źródło
rsudo.exe "[command] && pause"
?pause
najpierw uruchamia się błądTen jest dziwny.
Możesz spróbować zrobić ssh na swoim komputerze, który używałby tego samego istniejącego terminala, ale w rzeczywistości byłby zupełnie inny.
Będzie działać, ale prawdopodobnie nie jest to, czego chcesz.
Inni mogą jednak uznać to za przydatne.
źródło
Wypróbuj wiersz polecenia JPSOFT Take Command TCC / LE. Występuje w wersjach 32- i 64-bitowych i jest bezpłatny, chyba że potrzebujesz większej funkcjonalności.
Wejdź na https://jpsoft.com/ i kliknij Pobrane i wybierz, co chcesz.
TCC / LE ma START / ELEVATED, który uruchamia program z podwyższonymi uprawnieniami administratora. (Tylko Windows Vista lub nowszy).
źródło