Uruchom skrypt jako root podczas logowania (bez użytkownika sudoer, sesja powłoki)
8
Podobnie jak /etc/profilei ~/.profileuruchamiany przez root zamiast użytkownika robi logowanie. /etc/rc.localdziała po uruchomieniu, ale przed zalogowaniem muszę uruchomić skrypt. Użytkownik nie jest sudoer.
Może być na to sposób, ale nie byłoby tak /etc/profilelub ~/.profileponieważ uruchamianie kodu w tych skryptach jest wykonywane przez powłokę użytkownika i podlega kontroli użytkownika, a jeśli nie chcesz, aby użytkownik miał uprawnienia do uruchamiania programów jak rootsame, będzie to musiało być wykonane przez niektóre działające usługi zewnętrzne względem procesów użytkownika. ... Pomocne może być podanie celu skryptu, który chcesz uruchomić.
Eliah Kagan
Muszę wykonać jedno konkretne (--bind) podłączenie dla jednego określonego użytkownika. Próbowałem fstab z opcjami właściciela i użytkownika, ale to nie działa. /etc/rc.local jest jedną z opcji, ale zawsze wykonuje podłączenie, niezależnie od tego, czy użytkownik się zaloguje, czy nie. Obecnie nadałem użytkownikowi uprawnienia sudoer do „montowania” użytkownika, ale jest to obejście problemu i nie lubię przyznawać żadnych uprawnień zwykłym użytkownikom. Myślę, że zamiast tego użyję rc.local. Dzięki!
Antonio Sánchez
Możesz utworzyć skrypt główny za pomocą tylko tej konkretnej mountkomendy i dać użytkownikowi uprawnienia do uruchamiania tylko tego skryptu (konfigurowanie /etc/sudoers). Polecenie z podanymi opcjami można ustawić bezpośrednio w sudoers.
enzotib
Próbowałem już w ten sposób. Chodzi o to, że kiedy przychodzi czas na uruchomienie „mount” w skrypcie, ponownie „sudo” jest obowiązkowe, ponieważ skrypt jest uruchamiany przez „użytkownika”, a nie „root”, więc pod koniec dnia „mount” należy przyznać także dla „użytkownika” i zamiast tylko jednej reguły sudoers mam teraz dwie. To jest moje doświadczenie, więc proszę pamiętać, że nie jestem ekspertem i może zrobiłem coś złego. Dzięki!
Antonio Sánchez,
Odpowiedzi:
3
Wracając do metody sudoers, myślę, że byłeś prawie tam, zanim się poddałeś. Patrząc na twoje najnowsze komentarze, chciałbym się odnieść do czegoś, co prawdopodobnie naprawi dla ciebie:
Jeśli uruchamiasz skrypt jako root, nie musisz wywoływać sudo z jego poziomu.
Mam taki skrypt:
#! /bin/bash
echo $USER
whoami
Jeśli uruchomię sudo ./myscript, zobaczę rootzwrócone dla obu tych. Sesja, w której działa skrypt, jest powłoką główną.
W skrócie oznacza to, że wszystko, co robisz w skrypcie, ma już uprawnienia root. Nie musisz dzwonić sudo(nie żeby to bolało - rootzwykle ma sudouprawnienia).
Więc napisz swój skrypt, i chowndo niego (aby tylko root mógł go uruchamiać, czytać lub edytować), a następnie po prostu pozwolić swoim użytkownikom na uruchomienie go przez sudoers. To powinno działać.rootchmod700
Jeśli to nie działa, jest to prawdopodobnie większy problem ze skryptem, a nie z ramką uprawnień. Proponuję dać użytkownikowi pełny sudodostęp (dodanie do grupy administracyjnej jest najprostszym sposobem), a następnie uruchomić skrypt.
Krok 1. Utwórz skrypt za pomocą komendy bind za pomocą dowolnego edytora. Na przykład:
sudo emacs bind_user_directories.sh
zawartość:
#!/bin/bash#NOTE: this file would be placed in /usr/local/sbin/ folder as bind_user_directories.sh#alternatively it could be placed in /etc/init.d/ ... (I guess)### BEGIN INIT INFO# Provides: bind_user_directories# Required-Start: # Required-Stop: # Should-Start: $named# Default-Start: 0 2 3 4 5 6 (I guess...)# Default-Stop: 1# Short-Description: mount --bind for a user# Description: runs mount --bind command for certain pre-defined directories for a specific user### END INIT INFO# What is this?
DESC="bind_user_directories"# See how we were called.case"$1"in
start)
log_progress_msg "bind directories for user..."
sudo mount --bind /source/path /target/path
log_progress_msg "done: bind directories for user";;
stop)
log_progress_msg "umount --bind directories for user..."
sudo umount /target/path
log_progress_msg "done: unbind directories for user";;
restart)
$0 stop
sleep 1
$0 start;;*)#log_success_msg "Usage: bind_user_directories {start|stop|restart}"
log_success_msg "Usage: service bind_user_directories <start|stop|restart>"
exit 1;;esac
exit 0
Krok 2. Zapisz plik bind_user_directories.sh i ustaw go jako wykonywalny:
chmod a+x bind_user_directories.sh
Krok 3. połącz go z odpowiednią lokalizacją, taką jak / usr / local / sbin:
description "runs mount --bind command for certain pre-defined directories for a specific user"
start on filesystem and net-device-up IFACE!=lo
stop on runlevel [!023456]
console output
respawn
respawn limit 105
exec /usr/local/sbin/bind_user_directories.sh start
Jeśli to Ci odpowiada, daj mi znać. Możesz sprawdzić dziennik systemowy pod kątem komunikatów po zalogowaniu. (Jeszcze go nie przetestowałem i nigdy wcześniej nie wdrożyłem czegoś takiego.) Jeśli ulepszysz rozwiązanie, udostępnij swoje ostateczne rozwiązanie tutaj. Dzięki.
Ale Antonio Sánchez szuka sposobu uruchomienia skryptu rootw momencie zalogowania się określonego użytkownika .
Eliah Kagan
Skrypt musi być uruchamiany niezależnie, sesja jest graficzną lub standardową powłoką. Zaktualizowałem tytuł, aby to zaznaczyć. Przeczytałem już coś o Upstart, ale wydaje się to skomplikowane z powodu (najwyraźniej) prostego zadania. W każdym razie i jak dotąd Upstart wydaje się jedynym sposobem, aby to zrobić. Jeśli znasz Upstart, czy trudno byłoby się nauczyć wystarczająco dużo, aby wykonać tę pracę? Dzięki!
/etc/profile
lub~/.profile
ponieważ uruchamianie kodu w tych skryptach jest wykonywane przez powłokę użytkownika i podlega kontroli użytkownika, a jeśli nie chcesz, aby użytkownik miał uprawnienia do uruchamiania programów jakroot
same, będzie to musiało być wykonane przez niektóre działające usługi zewnętrzne względem procesów użytkownika. ... Pomocne może być podanie celu skryptu, który chcesz uruchomić.mount
komendy i dać użytkownikowi uprawnienia do uruchamiania tylko tego skryptu (konfigurowanie/etc/sudoers
). Polecenie z podanymi opcjami można ustawić bezpośrednio wsudoers
.Odpowiedzi:
Wracając do metody sudoers, myślę, że byłeś prawie tam, zanim się poddałeś. Patrząc na twoje najnowsze komentarze, chciałbym się odnieść do czegoś, co prawdopodobnie naprawi dla ciebie:
Jeśli uruchamiasz skrypt jako root, nie musisz wywoływać sudo z jego poziomu.
Mam taki skrypt:
Jeśli uruchomię
sudo ./myscript
, zobaczęroot
zwrócone dla obu tych. Sesja, w której działa skrypt, jest powłoką główną.W skrócie oznacza to, że wszystko, co robisz w skrypcie, ma już uprawnienia root. Nie musisz dzwonić
sudo
(nie żeby to bolało -root
zwykle masudo
uprawnienia).Więc napisz swój skrypt, i
chown
do niego (aby tylko root mógł go uruchamiać, czytać lub edytować), a następnie po prostu pozwolić swoim użytkownikom na uruchomienie go przez sudoers. To powinno działać.root
chmod
700
Jeśli to nie działa, jest to prawdopodobnie większy problem ze skryptem, a nie z ramką uprawnień. Proponuję dać użytkownikowi pełny
sudo
dostęp (dodanie do grupy administracyjnej jest najprostszym sposobem), a następnie uruchomić skrypt.źródło
Krok 1. Utwórz skrypt za pomocą komendy bind za pomocą dowolnego edytora. Na przykład:
zawartość:
Krok 2. Zapisz plik bind_user_directories.sh i ustaw go jako wykonywalny:
Krok 3. połącz go z odpowiednią lokalizacją, taką jak / usr / local / sbin:
Krok 4. Utwórz skrypt upstart:
zawartość:
Jeśli to Ci odpowiada, daj mi znać. Możesz sprawdzić dziennik systemowy pod kątem komunikatów po zalogowaniu. (Jeszcze go nie przetestowałem i nigdy wcześniej nie wdrożyłem czegoś takiego.) Jeśli ulepszysz rozwiązanie, udostępnij swoje ostateczne rozwiązanie tutaj. Dzięki.
źródło
mdm
s/etc/mdm/PostLogin/
w świecie Ubuntu !!Aby uruchomić skrypt jako root przed zalogowaniem
Mógłbyś rozpocząć scrip z Upstart .
Można dodać wywołanie skryptu do istniejących kdm / gdm / etc uruchamiania skryptów .
Przykłady: Temat: FAQ: Autostart / Autorun, okresowe uruchamianie .
źródło
root
w momencie zalogowania się określonego użytkownika .