Эмпирическое правило, чтобы узнать, какие команды ломаются в sudo?

Последовательные цветовые схемы из проекта colorbrewer будут работать: https://github.com/aschn/gnuplot-colorbrewer

2
28.03.2017, 17:12
3 ответа

Только внешние команды могут выполняться sudo .

Sudo

Программа sudo разветвляет (запускает) новый процесс для запуска внешней команды с эффективными привилегиями суперпользователя (или другого пользователя, если параметр -u используется). Это означает, что нельзя указать команды, которые являются внутренними для оболочки; сюда входят ключевые слова, встроенные команды, псевдонимы и функции оболочки.

Лучший способ узнать, доступна ли команда как внешняя (а не внутренняя для оболочки) - это запустить type -a имя_команды , который отображает все места, содержащие указанный исполняемый файл.

Пример 1: Встроенная оболочка

В этом случае команда cd доступна только как встроенная оболочка:

$ type -a cd
cd is a shell builtin

Не удается запустить ее с помощью sudo :

$ sudo cd /
sudo: cd: command not found

Пример 2: Псевдоним

В этом случае команда ls является внешней, но в оболочке пользователя также был создан псевдоним с тем же именем.

$ type -a ls
ls is aliased to `ls -F --color'
ls is /bin/ls

Если бы я запустил sudo ls , это был бы не псевдоним, который запускается как суперпользователь; если бы мне нужна была опция -F , ее нужно было бы явно включить в качестве опции, то есть sudo ls -F .

Пример 3: Встроенная и внешняя команда оболочки

В этом случае команда pwd предоставляется как встроенная, так и внешняя команда оболочки:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

В этом случае внешняя ] / bin / pwd команда будет запускаться с sudo :

$ sudo pwd
/home/anthony

Другими примерами команд, которые часто предоставляются как встроенные, так и внешние команды оболочки, являются kill , тест ( [) и эхо .

Запускать внутренние команды оболочки с помощью sudo

Если вы действительно хотите запустить встроенную оболочку с привилегиями суперпользователя, вам придется запускать оболочку как внешнюю команду. Например, следующая команда запускает bash от имени суперпользователя со встроенной командой cd , предоставленной как параметр командной строки:

$ sudo bash -c "cd /; ls"
bin   etc   lib  media  mnt  ntp.peers  proc  sbin     share  sys
tmp  var boot  dev  home  lost+found  misc   net  opt … …

Примечание. Псевдонимы не могут быть переданы в качестве команд в Bash, используя его -c вариант.

Перенаправление оболочки

Еще одна проблема, на которую следует обратить внимание, заключается в том, что перенаправление оболочки происходит в контексте текущей оболочки. Если я попытаюсь запустить sudo / bin / echo abc> /test.file, это не сработает. Я получаю -bash: /test.file: Permission denied . Хотя команда echo выполняется с привилегиями суперпользователя, она выводит свой вывод в мою текущую (непривилегированную) оболочку, и, как обычный пользователь, у меня нет разрешения на запись в каталог / .

Одним из способов решения этой проблемы является использование sudo для запуска новой оболочки (аналогично приведенному выше примеру):

sudo bash -c "echo abc > /test.file"

В этом случае перенаправление вывода происходит в контексте привилегированного shell (у которого есть разрешение на запись в / ).

Другое решение - запустить команду tee от имени суперпользователя:

echo abc | sudo tee /test.file
6
27.01.2020, 21:59

ll не работает с sudo, потому что это псевдоним. Псевдонимы не работают с sudo, так как вы не получите интерактивную оболочку с sudo (если не попросите специально)

cd - это другой случай, так как не имеет смысла переходить в каталог, на который у вас нет прав с sudo.

Как и предполагалось, многие встроенные модули не будут работать с sudo, но другие работают, в частности kill. Вам нужно выполнить sudo kill , чтобы убить процесс, запущенный пользователем, отличным от вашего.

0
27.01.2020, 21:59

cd или ll — это не программа, а встроенная команда оболочки. Вы можете просмотреть все доступные встроенные команды, используя следующую команду.

compgen -b

sudo не будет работать со всеми этими командами.

0
27.01.2020, 21:59

Теги

Похожие вопросы