zezwól sudo innemu użytkownikowi bez hasła

46

Chcę mieć możliwość „su” do konkretnego użytkownika, co pozwala mi na uruchomienie dowolnej komendy bez podania hasła.

Na przykład:

Jeśli mój login to użytkownik1, a użytkownik, którego chcę „su”, to użytkownik2:

Użyłbym polecenia:

su - user2

ale potem zachęca mnie to

Password:

zio
źródło
Zapytaj drugiego użytkownika o hasło. Przynajmniej drugi użytkownik wie, co zostało zrobione pod jego / jej identyfikatorem.
Globalny koczownik
1
Nie ma to nic wspólnego z innym użytkownikiem fizycznym. Oba dokumenty są moje. Znam hasło podczas tworzenia konta. Po prostu nie chcę za każdym razem wpisywać hasła.
zio
Czy można ssh do użytkownika, czy potrzebujesz odziedziczyć w szczególności jedną powłokę i potrzebujesz su do działania?
bmike
1
@zio Świetny przypadek użycia. Nie open -na Skypedziała dla ciebie?
bmike

Odpowiedzi:

66

sudo mogę to dla Ciebie zrobić :)

Wymaga to jednak trochę konfiguracji, ale kiedy to zrobisz, zrobiłbyś to tylko:

sudo -u user2 -s

I byłbyś zalogowany jako użytkownik2 bez podawania hasła.

Konfiguracja

Aby skonfigurować sudo, musisz edytować swój plik konfiguracyjny poprzez: visudo. Uwaga: to polecenie otworzy konfigurację za pomocą viedytora tekstu, jeśli nie czujesz się z tym komfortowo, musisz ustawić inny edytor (za pomocą export EDITOR=<command>) przed wykonaniem następującego wiersza. Innym edytorem wiersza poleceń, który czasem uważany jest za łatwiejszy, jest nanoto możliwe export EDITOR=/usr/bin/nano. Zwykle potrzebujesz uprawnień superużytkownika do visudo:

sudo visudo

Ten plik ma inną sekcję, aliasy, a następnie wartości domyślne i na końcu masz reguły. Tutaj musisz dodać nową linię. Nawigujesz na końcu pliku i dodajesz to:

user1    ALL=(user2) NOPASSWD: /bin/bash

Można wymienić również /bin/bashprzez ALLa następnie można uruchomić dowolną komendę jako User2 bez hasła: sudo -u user2 <command>.

Jeśli chcesz móc przejść do dowolnego użytkownika, po prostu użyj

user1    ALL=(ALL) NOPASSWD: /bin/bash

Aktualizacja

Właśnie widziałem Twój komentarz dotyczący Skype. Możesz rozważyć dodanie Skype'a bezpośrednio do pliku konfiguracyjnego sudo. Zakładam, że masz Skype'a zainstalowanego w folderze Aplikacje :

user1    ALL=(user2) NOPASSWD: /Applications/Skype.app/Contents/MacOS/Skype

Następnie zadzwonisz z terminala:

sudo -u user2 /Applications/Skype.app/Contents/MacOS/Skype
Huygens
źródło
Jest to o wiele mniej skomplikowane niż pomysł na klucze ssh, więc używaj tego, chyba że potrzebujesz kluczy ssh również do zdalnego dostępu.
bmike
2
Z punktu widzenia bezpieczeństwa należy zauważyć, że określenie konkretnego polecenia oznacza, że ​​powinno to być polecenie tylko do odczytu dla użytkownika1; W przeciwnym razie mogą zastąpić polecenie czymś innym i uruchomić to jako użytkownik2. A jeśli nie przejmujesz się tym, równie dobrze możesz określić, że użytkownik1 może uruchamiać dowolne polecenie jako użytkownik2, a zatem mieć prostszą konfigurację sudo.
Stan Kurdziel
@StanKurdziel dobry punkt! Chociaż należy o tym pamiętać, rzadko zdarza się, że użytkownicy zapisują pliki wykonywalne systemu, chyba że jesteś rootem, ale w tym przypadku nie potrzebujesz sudo ;-) Ale masz rację, dodając ten komentarz, ponieważ tak rzadko że prawdopodobnie przeoczyłem to więcej niż jeden raz.
Huygens
Aby zbliżyć się do zachowania, su - user2zamiast su user2poleceń, prawdopodobnie wszystkie powinny obejmować sudo -u user2 -i, aby symulować początkowe logowanie jako użytkownik2
Gert van den Berg
4

Skonfiguruję publiczne / prywatne klucze ssh dla drugiego konta i przechowuję klucz na pierwszym koncie.

Następnie możesz uruchomić polecenie takie jak:

 ssh user@localhost -n /Applications/Skype.app/Contents/MacOS/Skype &

Nadal występują problemy, w których Skype się myli, ponieważ na jednym koncie użytkownika działają dwie instancje, a pliki odczytywane / zapisywane przez ten program mogą powodować konflikty. Może również działać wystarczająco dobrze dla twoich potrzeb i nie potrzebujesz iPoda touch, aby uruchomić drugą instancję Skype.

bmike
źródło
1
Jest to dobre bezpieczne rozwiązanie dla ogólnego przypadku logowania bez hasła do dowolnego konta na dowolnym hoście, ale powiedziałbym, że to prawdopodobnie przesada, gdy oba konta są na tym samym hoście i należą do tego samego użytkownika.
calum_b
@ scottishwildcat Jest to o wiele bezpieczniejsze niż alternatywa skryptu hasła i podawania go w postaci zwykłego tekstu lub używania zmiennej i przechowywania hasła w pęku kluczy oraz używania narzędzia takiego jak expectskrypt do interakcji. Po prostu używam sudo su - blahi wpisuję hasło. Myślę, że druga odpowiedź obejmuje sudo wystarczająco dobrze, aby zachować to jako komentarz.
bmike
Och, z pewnością nie sugerowałem, że twoja odpowiedź powinna zostać usunięta… Nawet nie głosowałem za odrzuceniem, to odpowiedź jest całkowicie dobra.
calum_b
Wydaje się, że jesteśmy w całkowitej zgodzie - dzięki za dodanie - możesz go edytować w odpowiedzi, jeśli możesz to poprawić.
bmike
Zaakceptowane rozwiązanie ( sudo -u user2 <...>) ma tę zaletę, że nie może być używane zdalnie, co może pomóc w bezpieczeństwie - nie ma klucza prywatnego dla użytkownika 1, który mógłby zostać skradziony.
Gert van den Berg,