To pytanie jest całkowicie ogólne i dotyczy nie tylko mojej sytuacji, ale ... Mam małe urządzenie busybox, w którym chcę, aby użytkownik inny niż root mógł wykonać określony skrypt z uprawnieniami administratora. Na przykład coś takiego jak ten mały skrypt do włączenia DHCP, gdzie jedyną zmienną ( $1
) do wysłania na cmdline (!!) jest nazwa hosta do wysłania:
#!/bin/bash
udhcpc -b -i eth0 -h $1
uruchamianie udhcpc w ten sposób wymaga dostępu do konta root, więc w tym celu planuję zmodyfikować, /etc/sudoers
aby zawierał ten wiersz:
joe ALL = NOPASSWD: /path/to/enable_dhcp.sh
które powinny umożliwić „Joe” łatwe uruchamianie tego skryptu z uprawnieniami administratora poprzez proste uruchomienie:
sudo /path/to/enable_dhcp.sh
i nie jest proszony o hasło (to jest to, czego chcę, ponieważ chcę, żeby Joe mógł to zrobić).
Teraz .. Wiem (a przynajmniej tak mi się wydaje), że użycie $1
w skrypcie, który można łatwo uruchomić z uprawnieniami administratora, jest OGROMNYM pomysłem, ponieważ możesz do niego wstrzyknąć, co tylko chcesz.
Więc ... jaki jest najlepszy sposób, aby sobie z tym poradzić? Jak pozwolić Joe'emu robić, co chcę, z uprawnieniami roota, pozwalać mu przekazywać zmienną (lub skutecznie robić to tak, jak ze zmienną środowiskową), nie będąc jednocześnie szeroko otwartym na ataki iniekcyjne?