Jak uniemożliwić użytkownikowi zalogowanie się, ale zezwolić „su - user” w systemie Linux?

93

Jak zezwolić użytkownikowi na zalogowanie się za pomocą „ su - użytkownika ”, ale uniemożliwić mu zalogowanie się przy użyciu SSH?

Próbowałem ustawić powłokę na, /bin/falseale kiedy próbuję su, nie działa.

Czy istnieje kilka sposobów, aby zezwolić tylko na logowanie su?

Czy SSH jest właściwą AllowUserdrogą? (jak bym to zrobił, jeśli to jest droga)

NoozNooz42
źródło

Odpowiedzi:

113

Możesz użyć AllowUsers / AllowGroups, jeśli masz tylko kilku użytkowników / grup, którzy mogą zalogować się przez ssh lub DenyUsers / DenyGroups, jeśli masz tylko kilku użytkowników / grup, które nie mogą się zalogować. Pamiętaj, że ogranicza to logowanie tylko przez ssh, inne sposoby logowania (konsola, ftp, ...) są nadal możliwe. Musisz dodać te opcje do pliku / etc / ssh / sshd_config dla większości instalacji ssh.

Jeśli ustawiłeś powłokę logowania na / bin / false, której możesz użyć su -s /bin/bash user(zamień / bin / bash na wybraną powłokę)

Florian Diesch
źródło
wielkie dzięki wszystkim. Nie spodziewałem się, że otrzymam więcej niż 2 głosy poparcia dla mojego pytania :) Lubię konstrukcję „su-s ...” i konsola / ftp jest dobrym punktem. Naprawdę chciałem czegoś takiego jak „su-s”.
NoozNooz42,
3
Sztuczka z Su jest złota. Cały czas używam go do kont systemowych, na których muszę testować uprawnienia, np. Apache, nikt, itp. Zwykle wykonuję su - user -s / bin / bash. Opcjonalny argument - może być użyty do zapewnienia środowiska podobnego do tego, czego użytkownik oczekiwałby, gdyby użytkownik zalogował się bezpośrednio.
dmourati
2
Jeśli potrzebujesz załadować zmienne środowiskowe (np. Z / etc / profile), przejście dodatkowej kreski to zrobi:su - -s /bin/bash user
Leons
13

Jeśli nadal chcesz, aby su działało, możesz użyć sudo -u [username]lub przekazać -s /bin/bashsu jako tymczasową powłokę. Obie robią to samo bez powłoki /etc/passwd.

Loke
źródło
7

Jeśli konto nie ma hasła ( passwd -d nazwa użytkownika ), nie może zalogować się interaktywnie (konsola, SSH itp.). Jeśli mają prawidłową powłokę, su nadal będzie działać. Zwróć jednak uwagę na „interaktywnie”; jeśli ktoś zdecyduje się ustawić parę kluczy SSH dla konta, zadziała!

astrostl
źródło
czy użytkownik musi mieć prawidłową powłokę, aby su? Jestem prawie pewien, że nadal jesteś w tej samej oryginalnej powłoce po tym, jak su do innego użytkownika ... tak naprawdę nie logujesz się jako inny użytkownik ... Więc po prostu ustawienie powłoki na / dev / null może działać także.
Brian Postow,
Tak, nadal potrzebuje prawidłowej powłoki: [root @ localhost ~] # su demon To konto jest obecnie niedostępne. [root @ localhost ~] # su - daemon To konto jest obecnie niedostępne. (System RHEL, powłoka demona to / sbin / nologin)
astrostl
3

W sshd_config dodaj linię DenyUser [username]

Pamiętaj, że nie uniemożliwi to temu użytkownikowi zalogowania się za pomocą konsoli.

Chris S.
źródło
1
To powinno być DenyUsersz „s”.
David G
2

Oprócz tego, co zostało wspomniane powyżej (wyłączanie i / lub brak ustawiania hasła użytkownika), moduł pam_access (wyszukaj stronę podręcznika na pam_access i access.conf) może służyć do kontrolowania dostępu do logowania.

abz
źródło
1

jak powiedzieli inni;

DenyUser usernamelub DenyGroup groupnamein sshd_configuniemożliwiłoby zalogowanie pary kluczy / hasła za pośrednictwem ssh.

chociaż zwykle robię coś podobnego AllowGroup sshlub coś w tym stylu i wyraźnie dodaję osoby, które potrzebują dostępu ssh do tej grupy.

następnie możesz zrobić tak, jak powiedzieli inni: passwd -d usernameusunąć hasło użytkownika, aby nie mogli zalogować się do konsoli lub w inny sposób. lub jeszcze lepiej, passwd -l usernameaby „zablokować” konto. możliwe, że ssh odmówi dostępu do zablokowanego konta, nawet z kluczami, ale nie jestem pozytywny.

cpbills
źródło
1
W rzeczywistości ssh pozwoli ci zalogować się przy użyciu uwierzytelnienia klucza, nawet gdy hasło do konta jest zablokowane.
Richard Holloway,
1

Jak wspomniałem w komentarzu, myślę, że nadal możesz su na konto z nieprawidłową powłoką. Więc jeśli ustawisz powłokę użytkownika na / dev / null lub cokolwiek to jest powłoka bin, powinieneś móc nadal su do tego użytkownika ... ale każda próba zalogowania się w jakikolwiek sposób spowoduje wycofanie się z powrotem ...

Brian Postow
źródło
1

edytuj / etc / shadow, dodając! na początku skrótu hasła.

username:!<hash>:#####:#:#####:#:::

Podczas zabezpieczania nowej instalacji jest to pierwsza rzecz, którą robię po zainstalowaniu sudo, więc nikt nie może użyć użytkownika root do zalogowania się lub ssh w systemie, użytkownicy sudo mogą nadal wykonywać jako użytkownik root.

snic.io
źródło
0

Nie podawaj hasła dla użytkownika, któremu nie wolno się logować ani go usuwać.

# passwd -d myuser
François Feugeas
źródło
0

Zakładając, że chcesz tylko su suć użytkownika z konta roota i wyłączyć wszystkie inne prawa dostępu:

Użyj tego (uruchom jako root):

usermod -e 1 -L user

To wyłącza logowanie za pomocą hasła (jak sugerowało wiele innych odpowiedzi), ale także wygasa konto . Nie możesz zalogować się na wygasłe konto, np. Za pomocą kluczy SSH. Nadal możesz su user, chociaż wyświetli się powiadomienie o wygaśnięciu konta.

artfulrobot
źródło
0

Wiedza, który mechanizm jest najlepszy, zależy od wymagań. Jeśli znasz wymagania, możesz wybrać odpowiedni mechanizm. Wszystkie powyższe odpowiedzi są ważne dla pewnego zestawu wymagań.

Czy chcesz tylko ograniczyć dostęp do SSH? Czy potrzebujesz dostępu do metod poczty lub ssh? Czy dostęp jest tylko z poziomu roota?

su - userbędzie wymagał hasła dla użytkownika, jeśli zostanie uruchomiony jako użytkownik inny niż root. Jednak sudo -u user -inie wymaga hasła dla użytkownika.

BillThor
źródło