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

21

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)

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

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

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

jeśli to robi jakąkolwiek różnicę ... westchnij.

użytkownik123361
źródło
nie zapominasz flagi -c, aby uruchomić irssi? (su -c irssi)
eephyne
próbowałem też ... próbowałem tysiąca rzeczy ... dlaczego tak trudno uruchomić WTF, to jest dokładnie tak, jak tego chce strona man ... ale nic się nie dzieje
grrrr
czy to możliwe, że irssima problem i że polecenie su działa?
Nanne
Czy ´ [nazwa użytkownika] ´ ma odpowiednie prawa do uruchamiania irssi?
Doka,

Odpowiedzi:

28

Ta odpowiedź powinna ci pomóc, nawet biorąc pod uwagę zmiany w pytaniu. W szczególności konto utworzone --disabled-loginbez hasła i innych metod logowania , ale nadal powinno być możliwe korzystanie z sudo(wyjaśnione poniżej) do uruchamiania poleceń lub powłoki jako użytkownik. Tak właśnie rootkonfiguruje się konto w Ubuntu.

Istnieje wiele problemów z poleceniem su - irssi.

To polecenie próbuje uruchomić powłokę należącą do użytkownika o nazwieirssi .

Nie powiedzie się, jeśli:

  • Nie ma irssiużytkownika.
  • Na irssikonto użytkownika jest wyłączone.
  • Na irssikonto użytkownika zostanie wyłączone do interaktywnego logowania. Czasami konto może korzystać z usług takich jak FTP, ale nie może logować się normalnie, ustawiając powłokę na coś, co natychmiast zamyka /bin/false. Następnie logowanie natychmiast się kończy, bez wiadomości.
  • Wprowadzane hasło jest nieprawidłowe dla irssiużytkownika.

-Flag czyni go tak powłoka symuluje wstępnej powłoki logowania - czyli tak naprawdę to bardzo podobnie jak na rejestrowanie irssi. Bez -flagi, jeśli supolecenie się powiedzie, nadal będziesz mieć powłokę należącą do irssi, ale zmienne środowiskowe, takie jak HOME, pozostaną niezmienione.

Jeśli zamiast tego chcesz uruchomić program o nazwie irssi , musisz wywołać suinaczej:

su username - -c irssi

Jeśli pominiesz , będzie to to samo, co - próbuje uruchomić polecenie jako root.-c username-c root

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

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

Uruchamianie poleceń jako root

Jeśli chcesz uruchomić irssijako root, sunie jest to sposób. Logowanie do rootowania jest domyślnie wyłączone w Ubuntu, i rzadko jest powód, aby je ponownie włączyć . Jeśli włączyłeś rootlogowanie, powinieneś być w stanie suzostać root. Włączenie rootkonta nie jest konieczne, ponieważ niezależnie od tego, czy robisz, nadal możesz uruchamiać polecenia tak jak w rootprzypadku sudo.

Po uruchomieniu polecenia z sudo, można umieścić w swoim hasłem, a nie hasło użytkownika w ramach którego tożsamość chcesz polecenie do uruchomienia. Tylko administratorzy mogą uruchamiać dowolne polecenia tak jak w rootprzypadku sudo(chyba że zmienisz konfigurację, sudoaby inni mogli to zrobić oczywiście). Tak więc użytkownik, który nie ma uprawnień do administrowania systemem, nie może uruchamiać poleceń tak jak rootz własnym hasłem.

Aby uruchomić irssijak rootw sudo:

sudo irssi

I chcesz wprowadzić swoje hasło po wyświetleniu monitu nie root„s.

Z wyjątkiem wprowadzonego hasła działa to tak samo jak:

su -c irssi

Tyle że sudowersja może się powieść, ponieważ nie wymaga włączenia rootkonta.

Podobnie jak w przypadku su, możesz używać sudodo uruchamiania poleceń jako inny, niebędący rootużytkownikiem . Aby uruchomić irssijak usernamew sudo:

sudo -u username irssi

Jeśli chcesz sudo zachowywać się tak jak su -w odniesieniu doHOME - to znaczy, że chcesz użyć HOMEzmiennych środowiskowych użytkownika docelowego , możesz uruchomić sudoz -Hflagą:

sudo -H irssi
sudo -H -u username irssi

Możesz zacząć całą powłokę sudo, tak jak możesz su. Oprócz tego, dla którego hasła zostało wprowadzone, polecenie to ma taki sam efekt jak su:

sudo -s

To polecenie ma taki sam efekt jak su -:

sudo -i

( iOznacza początkową powłokę logowania .)

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

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

Dalsza lektura na sudo

Aby dowiedzieć się więcejsudo , spójrz na:

Dlaczego gksudziałał, kiedy sunie?

gksuprawdopodobnie działał przez bieganiesudo .

gksujest nakładką dla obu su i sudo. W Ubuntu domyślnie używa sudo(ponieważ w Ubuntu suzwykle nie jest używany do stania się rooti jest jedynie drugorzędnym sposobem, aby stać się innym, niebędącym rootużytkownikiem).

Możesz gksuużyć sujako nakładki, uruchamiając gksu --su-mode.

Możesz dowiedzieć się, czy gksujest w sutrybie czy w sudotrybie, i (jeśli chcesz) zmienić to ustawienie, uruchamiając gksu-properties. Jest to ustawienie dla użytkownika.

Gdy gksujest w sudotrybie, zachowuje się tak samo jak gksudo.

Dalsza lektura na gksu


Analiza po rozwiązaniu

Ostatecznie okazało się, że możesz uruchomić niezbędne polecenie za pomocą:

sudo -u username irssi

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

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

  1. usernameKonto zostało utworzone z --disabled-loginflagą, co sprawia, że mają żadnego hasła (i żadnych innych środków zalogowaniu). Brak hasła nie oznacza, że ​​można zalogować się przy użyciu pustego hasła . Oznacza to, że żadne hasło nie jest wystarczające do uwierzytelnienia. W połączeniu z eliminacją innych środków uwierzytelnienia, środki usernamete w ogóle nie mogą zostać uwierzytelnione.

    suRozwiązania oparte na wszystkich rozwiązaniach są już dostępne. sudomoże jednak działać, ponieważ sudonie uwierzytelniasz się jako użytkownik, którego zamierzasz podszyć. Zamiast tego musisz być upoważniony do podszywania się pod nich i uwierzytelniaj się jako Ty (tzn. Wprowadź własne hasło, a nie ich).

    Możliwe jest ustawienie hasła do konta, które usuwa barierę w logowaniu:

    sudo passwd username

    Jednak może istnieć dobry powód, dla którego użytkownik nie może się zalogować. Na przykład, jeśli ten użytkownik miałby możliwość logowania i zalogował się graficznie, pojawiłyby się złe problemy ze środowiska użytkownika lub przywileje, które byłyby słabo dostosowane do uruchamiania aplikacji X11 ? Jeśli ten użytkownik mógłby się zalogować, czy umożliwiłoby to zalogowanie się zdalnie jako ten użytkownik (w przypadku komputerów, na których udostępniono usługi sieciowe)?

    Jeśli kiedykolwiek chcesz to wyłączyć:

    sudo passwd -dl username

    Powiązane: Ponowne wyłączenie rootkonta po tymczasowym włączeniu.

  2. usernameKonto ma /bin/falsejako powłokę logowania.

    Gdy taka powłoka bashdziała jako powłoka logowania, konfiguruje środowisko i wyświetla interaktywny monit, za pomocą którego można sterować maszyną.

    /bin/falseNatomiast podczas uruchamiania nic nie robi i zgłasza awarię . ( /bin/truenic nie robi i zgłasza sukces).

    Polecenia falsei truesą przydatne w skryptach i do różnych celów testowych, ale także do wyłączania konta, aby gdy ktoś się zalogował, sesja logowania natychmiast się kończy. W ten sposób można włączyć hasło (lub inny sposób uwierzytelnienia), a ludzie mogą się zalogować, ale nie w celu uzyskania dostępu 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 byliby w stanie uzyskać powłoki przez SSH, ale nadal mogliby używać sftpi scpprzesyłać pliki.

    Ponieważ username„s logowanie shell był niefunkcjonalny, polecenia podoba , , i nie mógł pracować.su usernamesu - usernamesudo -u username -ssudo -u username -i

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

    Ponieważ polecenia można uruchomić, to może zmienić powłokę logowania użytkownika do czegoś funkcjonalnego:

    sudo chsh -s /bin/bash username

    Jednak należy to również zrobić ostrożnie, ponieważ może istnieć dobry powód, aby wyłączyć interaktywne logowanie dla użytkownika.

Tutaj usernameoba miały wyłączone hasło i „wyłączoną” powłokę. Brak działającego hasła uniemożliwił działanie wszystkich surozwiązań opartych na bazie, a brak działającej interaktywnej powłoki logowania uniemożliwił działanie wszystkich rozwiązań spawnujących powłokę (z wyjątkiem ręcznego wywoływania powłoki, jak ).sudo -u username bash

sudo -u username command pozostało.

Eliah Kagan
źródło
Przepraszamy za wiele zmian podczas pracy nad odpowiedzią. Łał. Dziękuję Ci. Kiedy robię cat / etc / passwd, skonfigurowany przeze mnie użytkownik ma na końcu / bin / false - więc czy to właśnie powoduje jego awarię? jakiś pomysł, jak to naprawić?
user123361 15.01.2013
Z jakiegokolwiek powodu używanie sudo -u nazwa użytkownika irssi działa na smakołyk. Dziękuję za twoją długą, dobrze wyjaśnioną odpowiedź!
user123361 15.01.13
@db Cieszę się, że zadziałało! (Przy okazji, nie trzeba przepraszać za edycję, edycja jest bardzo, bardzo dobra, a twoje pytanie prawdopodobnie przyda się także innym osobom w wyniku edycji.) Jeśli chodzi o inne pytania, zredagowałem swoją odpowiedź na na końcu dołącz sekcję analizy.
Eliah Kagan