Na jakiej dystrybucji Linuksa jesteś? Albo nawet Unix?
slhck
@slhck Linux, Ubuntu 12
HappyDeveloper
3
setuid nie działa na skryptach - jest wyłączony ze względów bezpieczeństwa w większości dystrybucji * nix. Możesz to ustawić, ale zostanie zignorowany. Może możesz wyjaśnić więcej o swoim rzeczywistym problemie, abyśmy mogli pomóc Ci rozwiązać ten problem? Co to za skrypt? Dlaczego musisz go wykonać jako root? Jest używane sudo alternatywa?
slhck
Czy próbowałeś sudo -s?
Nam Phung
Odpowiedzi:
29
Bądź naprawdę ostrożny: skrypty połączone z setuid są niebezpieczne!
Jeśli nadal chcesz wykonać skrypt za pomocą setuid ustaw, możesz napisać krótki program C jako opakowanie i ustawić setuid bit na skompilowanym pliku binarnym.
Przykład opakowania:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Specyficzne zagrożenia nie są zbyt oczywiste, ale kręcą się mocno wokół środowiska. W przeciwieństwie do większości programów zachowanie skryptu powłoki może być znacząco zmienione przez dziesiątki zmiennych środowiskowych, na tyle, że bez obszernych zabezpieczeń taki skrypt może być łatwo podstępny do wykonania dowolnego kodu.
Stephanie
1
Powinieneś dodać wywołanie do clearenv () przed wywołaniem systemowym w tym opakowaniu, całkowicie usuwając środowisko, aby nie było żadnych złych ustawień, aby manipulować skryptem. kernel.org/doc/man-pages/online/pages/man3/clearenv.3.html
Stephanie
@Stephanie Dzięki, dodałem to.
speakr
@Stephanie Muszę robić coś złego, ponieważ to wszystko wygląda zbyt szalenie na wspólne zadanie. Właśnie to staram się robić: serverfault.com/questions/401405/…
HappyDeveloper
4
sudo może być użyty do zapewnienia wszystkim użytkownikom dostępu do określonego programu (lub skryptu). W tym sensie działa jak fantazyjne opakowanie setuid. Wydaje się, że zazwyczaj byłby to lepszy wybór niż pisanie własnego opakowania setuid.
jjlin
4
Najłatwiejszym i najbezpieczniejszym sposobem jest użycie bitów SETUID w uprawnieniach do plików.
w ten sposób uprawnienia do poleceń zostaną podniesione do uprawnień właściciela pliku.
aby zapobiec skryptowi z edycji nie ustawiaj zapisu dla wszystkich bitów.
setuid
nie działa na skryptach - jest wyłączony ze względów bezpieczeństwa w większości dystrybucji * nix. Możesz to ustawić, ale zostanie zignorowany. Może możesz wyjaśnić więcej o swoim rzeczywistym problemie, abyśmy mogli pomóc Ci rozwiązać ten problem? Co to za skrypt? Dlaczego musisz go wykonać jako root? Jest używanesudo
alternatywa?sudo -s
?Odpowiedzi:
Bądź naprawdę ostrożny: skrypty połączone z setuid są niebezpieczne!
Najpierw spójrz na to pytanie / odpowiedzi , zwłaszcza na ta odpowiedź i ostrzeżenie dotyczące bezpieczeństwa .
Jeśli nadal chcesz wykonać skrypt za pomocą
setuid
ustaw, możesz napisać krótki program C jako opakowanie i ustawićsetuid
bit na skompilowanym pliku binarnym.Przykład opakowania:
Kolejne rozwiązanie
sudo
(wzmiankowany tutaj ):Jako root zapobiegaj zapisywaniu (a może innym) dostępu do skryptu:
Sprawdź, czy nikt oprócz roota nie może zastąpić skryptu , np. modyfikując prawa dostępu do folderu nadrzędnego:
Zmodyfikuj prawa dostępu sudo w
/etc/sudoers
zvisudo
:Więcej szczegółów na temat ustawień (np. Ograniczenie dostępu do określonych użytkowników lub grup) można znaleźć w podręczniku sudoers.
Następnie wszyscy użytkownicy mogą uruchomić skrypt jako root bez hasła:
Jest to podobne do korzystania z powyższego rozwiązania opakowania / setuid.
źródło
sudo
może być użyty do zapewnienia wszystkim użytkownikom dostępu do określonego programu (lub skryptu). W tym sensie działa jak fantazyjne opakowanie setuid. Wydaje się, że zazwyczaj byłby to lepszy wybór niż pisanie własnego opakowania setuid.Najłatwiejszym i najbezpieczniejszym sposobem jest użycie bitów SETUID w uprawnieniach do plików. w ten sposób uprawnienia do poleceń zostaną podniesione do uprawnień właściciela pliku.
aby zapobiec skryptowi z edycji nie ustawiaj zapisu dla wszystkich bitów.
źródło