Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 7
  • 88

Mamy taki scenariusz: podczas pracy użytkownika powiedzmy o UID-zie 2000 został zmieniony jego UID na jakiś nieprawdziwy (powiedzmy na 2001 - takiego UID-u nie ma i nie było wcześniej). UID został zmieniony w pliku /etc/passwd, a nie za pomocą odpowiedniego polecenia.

Obecnie użytkownik zamiast swojego prompta (user@localhost:~$) dostaje I have no name!@localhost:~$.

Wcześniej użytkownik mógł zalogować się z uprawieniami roota, teraz nie może dostaje komunikat "su: Cannot determine your user name.", to samo dzieje się przy próbie zalgowania się na innego użytkownika.

Polecenie id zwraca poprawny UID tj.: 2000.

Jak w powyższym przykładzie podczas pracy użytkownika przywrócić mu oryginalny UID lub zalgować się z uprawieniami roota?

Nie mogę zrobić restartu maszyny, tym samym nie działa mi single-mode, rescue-mode. Operacja musi zostać wykonana na aktualnym użytkowniku, nie mogę zalogować się zdalnie przez ssh, nie mam żadnego dodatkowego nośnika.

Grzegorz_Chojnowski_
  • Zapytał
  • @ Grzegorz_Chojnowski_ | 28.02.2015
    • lider
    • laureat
    • 40
    • 10
    • 57
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 2

Jak nie możesz się zdalnie zalogować przez ssh, to może możesz lokalnie?

Generalnie problem wygląda na problem jajka/kury.

Użytkownik w Linuksie identyfikowany jest przez UID, natomiast aplikacje zazwyczaj identyfikują go przez nazwę.

Twój problem polega na tym, że w chwili obecnej Ty jesteś użytkownikiem o UID-zie 2000, natomiast aplikacje oczekują użytkownika user o UID-zie 2001.

Można by było pomyśleć o stworzeniu biblioteki, która by zrealizowała funkcję getuid i zwróciła 2001 i załadowaniu jej przez LD_PRELOAD. Albo odwrotnie - która by zrealizowała getpwname dla UID 2000. Problem w tym, że użycie LD_PRELOAD podczas wywoływania binarek zuidowanych nie wchodzi w rachubę.

Szukałbym więc w kierunku:

  • jakichś aplikacji, do których możesz się podłączyć z poziomu bieżącego użytkownika, a które są wyescalowane uprawnieniami do roota (może jakaś sesja screena, na której ostał się root?) tutaj użycie LD_PRELOAD zadziała
  • możliwości powtórnego zalogowania się (ssh localhost, telnet...)
  • jakaś dziura w systemie/jądrze pozwalająca na wyeksploitowanie uprawnień (wbrew pozorom nie takie rzadkie zjawisko na systemach produkcyjnych)
  • remote hands, które będą mogły się zalogować lokalnie do systemu i odtworzyć passwd z backupu
Andrzej_Dopierała
  • Odpowiedział
  • @ Andrzej_Dopierała | 28.02.2015
    • lider
    • laureat
    • ekspert
    • 83
    • 65
    • 169