Запустите команду «cd» как суперпользователь в Linux

Запустите команду «cd» как суперпользователь в Linux

Есть ли способ запустить cdкоманду с привилегиями суперпользователя, чтобы получить доступ к каталогам, владельцем которых является root? Когда я запускаю sudo cd <path>, я получаю sudo: cd: command not found.

решение1

Другой ответ не является неправильным.

Возможно, лучшим ответом будет:

Инструмент sudo предназначен для выполнения действий от имени суперпользователя, а вы описываете нечто, что скорее является изменением состояния, которое будет предшествовать таким действиям, как «ls» или «vi» или другим, чтобы упростить их.

Я предлагаю, например, если вы хотите отредактировать файл в /root/private/:

sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>

Это определенно требует больше набора текста и немного сложнее, чем просто сменить каталог. Тем не менее, этодалекоболее поддается аудиту и гораздо больше соответствует принципам, лежащим в основе sudo, чем запуск какого-либо варианта «sudo bash».

Если вы работаете в безопасной среде, ваша команда IA будет вам благодарна. Если вы задаетесь вопросом: «Что я изменил на днях?», тотыбудут вам благодарны, потому что вам не придется гадать, какой файл или файлы вы отредактировали.

Все это говорит о том, что включение и выполнение некоторой формы 'sudo bash' определенно проще. Если вы искали более простого, почему вы используете 'sudo' в первую очередь, а не просто входите в систему как root?

решение2

Как вы заметили, cdэто встроенная команда оболочки, иесть причинадля этого: «текущий каталог» — это параметр процесса, который может быть изменен только самим процессомсам.

Рабочий каталог вашей оболочки не может быть изменен никаким дочерним процессом, поэтому даже если вам удастся запуститься cdв привилегированном подоболочке, изменится только рабочий каталог этой временной подоболочки, и не имеет значения, какой метод повышения привилегий вы используете.

Так что для sudo cdработы sudo сам по себе должен быть встроенной оболочкой, и ему нужен какой-то способ повысить привилегии уже запущенного процесса. В настоящее время такого механизма нет в Linux (как и в большинстве других операционных систем).


Один из способов достичь желаемого — запуститьинтерактивныйcdshell с правами root (подойдет любой метод) и просто используйте в нем обычную команду :

[user@host /]$ sudo bash
[root@host /]# cd /root/secret

Если вы хотите сделать все это одной командой, то она должна выглядеть так — сначала измените рабочий каталог, а затем запустите интерактивную оболочку:

sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"

Примечание: Внешняя команда не обязательно должна быть оболочкой, она просто должна бытьчто-нибудькоторый меняет свой рабочий каталог и выполняет новую команду. В последних системах Linux есть один или два помощника, которые можно использовать:

sudo nsenter --wd="/root/secret" bash       # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash        # coreutils v8.28 (debian buster)

Преимущество этого метода в том, что он не требует вложенных кавычек; вы можете выполнить команду из нескольких слов, не испытывая проблем с пробелами или специальными символами.

Наконец, некоторые программы имеют встроенную возможность изменить свой рабочий каталог:

sudo make -C /etc
sudo git -C /root/secret log

решение3

Самый быстрый способ сделать то, что мне было нужно, был следующим:

sudo -s

Как описано вэтот ответ.

Связанный контент