Možnost „–nahoru“ v OpenVPN se normálně používá pro směrování atd. A tak je zpracována předtím, než OpenVPN zruší práva roota, aby běželo jako nikdo. Vyvolávám však skripty shellu, které je třeba spouštět jako neprivilegovaný uživatel.
Jak to udělám? Studoval jsem práva Drop Process Privileges, zejména polynomiální a tylerlovy odpovědi, ale nerozumím tomu, jak je implementovat. Pracuji v Centos 6.5 a suid je blokován, jak jako „chmod u+s“, tak jako „setuid()“.
Existuje plugin OpenVPN („openvpn-down-root.so“), který umožňuje, aby skripty vyvolané volbou „–down“ běžely jako root. Mohl by existovat ekvivalent, například „openvpn-up-user.so“, ale nenašel jsem ho.
Upravit0
Podle odpovědi Nikoly Kotura jsem nainstaloval runit-rpm Iana Meyera. Přestože příkaz chpst funguje v terminálu, ve skriptu up selže s „příkaz nenalezen“. Funguje to „sudo chpst“ plus nastavení správného zobrazení a jazyka. Viz Proč můj terminál nevydává znaky Unicode správně? Vzhledem k tomu potřebuje skript up tyto čtyři řádky:
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 &
Upravit1
Podle komentáře 0xC0000022L jsem zjistil, že „uživatel sudo -u“ funguje stejně jako „uživatel sudo chpst -u uživatel -U uživatel“:
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 &
Budu studovat mužské sudoery a aktualizuji, pokud/až dostanu sudo sám do práce.
Přijatá odpověď:
Používám runit chpst
nástroj pro takové úkoly. Například ze skriptu up zavolejte svůj neprivilegovaný skript:
chpst -u nobody /path/to/script