Opcja „--up” w OpenVPN jest zwykle używana do routingu itp. Tak więc jest przetwarzana, zanim OpenVPN zrzuci uprawnienia roota do działania jak nikt. Jednak wywołuję skrypty powłoki, które muszą działać jako nieuprzywilejowany użytkownik.
Jak mogę to zrobić? Studiowałem uprawnienia Drop Process , w szczególności odpowiedzi wielomianowe i tylerl, ale nie rozumiem, jak je wdrożyć. Pracuję w Centos 6.5, a suid jest zablokowany, zarówno jako „chmod u + s”, jak i „setuid ()”.
Istnieje wtyczka OpenVPN („openvpn-down-root.so”), która umożliwia uruchamianie skryptów wywoływanych przez opcję „--down” jako root. Może istnieć odpowiednik, taki jak „openvpn-up-user.so”, ale go nie znalazłem.
Edytuj0
Według odpowiedzi Nikoli Kotur zainstalowałem runit-rpm Iana Meyera . Chociaż polecenie chpst działa w terminalu, w skrypcie up kończy się niepowodzeniem z „nie znaleziono polecenia”. Działa „sudo chpst” plus ustawienie odpowiedniego wyświetlacza i języka. Zobacz Dlaczego mój terminal nie wyświetla poprawnie znaków Unicode? Biorąc to pod uwagę, skrypt up potrzebuje następujących czterech linii:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo chpst -u user -U user /home/user/unprivileged.sh &
Edytuj1
Według komentarza 0xC0000022L stwierdzam, że „sudo -u użytkownik” działa tak samo jak „sudo chpst -u użytkownik -U użytkownik”:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo -u user /home/user/unprivileged.sh &
Będę studiować sudoers i zaktualizować, czy / kiedy dostanę sudo sam do pracy.
źródło
Odpowiedzi:
Używam runit „s
chpst
narzędzie do zadań takich jak ten. Na przykład z poziomu skryptu wywołaj swój nieuprzywilejowany skrypt:źródło
Obejmując tylko runit i sudo bardzo brakuje. W rzeczywistości istnieje cała rodzina zestawów narzędzi, takich jak runit, i szeroki wybór narzędzi do robienia dokładnie tego, właśnie tego zadania, do którego zostały zaprojektowane:
setuidgid
:setuidgid
:setuidgid
:chpst
:runuid
:s6-setuidgid
:setuidgid
:Nie łączą różnych zadań związanych z dodawaniem uprawnień i nigdy nie wchodzą w tryb interaktywny.
Nawiasem mówiąc, twoje problemy z załatwieniem to niewiele więcej niż zapomnienie o tym,
sbin
jak je mieć .bin
PATH
Dalsza lektura
źródło
skrypt, który upuszcza uprawnienia i uruchamia inny skrypt (ale tutaj właśnie go uruchomiłem):
Przykład:
źródło
/etc/sudoers
pozwala na bardzo szczegółowe określenie, jakie zmienne środowiskowe mogą być przekazywane do uruchomionego programusudo
i tak dalej.man sudoers
. Szczerze mówiąc, ktokolwiek używasudo
tylkosudo su -
do przełączania kontekstu użytkownika lub do zmiany kontekstu użytkownika, nie ma pojęcia, co kryje się za tym niesamowitym programem i ile można zablokować dla poszczególnych programów, użytkowników, hostów itp.$0
; osoba dzwoniąca może ustawić skrypt na$0
dosłownie wszystko, co chce. I użyj więcej cytatów.$0
jest/directory/name with spaces/script
(i pamiętać, użytkownicy mogą tworzyć dowolne dowiązania w miejscach, których są właścicielami, nawet jeśli nie korzystaćexec -a somename yourscript
zadzwonićyourscript
z$0
odsomename
), to by sięsudo -u nobody /directory/name with spaces
, zewith
ispaces
przekazywane jako osobne argumenty polecenia .Co powiesz na:
Skarżyłeś się na środowisko w poprzednim komentarzu, więc możesz również porównać różnice między wyjściami:
źródło
W systemie Linux możesz użyć
runuser
lubsetpriv
jeśli sesja PAM nie jest wymagana (oba zutil-linux
):Ze strony podręcznika
su
:źródło