Miért nem működik a "sudo cd / var / named"? [másolat]

149

Szeretnékcd -ot/var/named -ra, de megadja nekem az engedély megtagadott hibáját, és ha ezt asudo -ot akarom használni, nem vagyok megengedett. Mi ennek a technikai oka, és lehetséges más módon is ezt tenni?

    
készlet Hojat Taheri 06.05.2013 21:02
forrás

5 válasz

208

Az ok, amiért nem teheted ezt, egyszerű és kettős

1

cd nem egy program, hanem egy beépített parancs és asudo csak a programokra vonatkozik.

sudo foo azt jelenti, hogy a foo programot rootként futtatja

sudo cd /path return

sudo: cd: command not found

mivel acd nem program.

2

Ha lehetséges lenne sudo acd -hoz egy védett könyvtárhoz futtatni, majd futtatni asudo cd /var/named parancsot, akkor normális felhasználóként lennének abban a könyvtárban, de a normál felhasználók nem használhatják legyen ebben a könyvtárban.

Ez nem lehetséges.

Megoldás:

Használhatja asudo -i -ot, hogy felemelje magát a szuperfelhasználónak. Például:

sudo -i
cd /var/named 

Most bejelentkezett rootként, és bármilyen parancsot használhat. Ha befejezte, írja be aexit parancsot, és normál felhasználóként újra bejelentkezik.

    
válasz adott Warren Hill 06.05.2013 21:30
forrás
25

Ez azért van, mert acd nem végrehajtható, hanem egy shell függvény a könyvtár módosításához.

Ha fut:

type cd

a következőt kapja:

  

a cd egy shell függvény

Használhatja asudo -s -ot egy interaktív shell megnyitásához, majdcd to a kívánt könyvtárhoz:

sudo -s
cd /var/named

A normál shellhez való visszatéréshez egyszerűen nyomja meg a Ctrl + D billentyűt.

    
válasz adott Basharat Sialvi 06.05.2013 21:29
forrás
16
Szintén érdemes megjegyeznünk, hogy acd hurok beépített vagy külső bináris állapotú állapota ellenére a sudo új eljárás létrehozásával működik a megadott parancs futtatásához.

Miért fontos ez? Mivel a sudo alapvető végrehajtási folyamata nagyon hasonlít ehhez:

  1. A shell elhagyja az alprocesszust a sudo futtatásához az adott paraméterekkel
  2. A sudo hitelesíti a felhasználót, és megerősíti a megadott parancs
  3. végrehajtásának jogát
  4. A sudo létrehoz egy alfolyamatot a megadott parancs végrehajtásához
  5. A sudo vár a 3. lépésben leadott alfolyamatra, hogy kiléphessen
  6. A sudo kilép, visszatér a shellhez
  7. Az 1. lépésben az alfolyamat kilép, és visszatér a felhasználóhoz a shell parancsra

( technikailag kissé helytelen, létezik egy rendszerhívás, amely valójában helyettesítheti a futó folyamatot egy új (azaz C könyvtárexecve()), azonban ennek a magyarázatnak a célja a kettő egyenértékű.)

Ez akkor fontos, ha figyelembe vesszük, hogy az aktuális munkakönyvtár mindegyik folyamat tulajdonsága, és örökölt, de nem támogatott . Tehát ha az A folyamat egy új B eljárást generál, akkor a B folyamat ugyanazt a munkakönyvtárat veszi kezdetbe, amelyen az A folyamatban volt. (Ez az oka annak, hogy valami hétköznapi, mint als ./, amit elvár.) De ha a B folyamat megváltozik saját munkakönyvtárát, akkor ha az A folyamat nem megy, akkor az A teljesen tisztában van ezzel a változással. (Ez pedig az oka annak, hogy ha valamilyenfind / -ot futtatsz és félúton abortálsz, akkor nem találod ki a fájlrendszernek valami látszólag véletlenszerű helyét, csak mert megtaláltad, hogy pillanatnyilag ott keresek megszakadt.)

Tehát még akkor is, ha asudo cd /somewhere pontosan azt mondja, amit az ónon mond, azsudo kilépésekor azonnal visszahozod, ahonnan elkezdted. Tehát hatékonyan a felhasználó szemszögéből nézve nem-op. Az a tény, hogy acd, miközben végrehajtott, achdir() rendszerkönyvtár funkcióval új munkakönyvtárat állított be, nem segít a felhasználónak.

Ahogy Warren Hill rámutatott, a megfelelő megoldás (valójában nem hívnám ez egy megoldás, ha asudo -i -ot használjuk, amely egy gyökérhéjba bocsátja, ahol szabadon tud navigálni a fájlrendszeren és végrehajtani bármilyen parancsot, amit érzel. Ne feledje azonban, hogy amikor elhagyja ezt a shell-ot, még mindig visszaküldte oda, ahonnan a könyvtár hierarchiájában elkezdted ugyanazt az okot, mint fent.

    
válasz adott Michael Kjörling 07.05.2013 09:27
forrás
12

A fentiek mindegyike helyes; itt van egy megoldás bár

sudo sh -c "cd restricted-dir; some_command"
    
válasz adott Tagar 07.11.2015 07:00
forrás
3

Az engedélyt ideiglenesen is megváltoztathatja, ha egy sudo felhasználó.

sudo chmod 0775 útvonal

vagy

sudo chmod + r mappapálya

Ha szükséges, helyezze vissza.

    
válasz adott Andres Abello 07.11.2016 18:14
forrás
az alábbiak szerint engedélyezett felhasználói hozzájárulások cc by-sa 3.0 hozzárendeléshez szükséges.