ПУТЬ изменений Sudo, все же выполняет тот же двоичный файл

diff от GNU diffutils имеет опцию для рекурсивного, сравните:

diff -qrs /dir/A /dir/B

сравнивает каталоги: -q бесшумно (т.е. никакие различия печатаются, это только сообщает, что файлы отличаются), -r рекурсивно (завершают деревья со всеми подкаталогами), -s создание отчетов об идентичных файлах.

7
06.03.2014, 01:45
2 ответа

Вы запутались между ПУТЬ , который находится в реальной среде выполнения sudo , и ПУТЬ , который sudo устанавливает в среда программы, которую он запускает. Из руководства sudo :

Когда sudo запускает команду, она вызывает fork (2), настраивает среду выполнения, как описано выше, и вызывает системный вызов execve в дочернем процессе.

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

Часто secure_path устанавливается в / etc / sudoers :

secure_path

Путь, используемый для каждой команды, запускаемой из sudo. Если вы не доверяете людям, запускающим sudo, иметь разумную переменную среды PATH, возможно, вы захотите ее использовать. Другое использование - это если вы хотите, чтобы «корневой путь» был отделен от «пути пользователя». На пользователей в группе, указанной параметром exc_group, не влияет secure_path. Этот параметр не установлен по умолчанию.

Если это установлено, sudo будет искать команду в этом ПУТЬ и устанавливать ее в среде выполняемой команды. Он также будет отображаться в выводе sudo sudo -V со строкой вроде:

Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Однако в вашем случае это не установлено, поэтому sudo будет использовать PATH в своей собственной среде выполнения (которая в данном случае наследуется от родительской оболочки).Хотя он был настроен на игнорирование текущего каталога, если он был помещен в ПУТЬ :

Ignore '.' in $PATH

Поскольку env_reset равно в вашем / etc / sudoers ПУТЬ не входит в строку env_keep ), будет определена ПУТЬ , которую sudo устанавливает в вызываемой команде. PAM или / etc / environment и, таким образом, отличается от ПУТЬ sudo использует для поиска своего местоположения:

По умолчанию, опция env_reset включена. Это заставляет команды выполняться в новой минимальной среде. В AIX (и системах Linux без PAM) среда инициализируется содержимым файла / etc / environment. Новая среда содержит переменные TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME и SUDO_ * в дополнение к переменным из вызывающего процесса, разрешенным параметрами env_check и env_keep.

Чтобы запустить питон в ПУТЬ , установленном sudo , вы должны сделать что-то вроде этого:

sudo env python -V

Это не Сам sudo ищет команду, а env будет иметь среду, установленную sudo , а env будет искать команду там.

6
27.01.2020, 20:18


Ответ Грэма[11700] является довольно исчерпывающим, однако есть две вещи, которые должны быть сказаны явно, даже если они не являются ответом на ваш вопрос:

1 . Если вас беспокоит безопасность - какой она должна быть, когда вы используете (независимо от того, какие пользователи) - используйте [11701]secure_path[11702]. В противном случае вредоносный скрипт, помеченный как исполняемый практически в любом месте вашей системы, может вызвать хаос на (а не только) локальной машине. И скрипт не должен быть размещен непосредственно на вашей системе - сетевая файловая система, смонтированная без [11703]noexec[11704], тоже подойдёт.

  1. 2 . Если безопасность [11705]действительно[11706] вас беспокоит, не используйте
  2. вообще. Я не совсем уверен, кто придумал эту совершенно глупую (более откровенно отредактированную) идею использовать ее сначала по умолчанию, но она просто слишком вседозволенная и опасная - даже небольшая опечатка может испортить (не только) твой день. Укажите некоторые команды, требующие привилегий root (или используйте [11707]setcap[11708]) и разрешите доступ к ним. Очевидно, что ничего подобного shell (и [11709]su[11710] для тех, кто привык к [11711]sudo su[11712]) или любому другому интерпретатору (Python, Perl, Ruby - назовите его) не обсуждается. Кстати, C можно интерпретировать и [11713][11714]. Однако, настройка может быть немного сложнее, если вы используете плохо спроектированные программы.
  3. .
0
27.01.2020, 20:18

Теги

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