Jak określić argumenty polecenia w sudoers? Jako tło, aws
polecenie jest w rzeczywistości bramą do całej gamy podsystemów i chcę ograniczyć użytkownika do działaniaaws s3 cp ...any other args...
Kiedy spróbuję wykonać następujące czynności /etc/sudoers
Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp, /usr/local/aws/bin/aws s3 cp
gbt1 ALL=(gbt-ops) NOPASSWD: AWSS3_CMD
Niestety powłoka prosi o podanie hasła
$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
gbt-ops's password:
Jeśli usunę argumenty polecenia w Cmnd_Alias, to przepłynie zgodnie z potrzebami (bez pytania o hasło), ale autoryzacja jest zbyt szeroka. Więc jaki jest właściwy sposób ograniczania się tylko do niektórych rodzajów wywołań poleceń .
Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws, /usr/local/aws/bin/aws
Następnie
$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
...happy
Wielkie dzięki.
Odpowiedzi:
Nie użyłeś żadnych symboli wieloznacznych, ale podałeś dwa argumenty. Dlatego
sudo
szuka poleceń dokładnie tak, jak napisano (z wyjątkiem wyszukiwania ścieżki) (zman 5 sudoers
):Wypróbuj coś takiego:
Uwaga:
Tak więc potrzebna jest tylko jedna karta wieloznaczna na polecenie.
źródło
/usr/local/bin/aws s3 cp
sudoers, bezpieczniej jest zastąpić go skryptem (zapisywalnym tylko przez root).To samo co @muru, ale dla tych, którzy lubią pełny przykład pracy:
Chociaż
/sbin/cmd1
,/sbin/cmd2
może być żadnych innych poleceń.Celem
ECHO_CMD
jest przedstawienie,sudo echo X A
które poprosi o hasło, asudo echo A X
nie, i pozwoli ci zdobyć zaufanie dzięki tak prostemu eksperymentowi.(Założono, że echo zatrzymuje się
/bin/echo
, aby sprawdzić, gdzie jest w twoim systemie, spróbujwhereis echo
)źródło
/bin/echo
plik binarny, ale większość powłok ma również wbudowaną funkcję,echo
która będzie używana zamiast tego pliku binarnego, jeśli nie podasz pełnej ścieżki.