Uruchom skrypt powłoki jako inny użytkownik, który nie ma hasła


245

Chciałbym uruchomić skrypt z głównej powłoki Ubuntu jako inny użytkownik, który nie ma hasła.

Mam pełne uprawnienia sudo, więc spróbowałem:

sudo su -c "Your command right here" -s /bin/sh otheruser

Następnie muszę wprowadzić hasło, ale nie jestem pewien, czy ten skrypt naprawdę działa teraz pod tym użytkownikiem.

Jak mogę potwierdzić, że skrypt naprawdę działa teraz pod tym użytkownikiem?

Odpowiedzi:


354

Możesz to zrobić z sulub sudobez potrzeby obu.

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

Odpowiednie części man sudo:

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

sumoże zmienić użytkownika tylko bez podania hasła, jeśli jesteś rootem. Zobacz odpowiedź Caleba

Możesz zmodyfikować /etc/pam.d/suplik, aby zezwolić subez hasła. Zobacz tę odpowiedź .

Jeśli zmodyfikowany plik auth do dalszej części, każdy użytkownik, który był częścią grupy somegroupmogły sudo otheruserbez hasła.

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

Następnie przetestuj z terminala

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser

4
Czy możesz również dodać, jak to zrobić su?
rubo77

2
To prosi mnie o hasło :-(
IanVaughan

1
@IanVaughan, Przy domyślnej konfiguracji (sudo), będziesz proszony o hasło, chyba że uruchomisz je jako root. Możesz skonfigurować sudo, aby „zezwalało użytkownikowi A na uruchamianie cmd C jako użytkownik B bez wymagania hasła”. Zobacz help.ubuntu.com/community/Sudoers
geirha

1
Pojawia się monit o podanie hasła podczas uruchamiania go jako root. Jakieś sugestie?
Nate

1
@NamGVU pamiętaj, że kolejność ma znaczenie. Jeśli twoi sudoers mają regułę, która określa inne uprawnienia dla twojego użytkownika lub grupy, do której należysz, zastąpią twoją regułę NOPASSWD.
geirha

100

Jeśli chcesz użyć su zamiast sudo, uważam, że możesz użyć czegoś takiego:

su - <username> -c "<commands>"
  • - będzie symulować logowanie określonego użytkownika
  • -c mówi, że chcesz uruchomić polecenie

ps. Niestety nie jestem w stanie zainstalować Ruby przy użyciu rvm z tą metodą, ale prawdopodobnie nie jest to związane.


5
Musiałem dodać sudona początku, inaczej poprosiłoby mnie o hasło.
IanVaughan

2
To na pewno nie działa bez sudo. z sudo działa, na przykład: sudo su - www-data -c "touch /tmp/test"pomyślnie utworzył plik jako dane www
rubo77 24.09.16

Aby użyć „su” potrzebujesz hasła roota, celem „sudo” jest uniknięcie tego. Jeśli masz hasło roota używając „su” jak wyżej, powinno działać dobrze.
Samuel Åslund,

6

Powyższe odpowiedzi są dla mnie bardzo przydatne, ale odpowiadają na rzeczywiste pytanie ...

Jak mogę potwierdzić, że skrypt naprawdę działa teraz pod tym użytkownikiem? -

Posługiwać się:

ps -ef | grep <command-name>

Dane wyjściowe powinny zawierać skrypt i faktycznego użytkownika, który go wykonuje. Osoby korzystające z systemów podobnych do BSD, np. MAC, mogą znaleźć podobne informacje dzięki:

ps aux | grep <command-name>

Użytkownicy systemu Linux mogą korzystać z ps aux.
Dean Howell,

@DeanHowell; To prawda, ale użytkownicy MAC nie mogą używać „ps -ef”, a „ps aux” to opcje BSD, dostępne tylko jako funkcja kompatybilności, podczas gdy „ps -ef” jest znormalizowanymi opcjami Unix / POSIX.
Samuel Åslund,

2

Miałem ten sam problem. Wystarczy wpisać polecenie, screen -dmS testscreenaby utworzyć oddzielny ekran na koncie użytkownika niebędącym sudo, a następnie można go zalogować i sprawdzić, czy ten ekran już istnieje screen -ls.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.