Comment puis-je cd dans un répertoire en tant que root?

10

Disons qu'il y a un répertoire auquel je n'ai pas les privilèges d'accès. Évidemment, sudo cd foocela ne fonctionnera pas, car cdun shell est intégré à chaque shell.

Jusqu'à présent, je viens d'utiliser sudo bash(oui je sais qu'il existe de meilleures façons) pour obtenir une invite racine. Ensuite, je peux cddans le répertoire pour fouiller.

Y a-t-il une meilleure manière de faire cela?

strugee
la source
Pourquoi voudriez-vous en cdtant que root (à moins que vous ne soyez en fait dans un shell root)?
tripleee
si un répertoire appartenait à root et qu'il n'y avait pas d'exécution globale
strugee
1
Ce n'est pas vraiment un cas valable. Il peut être utile de pouvoir lire le répertoire, mais cela ne nécessite pas que le répertoire soit votre répertoire de travail, c'est-à-dire que vous n'en avez pas besoin cd.
tripleee
Ouais, je ne m'en suis pas rendu compte jusqu'à ce que la réponse acceptée indique que je pouvais juste sudo ls.
strugee

Réponses:

12

Non, il n'y a aucun moyen d'accéder à cdun répertoire qui autorise uniquement root sans être root. Il ne devrait vraiment pas y avoir trop de répertoires ayant cette limitation. La plupart du temps, l'accès à un fichier donné est limité, tel que le /etc/shadowfichier ou des fichiers journaux spécifiques /var/log.

Vous pouvez utiliser sudo ls <dir>pour les voir au lieu de bash. De plus, lorsque vous utilisez sudopour devenir root, vous souhaitez généralement définir l'utilisateur ( sucommande) au lieu de bash, utilisez donc cette commande à la place:

$ sudo su -

Vous pouvez également accomplir la même chose avec un -icommutateur sudo :

$ sudo -i

extrait de la page de manuel concernant sudo -i

L'option -i (simuler la connexion initiale) exécute le shell spécifié dans l'entrée passwd (5) de l'utilisateur cible en tant que shell de connexion. Cela signifie que les fichiers de ressources spécifiques à la connexion tels que .profile ou .login seront lus par le shell. Si une commande est spécifiée, elle est transmise au shell pour exécution. Sinon, un shell interactif est exécuté.

Pour les fichiers auxquels vous ne pouvez pas accéder, vous pouvez utiliser l'une de ces sudocommandes:

$ sudo tail /var/log/messages

$ sudo less /etc/shadow
slm
la source
3
Pourquoi utiliseriez-vous sudo su -au lieu de sudo -i? Ils vous donnent tous les deux des privilèges de superutilisateur bien que tout ce dont vous avez besoin soit la capacité CAP_DAC_READ_SEARCH.
Stéphane Chazelas
@StephaneChazelas - Je n'avais jamais remarqué ce changement auparavant. Mon introduction initiale à sudotravers les environnements Solaris et la version de sudocelui-ci ne comprenait pas ce commutateur. En regardant à travers le changelog sudo, il semble que cette option ait été ajoutée en 2004. Je suppose que je sors avec moi, mais vous avez demandé 8-). Je vais modifier la réponse pour inclure les deux, merci!
slm
@ StéphaneChazelas je suis d'accord. Je préfère sudo -Hiparce qu'il définit également le répertoire personnel (il ne définit pas le répertoire par défaut sur ma distribution, la valeur par défaut peut varier). Si vous ne le faites pas, vous pouvez vous retrouver avec des fichiers appartenant à root dans votre maison, s'il crée de nouveaux fichiers là-bas.
doug65536
5

Non, il n'y en a pas. Vous avez besoin d'un shell fonctionnant en tant que root.

Ignacio Vazquez-Abrams
la source
Et, comme indiqué dans les commentaires, c'est assez inutile à cdmoins que vous exécutiez un shell ou un processus comparable.
tripleee
0

Bon, tu ne peux pas. Voici une solution de contournement cependant:

sudo sh -c "cd restricted-dir; some_command"
Tagar
la source