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


10

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

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

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


Почему вы хотите иметь 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

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"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.