Как я могу перейти в каталог от имени пользователя root?

10

Допустим, есть каталог, к которому у меня нет прав доступа. Очевидно sudo cd foo, не будет работать, потому что cdэто оболочка, встроенная в каждую оболочку.

До сих пор я только что использовал sudo bash(да, я знаю, что есть лучшие способы), чтобы получить приглашение root. Затем я могу cdв каталог, чтобы ковыряться.

Есть лучший способ сделать это?

strugee
источник
Почему вы хотите иметь cdправа root (если вы на самом деле не находитесь в корневой оболочке)?
tripleee
если каталог принадлежал пользователю root и глобальное выполнение не выполнялось
Strugee
1
Это не совсем правильный случай. Может быть полезно иметь возможность читать каталог, но для этого не требуется, чтобы каталог был вашим рабочим каталогом, т.е. вам это не нужно cd.
tripleee
да, я не осознавал этого, пока принятый ответ не указал, что я могу просто sudo ls.
Струджи

Ответы:

12

Нет, нет пути к cdкаталогу, который позволяет только root, не будучи root. На самом деле не должно быть слишком много каталогов, которые имеют это ограничение. В большинстве случаев доступ к определенному файлу ограничен, например, к /etc/shadowфайлу или определенным файлам журнала /var/log.

Вы можете использовать, sudo ls <dir>чтобы увидеть их вместо bash. Также при использовании sudoдля получения прав root вы обычно хотите установить пользователя ( suкоманду) вместо bash, поэтому используйте эту команду вместо:

$ sudo su -

Вы также можете сделать то же самое с помощью -iпереключателя sudo :

$ sudo -i

выдержка из справочной страницы о sudo -i

Опция -i (имитировать начальный вход в систему) запускает оболочку, указанную в записи passwd (5) целевого пользователя, в качестве оболочки входа в систему. Это означает, что специфичные для входа файлы ресурсов, такие как .profile или .login, будут читаться оболочкой. Если указана команда, она передается в оболочку для выполнения. В противном случае, интерактивная оболочка выполняется.

Для файлов, к которым у вас нет доступа, вы можете использовать одну из следующих sudoкоманд:

$ sudo tail /var/log/messages

$ sudo less /etc/shadow
SLM
источник
3
Почему бы вы использовали sudo su -вместо sudo -i? Они оба дают вам все привилегии суперпользователя, хотя все, что вам нужно, это возможность CAP_DAC_READ_SEARCH.
Стефан Шазелас
@StephaneChazelas - я никогда раньше не замечал этого переключателя. Мое первоначальное введение в sudoсреду Solaris и версия, в sudoкоторой он был, не включали этот переключатель. Просматривая журнал изменений sudo, похоже, что эта опция была добавлена ​​в 2004 году. Думаю, я с этим встречаюсь, но вы спросили 8-). Я исправлю ответ, чтобы включить оба, спасибо!
SLM
@ StéphaneChazelas Я согласен. Я предпочитаю, sudo -Hiпотому что он также устанавливает домашний каталог (в моем дистрибутиве он по умолчанию не устанавливается, по умолчанию он может отличаться). Если вы этого не сделаете, вы можете получить корневые файлы в вашем доме, если он создаст новые файлы там.
doug65536
5

Нет, нет Вам нужна оболочка от имени root.

Игнасио Васкес-Абрамс
источник
И, как отмечено в комментариях, это довольно бессмысленно, cdесли вы не используете оболочку или схожий процесс.
tripleee
0

Точно, ты не можешь. Вот обходной путь, хотя:

sudo sh -c "cd restricted-dir; some_command"
Tagar
источник