Come posso cd in una directory come root?


10

Diciamo che c'è una directory a cui non ho i privilegi per accedere. Ovviamente sudo cd foonon funzionerà, perché cdè una shell integrata in ogni shell di sempre.

Finora ho appena usato sudo bash(sì, so che ci sono modi migliori) per ottenere un prompt di root. Quindi, posso cdentrare nella directory per curiosare.

C'è un modo migliore per farlo?


Perché dovresti volerlo cdcome root (a meno che tu non sia effettivamente in una shell di root)?
tripleee,

se una directory era di proprietà di root e non vi era alcuna esecuzione globale
strugee,

1
Non è davvero un caso valido. Potrebbe essere utile poter leggere la directory, ma ciò non richiede che la directory sia la directory di lavoro, ovvero non è necessario cd.
Tripleee,

sì, non me ne sono reso conto fino a quando la risposta accettata non ha indicato che avrei potuto sudo ls.
Strugee,

Risposte:


12

No, non esiste un modo per cdaccedere a una directory che consenta solo il root senza essere root. Non ci dovrebbero essere troppe directory che hanno questa limitazione. Il più delle volte è l'accesso a un determinato file limitato come il /etc/shadowfile o i file di registro specifici in /var/log.

Puoi usarli sudo ls <dir>per vederli invece di bash. Inoltre, quando si utilizza sudoper diventare root, in genere si desidera impostare l'utente ( sucomando) invece di bash, quindi utilizzare questo comando invece:

$ sudo su -

Puoi anche realizzare la stessa cosa con un -iinterruttore sudo :

$ sudo -i

estratto dalla pagina man riguardante sudo -i

L'opzione -i (simula il login iniziale) esegue la shell specificata nella voce passwd (5) dell'utente di destinazione come shell di login. Ciò significa che i file di risorse specifici per l'accesso come .profile o .login verranno letti dalla shell. Se viene specificato un comando, viene passato alla shell per l'esecuzione. Altrimenti, viene eseguita una shell interattiva.

Per i file a cui non puoi accedere puoi usare uno di questi sudocomandi:

$ sudo tail /var/log/messages

$ sudo less /etc/shadow

3
Perché dovresti usare sudo su -invece di sudo -i? Entrambi ti offrono tutti i privilegi di superutente anche se tutto ciò di cui hai bisogno è la capacità CAP_DAC_READ_SEARCH.
Stéphane Chazelas,

@StephaneChazelas - Non ho mai notato questo interruttore prima. La mia introduzione originale sudoè avvenuta attraverso gli ambienti Solaris e la versione sudoche era lì non includeva questo interruttore. Guardando attraverso il log delle modifiche di sudo sembra che quell'opzione sia stata aggiunta nel 2004. Immagino che sto uscendo con questo, ma mi hai chiesto Cool. Modificherò la risposta per includerle entrambe, grazie!
slm

@ StéphaneChazelas Sono d'accordo. Preferisco sudo -Hiperché imposta anche la directory home (non imposta home per impostazione predefinita sulla mia distribuzione, il valore predefinito può variare). In caso contrario, potresti finire con i file di proprietà di root nella tua casa, se crea nuovi file lì.
doug65536,

5

No, non c'è. È necessaria una shell in esecuzione come root.


E, come sottolineato nei commenti, è abbastanza inutile cdse non si esegue una shell o un processo analogo.
Tripleee

0

Giusto, non puoi. Ecco una soluzione alternativa però:

sudo sh -c "cd restricted-dir; some_command"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.