Mam architekturę używającą sieciowych nazw (netns). Chciałbym umożliwić zwykłym użytkownikom wykonywanie niektórych operacji w tych sieciach.
Mógłbym napisać skrypt netns-exec.sh
, zainspirowany tym postem , wykonany za pomocą sudo
, zawierający:
ip netns exec $1 su $USER -c "$2"
i dodaj do mojego pliku sudoer:
user ALL=(ALL) /path/to/netns-exec.sh
Ale uważam to za tak brzydkie, że mogłam mieć z tego koszmary. Czy istnieje lepsze rozwiązanie umożliwiające zwykłym użytkownikom korzystanie z przestrzeni nazw? Czy można umieścić użytkowników w kilku przydatnych grupach? Szukałem, ale nic nie znalazłem.
sudo
root
privileges
network-namespaces
Raspbeguy
źródło
źródło
Cmd_Alias CMD_NETNS = ip netns exec [regexp matching your namespace] su [regexp matching allowed used] -c [regexp matching allowed namespace command]
w pliku sudoers, a następnie nie utworzysz grupy, w której umieścisz dozwolonych użytkowników, i powiążesz tę grupę z tym aliasem poleceń.sudo
zawierające asu
nie sam skrypt. W każdym razie napiszę skrypt, żeby to owinąć. To sprawia, że 2 przełączniki użytkownika, to naprawdę brzydkie, nie sądzisz?sudo
dostarczyłem określoną zmienną$SUDO_USER
, która jest bezpieczniejsza. Ale to wciąż brzydkie.Odpowiedzi:
Rozwiązanie 1
Wystarczy dodać grupę o nazwie „netns” i dodać do niej wszystkich poszukiwanych użytkowników. Następnie przekaż własność root: netns i daj grupie możliwości odczytu / wykonania.
Innymi słowy:
Rozwiązanie 2
To rozwiązanie jest prostsze, musisz edytować plik sudoers, jak pokazano w tym przykładzie .
źródło
ip netns
zwróci błąd informujący, że tylko root może go wykonać. Rozwiązanie 2 początkowo miałem na myśli, ale moim zdaniem nie było satysfakcjonujące.chmod 0633
dałobywrite+execute
uprawnienia do wszystkich użytkowników i donetns
grupy. Podejrzewam, że chciałeś ustawić bit SGID w skrypcie, ale jak wspomniałem @Angelo:setuid
isetgid
jest ignorowany w przypadku skryptów powłoki i nie bez powodu .Osobiście nie wiem, czy istnieje możliwość zezwolenia zwykłym użytkownikom na uruchamianie poleceń w różnych sieciowych przestrzeniach nazw, ale ten skrypt powłoki z adnotacjami może lepiej odpowiadać Twoim potrzebom:
Zainstaluj go gdzieś
/usr/bin
i pozwól użytkownikom go uruchomić.źródło
Firejail może to zrobić
Alternatywnie Netns-Exec , Nsutils i Netns nie wymaga rootowania
źródło