Jak uruchomić polecenie jako użytkownik, którego login jest wyłączony?

20

Próbuję użyć polecenia su, aby uruchomić aplikację jako inny użytkownik

W tym przypadku próbuję uruchomić irssi

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

Uruchomę gksu i ustawię te same parametry, i to działa, i nie pyta mnie o hasło użytkownika. Jaki jest problem? I jak mogę to rozwiązać?

Powinienem zauważyć, że użytkownik został utworzony w ten sposób

adduser --system --disabled-login [username]

jeśli to ma znaczenie ... westchnienie.

    
zadawane user123361 15.01.2013, 07:53
źródło

1 odpowiedź

27
  

Ta odpowiedź nadal powinna ci pomóc, nawet biorąc pod uwagę edycje   pytanie pod uwagę. W szczególności konto utworzone przy użyciu    --disabled-login nie ma ustawionego hasła i nie ma innych możliwości logowania   w , ale nadal powinno być możliwe użycie sudo (wyjaśniono poniżej)   uruchamiać polecenia lub powłokę jako użytkownik. Tak właśnie jest   Konto root jest skonfigurowane w Ubuntu.

Istnieje wiele problemów z poleceniem su - irssi .

To polecenie próbuje uruchomić powłokę posiadaną przez użytkownika o nazwie irssi .

Nie powiedzie się, jeśli:

  • Nie ma użytkownika irssi .
  • Konto użytkownika irssi jest wyłączone.
  • Konto użytkownika irssi zostało wyłączone dla interaktywnego logowania. Czasami konto może korzystać z usług takich jak FTP, ale nie można się normalnie logować, ustawiając ich powłokę na coś, co zamyka się natychmiast, np.% Co_de%. Wtedy logowanie natychmiast się kończy, bez wiadomości.
  • Wprowadzane hasło nie jest poprawne dla użytkownika /bin/false .

Flaga irssi sprawia, że ​​powłoka symuluje początkową powłokę logowania - czyli tak naprawdę przypomina logowanie jako - . Bez flagi irssi , jeśli polecenie - powiodło się, nadal otrzymasz powłokę należącą do su , ale zmienne środowiskowe, takie jak irssi , pozostałyby niezmienione.

Jeśli zamiast tego chcesz uruchomić program nazwany HOME , musisz wywołać irssi inaczej:

su username - -c irssi

Jeśli pominiesz su , to samo co -c username - spróbuje uruchomić polecenie jako root.

Alternatywnie możesz uruchomić powłokę, a następnie uruchomić polecenie :

  1. Uruchom powłokę za pomocą -c root .
  2. W powłoce uruchom polecenie ( su username - ).
  3. Jeśli skończysz, opuść powłokę, uruchamiając irssi .

Uruchamianie poleceń jako exit

Jeśli chcesz uruchomić root jako irssi , root nie jest na to sposobem. Nazwy rootów są domyślnie wyłączone w systemie Ubuntu i rzadko istnieje powód, aby je ponownie włączyć . Jeśli masz włączone logowanie su , powinieneś być w stanie użyć root , aby stać się su . Powodem, dla którego nie jest konieczne włączenie konta root , niezależnie od tego, czy to zrobisz, nadal możesz uruchamiać polecenia jako root z root .

Kiedy uruchamiasz polecenia z sudo , wstawiasz swoje hasło, nie hasło użytkownika, którego tożsamość chcesz uruchomić komendę . Tylko administratorzy mogą uruchamiać dowolne polecenia jako sudo z root (chyba że ponownie skonfigurujesz sudo , aby umożliwić innym to zrobić, oczywiście). Użytkownik nieuprawniony do administrowania systemem nie może uruchamiać komend jako sudo z własnym hasłem.

Aby uruchomić root jako irssi z root :

sudo irssi

Po pojawieniu się monitu wpisz swoje hasło, a nie sudo .

Oprócz wprowadzonego hasła, robi to tak samo, jak:

su -c irssi

Poza tym, że wersja root może się powieść, ponieważ nie wymaga włączenia konta sudo .

Podobnie jak w przypadku root , możesz użyć polecenia su do uruchamiać polecenia jako inny użytkownik, którego nie ma sudo . Aby uruchomić root jako irssi z username :

sudo -u username irssi

Jeśli chcesz, aby sudo zachowywał się jak sudo w odniesieniu do su - - to znaczy, że chcesz używać zmiennych środowiskowych HOME użytkownika docelowego, możesz uruchomić HOME z flagą sudo :

sudo -H irssi
sudo -H -u username irssi

Możesz uruchomić całą powłokę z -H , tak jak możesz z sudo . Z wyjątkiem tego, dla którego hasła wprowadziłeś, to polecenie ma taki sam efekt jak su :

sudo -s

Ta komenda ma taki sam efekt jak su :

sudo -i

( su - oznacza początkową powłokę logowania .)

Możesz także uruchomić powłokę jako inny użytkownik:

sudo -u username -s
sudo -u username -i

Dalsze czytanie w i

Aby dowiedzieć się więcej o sudo , spójrz na:

Dlaczego man sudo działało, gdy gksu nie działało?

su prawdopodobnie działało , uruchamiając gksu .

sudo to frontend dla obu gksu i su .W systemie Ubuntu domyślnie używane jest sudo (ponieważ w Ubuntu sudo zwykle nie jest używane do stania się su i jest tylko drugorzędnym sposobem na stanie się innymi użytkownikami, którzy nie są root ).

Możesz uczynić root użyć gksu jako nakładkę, uruchamiając su .

Możesz dowiedzieć się, czy gksu --su-mode jest w trybie gksu lub su i (jeśli chcesz) zmienić to ustawienie, uruchamiając sudo . To jest ustawienie dla każdego użytkownika.

Kiedy gksu-properties jest w trybie gksu , zachowuje się tak samo jak sudo .

Dalsze czytanie w gksudo

Analiza po rozwiązaniu

Ostatecznie udało ci się uruchomić niezbędne polecenie za pomocą:

sudo -u username irssi

(Które z wymienionych powyżej technik.)

Ostatecznie zgłosiłeś dwie informacje, które są wystarczające, by wyjaśnić, dlaczego inne techniki zawiodły, ale to się udało:

  1. Konto gksudo zostało utworzone z flagą username , co oznacza, że ​​ma no password (i nie ma innych możliwości logowania). Brak hasła nie oznacza, że ​​można zalogować się przy użyciu pustego hasła . Oznacza to, że no password jest wystarczające do uwierzytelnienia. W połączeniu z eliminacją innych sposobów uwierzytelniania oznacza to, że --disabled-login nie może w ogóle uwierzytelnić.

    Więc wszystkie rozwiązania oparte na username są obecnie niedostępne. su może działać, ponieważ z sudo nie uwierzytelniasz się jako użytkownik, któremu chcesz podszyć się pod użytkownika. Zamiast tego musisz autoryzować , aby podszywać się pod nie i uwierzytelniać się jako użytkownik (tj. wprowadź własne hasło, a nie ich).

    Można ustawić hasło na koncie, które usuwa tę barierę do logowania:

    sudo passwd username

    Może istnieć dobry powód, dla którego użytkownik nie może się zalogować. Na przykład, jeśli ten użytkownik mógł logować się i logować się graficznie, wystąpiłyby złe problemy ze środowiskiem użytkownika lub uprawnienia byłyby słabo dostosowane do z uruchomionymi aplikacjami X11? Jeśli ten użytkownik mógł się zalogować, czy umożliwiłoby to zdalne zalogowanie się jako ten użytkownik (w przypadku komputerów, na których wykryto usługi sieciowe)?

    Jeśli kiedykolwiek chcesz go ponownie wyłączyć:

    sudo passwd -dl username

    Powiązane: Ponowne wyłączanie konta sudo po tymczasowym włączeniu.

  2. Konto root ma username jako powłoka logowania.

    Gdy powłoka taka jak /bin/false działa jako twoja powłoka logowania, ustawia twoje środowisko i daje interaktywny monit, którym możesz sterować maszyną.

    Kiedy bash działa, to nic nie robi , a zgłasza awarię . ( /bin/false nic nie robi i raportuje sukces.)

    Polecenia /bin/true i false są użyteczne w skryptach i do różnych celów testowych, ale także do wyłączania konta, więc gdy ktoś się zaloguje, ich sesja logowania natychmiast się kończy. W ten sposób można włączyć hasło (lub inne metody uwierzytelniania), a użytkownicy mogą się logować, ale nie dostęp do powłoki . Na przykład, jeśli istnieje serwer FTP, nadal mogą uzyskać dostęp do swojego konta za pośrednictwem FTP. Jeśli istnieje serwer SSH, nie będą mogli uzyskać powłoki przez SSH, ale mogą nadal używać true i sftp do przesyłania plików.

    Ponieważ powłoka logowania scp nie działała, polecenia takie jak username , su username , su - username i sudo -u username -s nie mogły działać.

    Ale polecenia, które nie dają powłoki, np. sudo -u username -i lub sudo -u username command , nadal mogą działać.

    Ponieważ polecenia można uruchamiać, można zmienić powłokę logowania użytkownika na coś funkcjonalnego:

    sudo chsh -s /bin/bash username

    Należy to jednak zachować ostrożnie, ponieważ może to być dobry powód do wyłączenia interaktywnych loginów dla użytkownika.

Tutaj su username -c 'command' oba miały wyłączone powłoki i "wyłączone". Brak żadnego działającego hasła uniemożliwił działanie wszystkich rozwiązań opartych na username , podczas gdy brak działającej interaktywnej powłoki logowania uniemożliwił działanie wszystkich rozwiązań oddzielających powłoki (z wyjątkiem ręcznego wywoływania powłoki, np.% Co_de%).

Pozostało

su .

    
odpowiedział Eliah Kagan 15.01.2013, 08:57
źródło

Przeczytaj inne pytania na temat tagów