Wykonaj skrypt z rc.local jako użytkownik zamiast root


26

Chcę wykonać skrypt przy każdym uruchomieniu mojego serwera. Problem polega na tym, że muszę być pewnym użytkownikiem, aby wykonać skrypt, jeśli spróbuję to zrobić jako root, nie mogę znaleźć niektórych pakietów (takich jak Ruby).

Próbuję zmienić na xxx user01.

sudo su user01
/etc/init.d/script start

To jednak nie działa.


Opublikować swój skrypt inicjujący?
kwanty

Czy masz jakieś dzienniki?
Dom

Dlaczego po prostu nie użyjesz suw skrypcie rc?
Mat

Odpowiedzi:


30

Uruchomienie sudo su user01w skrypcie nie oznacza, że ​​następujące polecenia są wysyłane do wynikowej powłoki. W rzeczywistości prawdopodobnie oznacza to, że nowa powłoka jest spawnowana jako użytkownik01, która nigdy nie wychodzi!

Dwie rzeczy:

  • Możesz wykonać polecenie jako inny użytkownik, przekazując -c 'command...'argument do su, np su user01 -c '/etc/init.d/script start'.
  • Uruchomienie usługi korzystającej z /etc/init.d z rc.local nie jest właściwym rozwiązaniem. Chcesz skorzystać z usługi włączania podczas uruchamiania przy użyciu narzędzi dystrybucji, takich jak chkconfiglub update-rc.d. Nie chcesz także zadań w /etc/init.d, które nie powinny być uruchamiane jako root. Same zadania mogą swobodnie przejść do innego konta użytkownika, ale należy je wywołać przez root.


4

Możesz po prostu uruchomić polecenie poprzez sudo w następujący sposób:

sudo -H -u user01 /etc/init.d/script start

-H ustawia zmienną środowiskową HOME na zmienną użytkownika

-u określa nazwę użytkownika do uruchomienia jako


0

Na pewno nie można uruchomić tego skryptu z sudo ze względu na wymaganie (wymusza, że ​​użytkownicy muszą być zalogowani) w sudoers. Możesz chcieć wyłączyć, co jest nieco ryzykowne

Istnieje również nieco stare narzędzie o nazwie runsuid: http://freecode.com/projects/runsuid

HTH

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.