Czasami miałem ten problem z takimi podstawowymi poleceniami jak cd. Za pomocą dzdo cdzwracanego „polecenia nie znaleziono”. Oczywiście, że później sobie sprawę, że cding w katalogu, który nie ma uprawnień w, nie pomoże bardzo dużo, więc albo trzeba powłoki roota lub konieczności dzdo ls, dzdo mvitp zawartość spoza tego katalogu.
Wildcard
2
Problem sudo cdpolega na tym, że cdjest to wbudowane polecenie, a nie program. Jeśli chcesz wejść do katalogu, do którego nie masz dostępu, i (na przykład) zmienić tam nazwę pliku, możesz (na przykład) sudo mv dir/oldfile dir/newfilelubsudo sh -c "cd dir; mv oldfile newfile" .
G-Man mówi „Przywróć Monikę”
Odpowiedzi:
13
Gdy to zrobisz sudo, otrzymasz wstępnie skonfigurowaną $PATH, która jest (powinna być) czymś w rodzaju domyślnej ścieżki użytkownika root . Twojego programu nie ma na liście katalogów określonych przez $PATH.
sudo stara się być bezpiecznym podczas wykonywania poleceń zewnętrznych.
Istnieją dwa różne sposoby radzenia sobie ze zmiennymi środowiskowymi. Domyślnie
opcja env_resetsudoers jest włączona. Powoduje to, że polecenia są wykonywane z minimalnym środowisku zawierającym TERM,
PATH, HOME, SHELL, LOGNAME, USERa USERNAMEoprócz zmiennych z procesu wywołującego jest dozwolone przez env_checki env_keepsudoers opcji. W rzeczywistości istnieje biała lista zmiennych środowiskowych.
Jeśli nie możesz skonfigurować, sudoaby zachować swój $PATH, zwykłym obejściem jest podanie pełnej nazwy ścieżki programu. Może to nie działać dobrze ze skryptami wywołującymi inne pliki wykonywalne w katalogu (niedostępnym).
Powinieneś podać pełną ścieżkę. Jest to również bardziej bezpieczne; jeśli nie podasz ścieżki, możliwe jest, że osoba atakująca utworzy inny program, który będzie uruchamiany z uprawnieniami administratora.
Musisz także wstawić linię, /etc/sudoersaby na to pozwolić. man sudoersjeśli chodzi o składnię, to o wiele za dużo tutaj.
cd
. Za pomocądzdo cd
zwracanego „polecenia nie znaleziono”. Oczywiście, że później sobie sprawę, żecd
ing w katalogu, który nie ma uprawnień w, nie pomoże bardzo dużo, więc albo trzeba powłoki roota lub koniecznościdzdo ls
,dzdo mv
itp zawartość spoza tego katalogu.sudo cd
polega na tym, żecd
jest to wbudowane polecenie, a nie program. Jeśli chcesz wejść do katalogu, do którego nie masz dostępu, i (na przykład) zmienić tam nazwę pliku, możesz (na przykład)sudo mv dir/oldfile dir/newfile
lubsudo sh -c "cd dir; mv oldfile newfile"
.Odpowiedzi:
Gdy to zrobisz
sudo
, otrzymasz wstępnie skonfigurowaną$PATH
, która jest (powinna być) czymś w rodzaju domyślnej ścieżki użytkownika root . Twojego programu nie ma na liście katalogów określonych przez$PATH
.Zobacz na przykład
sudo
zachowaj PATH?PATH
)Jeśli nie możesz skonfigurować,
sudo
aby zachować swój$PATH
, zwykłym obejściem jest podanie pełnej nazwy ścieżki programu. Może to nie działać dobrze ze skryptami wywołującymi inne pliki wykonywalne w katalogu (niedostępnym).źródło
Powinieneś podać pełną ścieżkę. Jest to również bardziej bezpieczne; jeśli nie podasz ścieżki, możliwe jest, że osoba atakująca utworzy inny program, który będzie uruchamiany z uprawnieniami administratora.
Musisz także wstawić linię,
/etc/sudoers
aby na to pozwolić.man sudoers
jeśli chodzi o składnię, to o wiele za dużo tutaj.źródło