Czy jest jakiś sposób na stwierdzenie, czy ja, jako zwykły użytkownik, mam prawo wydać polecenie.
Na przykład; Chcę sprawdzić, czy mam prawo wydać polecenie zamknięcia przed jej faktycznym wydaniem.
Coś jak następujące polecenia
-> doIhaveRightToIssue shutdown
-> Yes/No
command-line
permissions
Bernhard Colby
źródło
źródło
sudo
) i sprawdzenie. Mogą być potrzebne polecenia w trybie tekstowym i mogą być potrzebnesudo
polecenia graficznegksudo
. Możesz także sprawdzić, gdzie jest zainstalowane poleceniewhich command
. Jeśli w/sbin
lub/usr/sbin
- możesz oczekiwać, że polecenie potrzebujesudo
lubgksudo
.Odpowiedzi:
Najprostszym przypadkiem jest binarny plik wykonywalny
gzip
. Najpierw lokalizujemy plik wykonywalny:Następnie patrzymy na atrybuty tego pliku:
Trzy x mówią nam, że plik może być wykonany odpowiednio przez właściciela (pierwszego
root
) lub dowolną osobę w grupieroot
(drugąroot
) i kogokolwiek innego. Dzięki temu użytkownik może uruchomić program.Jednak plik wykonywalny może być plikiem skryptu, który wywołuje inne pliki wykonywalne. Możesz być w stanie wykonać skrypt, ale nie wywoływane w nim programy. Nie ma sposobu, aby ustalić, czy użytkownik może to zrobić, poza próbowaniem tego.
Są też specjalne przypadki, takie jak
shutdown
- jest to naprawdę symboliczny link do podstawowego narzędzia o nazwiesystemctl
, które ma własne mechanizmy określające, czy możesz do niego zadzwonić, i poprosić cię o hasło sudo, jeśli nie, na przykład .(O
which
poleceniu: lokalizuje pliki wykonywalne w $ PATH, które możesz wykonać, i informuje, którego używasz, jeśli masz więcej niż jeden o tej samej nazwie w $ PATH. Nie lokalizuje tylko żadnego pliku wykonywalnego. I użyj go tutaj jako przykładu, gdzie szukać uprawnienia. Fakt, żewhich
znajduje się plik wykonywalny, już wskazuje, że masz uprawnienia do jego wykonania.)źródło
which
polecenie powinno wystarczyć dla plików znajdujących się w jednym z katalogów dodanych do$PATH
zmiennej. Na przykład działaniesudo chmod 700 /bin/nano
lubsudo chmod 744 nano
powoduje,which
że nie generuje wyników. W przypadku skryptów lokalnych, które znajdują się gdzieś indziej niż w jednym zPATH
katalogówls -l
lubstat
wywołań. Dobra odpowiedź, ale proszę dodaj tę informację do swojego postustat -c '%a' /bin/gzip
dostać755
na przykład.Z
sudo
:Jeśli nie mam pozwolenia,
sudo
będę narzekać zamiast pokazywać polecenie.Dzięki polkit sprawdzasz akcję, którą chcesz uruchomić:
Znalezienie odpowiedniego działania to inna kwestia.
źródło
sudo -l
nawet jeśli nie jesteś sudoerem - o to właśnie chodzi-l
- aby powiedzieć ci, czy możesz uruchomić polecenie za pomocą sudo.Możesz użyć:
command -v shutdown
zwraca ścieżkę doshutdown
polecenia.test -x
sprawdza, czy ta ścieżka jest dla ciebie wykonywalna.Zauważ, że chociaż możesz być w stanie wykonać polecenie, polecenie może nadal zawieść, ponieważ ma niewystarczające uprawnienia do wykonania zadania. Jest to częsty przypadek w systemach typu Unix, które zamiast ograniczać dostęp do wykonania polecenia, zamiast tego ograniczają dostęp do operacji, które mogą faktycznie wykonywać programy.
źródło
alias shutdown="shutdown now"
?$(which shutdown)
lub$(shopt -u expand_aliases && command -v shutdown)
. Ten problem występuje jednak tylko w trybie interaktywnym.Czasami może to być trochę trudne ...
Przede wszystkim spójrz na uprawnienia z
ls -l
...Jeśli ostatnia / trzecia trójka ma w sobie x („może wykonać”), to inni - a to oznacza, że - mogą ją wykonać ... Jeśli jest to skrypt powłoki lub coś w tym rodzaju, inni potrzebowaliby r („ też mogę przeczytać ”).
Jeśli inni nie mają uprawnień do wykonywania, ale grupa je posiada (druga triplet), możesz je wykonać, jeśli jesteś członkiem grupy - w powyższym przykładzie bin . Na przykład grupa kół jest często używana do ograniczania, kto może biegać
su
, więc tylko użytkownicy należący do tej grupy mogą ją w ogóle wykonać. Innym przykładem jest wykonanie zespołu do opracowania ers i ograniczyć wykonanie kompilator C i takich narzędzi do tej grupy.Jeśli po ostatniej triplecie występuje znak + , oznacza to, że używane są AccessControllLists - może to dodawać prawa do wykonywania dodatkowych użytkowników i grup.
+++
Nawet jeśli możesz wykonać polecenie, polecenie może zależeć od dostępu do plików, katalogów i / lub urządzeń, do których nie masz dostępu - może to ograniczyć to, co będziesz w stanie zrobić (możesz nie być w stanie robić cokolwiek).
Wreszcie, chociaż możesz zostać upoważniony do wykonania polecenia, samo to polecenie może sprawdzić twoją tożsamość i odmówić ci jej użycia, chyba że jesteś wymieniony w pliku konfiguracyjnym lub nie ma określonych użytkowników (np. Root ). Na przykład
mount
polecenie pozwoli tylko rootowi zamontować dowolne urządzenie - zwykli użytkownicy mogą montować tylko urządzenia wymienione jako takie w / etc / fstab ... które mogą być żadne. Jeśli nie jesteś rootem i próbujesz coś zamontować,mount
narzeka i odmówi zamontowania urządzenia. Innym przykładem jestsudo
, który będzie działał dla każdego, ale tylko użytkownicy z listy / etc / sudoers będą mogli uruchamiać rzeczy jako root .źródło
Korzystanie
which
,type
,command
itd. Jest to praktyczne rozwiązanie, które będzie działać w 99% przypadków, ale żeby być w 100% pewien, że będziesz musiał ręcznie sprawdzać każdy katalog wykonywalny podanej na stronie$PATH
. Wiele powłok (w tymbash
) poprzedzi twoją komendę hasłami z$PATH
i spróbuje wykonać te pliki wielokrotnie, dopóki się nie powiedzie. Ponieważwhich
tak naprawdę nie można wykonać polecenia, nie jest w stanie przewidzieć, który plik naprawdę wybierze twoja powłoka.Wyobraźmy sobie na przykład, że
PATH=/opt/arm/bin:/bin
oba katalogi zawierają pliki wykonywalne, ale dla różnych architektur. Uruchomieniewhich dd
powróci/opt/arm/bin/dd
(zakładając, że mam uprawnienia do jego wykonania), ponieważ ten wpis jest pierwszy. Jednak gdy uruchomiędd
moją powłokę,/bin/dd
zostanie wykonana, ponieważ/opt/arm/bin/dd
nie będzie działać. Ta sama sytuacja może się zdarzyć w przypadku uszkodzonych plików binarnych, brakujących bibliotek itp. Ostatecznie nie ma pewności, czy można wykonać polecenie, czy nie, prócz próby.Kolejnym aspektem jest to, co uważasz za „posiadanie uprawnień”. Jako użytkownik mam uprawnienia do uruchamiania,
rm ~/file
ale nie mamrm /root/file
. Ponownie, nie ma ogólnego sposobu, aby wiedzieć, że bez ręcznej kontroli lub wydania polecenia i obserwacji wyników.źródło