Jaki jest kanoniczny sposób, aby zlecenie upstart zmieniło swój identyfikator użytkownika i uruchomiło skrypt jako użytkownik nieuprzywilejowany?
Oczywiście można użyć su
lub sudo
, ale wydaje się to hacking (i może generować niepotrzebne linie dziennika).
initctl --version
znajdź swoją aktualną wersję upstart.Pytając na kanale #upstart na freenode, oficjalne stanowisko w tej sprawie brzmi:
źródło
su
ten sposób oznacza, żeexpect fork
nawetexpect daemon
nie łapią końcowego PID.exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...]
Co powiesz na użycie demona start-stop?
Z książki kucharskiej Upstart :
Uwaga:
start-stop-daemon
nie obsługiwane w RHEL.źródło
Można to zrobić na kilka sposobów, wszystkie z nieco inną semantyką, szczególnie w odniesieniu do członkostwa w grupach:
setuidgid
umieści cię w określonej grupie.setuidgid
umieszczą cię tylko w tej grupie, więc nie będziesz mieć dostępu do plików należących do innych grup, których jesteś członkiem.setuidgid
z daemontools-encore, jak isetuidgid
z zestawu narzędzi nosh mają opcję-s
(aka--supplementary
), która umieści cię w tej grupie, a także we wszystkich dodatkowych grupach dla określonego użytkownika.Używanie,
newgrp
gdy staniesz się mniej uprzywilejowanym użytkownikiem, doda pojedynczą grupę do zestawu grup, ale także utworzy nową podpowłokę, co utrudni korzystanie z niej wewnątrz skryptów.start-stop-daemon
zachowuje członkostwo w grupie i robi znacznie więcej niż tylko setuid / setgid.chpst -u username:group1:group2:group3... commandname
pozwoli ci dokładnie określić, które członkostwa w grupach mają zostać przyjęte, ale (w Ubuntu ) jest dostarczany tylko zrunit
pakietem, który jest alternatywą dlaupstart
.su -c commandname username
odbiera wszystkie członkostwa w grupach użytkowników, podobniesudo -u username commandname
jak oni, więc prawdopodobnie są drogą do najmniejszego zdziwienia.źródło
Użyj
setuidgid
z paczkidaemontools
.Dokumentacja tutaj: http://cr.yp.to/daemontools/setuidgid.html
źródło
W instancji Ubuntu 10.10 na Amazon EC2 miałem więcej szczęścia z
start-stop-daemon
poleceniem.Zmagałem się również z niektórymi innymi zwrotkami . Dzwonię do Pythona z określonym
virtualenv
i niektórymi parametrami do mojego uruchomionego programu.Oto, co zadziałało dla mnie.
Ma
PYTHONPATH
to na celu zainstalowanie niektórych pakietów ze źródła w ścieżce modułu PYTHON po uruchomieniu tego zadania upstart. Musiałem robić wszystko absolutnymi ścieżkami, ponieważchdir
zwrotka wydawała się nie działać.źródło
Korzystałem z CentOS 6 i nie mogłem uzyskać zalecanego hacka (dla Upstart 0.6.5), ani też sztuczki „su”, ponieważ liczba zaangażowanych rozwidleń (chyba 4) nie była śledzona przez „spodziewać się widelca” ”lub„ expect demon ”.
W końcu właśnie to zrobiłem
(tj. ustaw bit setuid i zmień własność).
Może nie jest to najbezpieczniejsza metoda, ale w przypadku wewnętrznego projektu badawczo-rozwojowego w naszym przypadku nie miało to znaczenia.
źródło
chmod 1700
a przynajmniejchmod u+sx,go-x
tam, zamiast po prostu+s
, kwalifikowałoby się to jako „wystarczająco bezpieczne”. :)Istnieje trzecia możliwość, w zależności od tego, co próbujesz osiągnąć. Możesz być w stanie poluzować kontrolę dostępu do danych plików / urządzeń . Może to pozwolić nieuprzywilejowanemu użytkownikowi na montowanie lub uzyskiwanie dostępu do przedmiotów, do których normalnie nie mieliby dostępu. Tylko upewnij się, że nie rozdajesz kluczy do królestwa.
Możesz także zmienić limit czasu pamięci podręcznej haseł sudo . Ale nie polecam go, chyba że twoja maszyna jest fizycznie bezpieczna (tzn. Uważasz, że jest mało prawdopodobne, aby przechodzień próbował uzyskać dostęp do sudo).
Jest dobry powód, że istnieje bardzo niewiele sposobów wykonywania uprzywilejowanych działań i że wykonują one
niepotrzebnekonieczne rejestrowanie. Luźne ograniczenia byłyby zagrożeniem dla bezpieczeństwa twojego systemu, a brak rejestracji oznaczałby, że nie ma sposobu, aby dowiedzieć się, co się stało, gdy zostałeś zagrożony.Jeśli problemem jest rozmiar plików dziennika, prawdopodobnie coś jest nie tak. Sudo generuje tylko jedną linię na użycie w normalnych warunkach.
źródło
W CentOS 6, na początku wersji 0.6.5, działało to dla mnie.
lub:
Podczas użycia
proces pracy nie może zostać zatrzymany
initclt stop
. Myślę, że powodem jest:źródło