Czy istnieje sposób na uruchomienie części skryptu jako inny użytkownik (inny niż root)? Jeśli to pomoże, część do uruchomienia jako inny użytkownik występuje na końcu skryptu
polecenie sudo uruchamia polecenie jako nazwę użytkownika .
Jeśli skrypt jest uruchamiany jako root, nie sądzę, aby monitował o hasło. W przeciwnym razie w tym artykule omówiono, jak używać sudo z hasłem w jednym wierszu polecenia? , a w tym artykule omówiono korzystanie z sudo bez hasła?
Jest to przyjemne i łatwe, ale czy można to zrobić dla grupy poleceń zamiast pojedynczo?
Andrew
napisz skrypt bash, uczyń go wykonywalnym, chmod +x script.sha następnie po prostusudo -u username script.sh
NiCU,
@Andrew Zastanawiałem się nad tym sam i następujące działały dla mnie: sudo -u ic sh -c 'cmd1 && cmd2'
Karussell
Uwzględnij również iopcję, jeśli chcesz uzyskać środowisko użytkownika
neoDev,
6
Ta odpowiedź jest dobra, ale porada dotycząca błędu serwera jest nieco niebezpieczna - pozwoliłby każdemu uruchomić coś jako root! Publikuję tutaj, ponieważ nie mogę sformatować komentarza.
Polecam użycie visudo, aby dać potrzebne uprawnienia tak dokładnie, jak to możliwe. Wpisz visudoi dodaj wiersz, taki jak:
Czy działałoby to dla polecenia dostępnego tylko dla konkretnego użytkownika?
Manish Mathai
Możesz określić, że tylko konkretni użytkownicy mogą uruchamiać polecenie (w powyższych przykładach zastąp usernamenazwę użytkownika, który powinien móc uruchomić polecenie). Jeśli plik wykonywalny, który chcesz uruchomić, może być wykonywany tylko przez jednego konkretnego użytkownika, to też jest w porządku - po prostu przekaż tę nazwę użytkownika w sudo -u username commandlinewierszu skryptu.
James Polley,
@Manish. Tak. Plik sudoers mówi: „Zezwól tej nazwie użytkownika na tym hoście na uruchomienie polecenia 1 bez konieczności podawania hasła.
DaveParillo
6
# I = lubię:
#test if running bash as a different user works
sudo -u nobody bash -c :&& RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
Myślę, że jest to najbardziej odpowiednia odpowiedź, ponieważ wszystkie inne odpowiedzi sugerują sudo, które często nie jest instalowane domyślnie w niektórych minimalnych instalacjach z Linuksem.
Tim
1
W ten sposób koniec skryptu zostanie wykonany przez innego użytkownika (root). Zwróć uwagę na połączenia $[LINENO+2]i exit $?. Są one wymagane, aby koniec skryptu wykonał się tylko raz i aby zachować kod wyjścia sudowywołania.
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1
Odpowiedzi:
Użyj polecenia sudo w skrypcie.
W formie:
polecenie sudo uruchamia polecenie jako nazwę użytkownika .
Jeśli skrypt jest uruchamiany jako root, nie sądzę, aby monitował o hasło. W przeciwnym razie w tym artykule omówiono, jak używać sudo z hasłem w jednym wierszu polecenia? , a w tym artykule omówiono korzystanie z sudo bez hasła?
źródło
chmod +x script.sh
a następnie po prostusudo -u username script.sh
i
opcję, jeśli chcesz uzyskać środowisko użytkownikaTa odpowiedź jest dobra, ale porada dotycząca błędu serwera jest nieco niebezpieczna - pozwoliłby każdemu uruchomić coś jako root! Publikuję tutaj, ponieważ nie mogę sformatować komentarza.
Polecam użycie visudo, aby dać potrzebne uprawnienia tak dokładnie, jak to możliwe. Wpisz
visudo
i dodaj wiersz, taki jak:Jeśli potrzebujesz uruchomić to samo na wielu hostach, możesz otworzyć to za pomocą:
Ale ** nie * nie użyłbym:
lub nazwa użytkownika nazwa hosta = WSZYSTKIE
Strona podręcznika sudoer ma wiele krwawych szczegółów
źródło
username
nazwę użytkownika, który powinien móc uruchomić polecenie). Jeśli plik wykonywalny, który chcesz uruchomić, może być wykonywany tylko przez jednego konkretnego użytkownika, to też jest w porządku - po prostu przekaż tę nazwę użytkownika wsudo -u username commandline
wierszu skryptu.# I = lubię:
# ./biegać
źródło
W przypadku sonarqube:
sudo -u sonar /usr/bin/sonar start
gdzie
sonar
jest nazwą użytkownika użytego do uruchomienia polecenia/usr/bin/sonar start
źródło
nie jestem tego pewien, ale jeśli chcesz, aby TYLKO koniec tego skryptu działał jako inny użytkownik, możesz dodać go
su someuser
przed końcem skryptu.Czy coś brakuje?
Mam nadzieję, że to pomaga
pozdrowienia
źródło
W ten sposób koniec skryptu zostanie wykonany przez innego użytkownika (root). Zwróć uwagę na połączenia
$[LINENO+2]
iexit $?
. Są one wymagane, aby koniec skryptu wykonał się tylko raz i aby zachować kod wyjściasudo
wywołania.źródło