Это PATH
переменная без sudo:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
Это PATH
переменная с sudo:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Насколько я могу судить, sudo
предполагается оставить PATH
нетронутым. В чем дело? Как мне это изменить? (Это на Ubuntu 8.04).
ОБНОВЛЕНИЕ: насколько я вижу, ни один из сценариев не запускался как изменение root PATH
никоим образом.
От man sudo
:
Чтобы предотвратить подделку команд, sudo проверяет ``. '' И `` '' (оба обозначают текущий каталог) последними при поиске команды в ПУТИ пользователя (если один или оба находятся в ПУТИ). Однако обратите внимание, что фактическая переменная среды PATH не изменяется и передается без изменений в программу, которая выполняется sudo.
path
environment-variables
sudo
Михель де Маре
источник
источник
Ответы:
Это
раздражающая функцияособенность sudo во многих дистрибутивах.Чтобы обойти эту «проблему» в Ubuntu, я делаю следующее в моем ~ / .bashrc
Обратите внимание, что вышесказанное будет работать для команд, которые сами не сбрасывают $ PATH. Однако `su 'сбрасывает это $ PATH, поэтому вы должны использовать -p, чтобы запретить. IE:
источник
В случае, если кто-то еще сталкивается с этим и хочет отключить изменение всех переменных пути для всех пользователей.
Доступ к файл sudoers, используя команду:
visudo
. Вы должны увидеть где-то следующую строку:который вы должны добавить следующее в следующей строке
Secure_path включен по умолчанию. Эта опция указывает, что делать $ PATH при sudoing. Восклицательный знак отключает эту функцию.
источник
Defaults env_keep = "PATH"
PATH
является переменной окружения, и поэтому по умолчанию сбрасывается с помощью sudo.Вам нужно специальные разрешения, чтобы иметь возможность сделать это.
Из
man sudo
Пример использования:
Обновить
Поэтому, возможно, потребуется проверить, что это / не скомпилировано в.
Это по умолчанию в Gentoo
источник
Похоже, эта ошибка существует уже довольно давно! Вот некоторые ссылки на ошибки, которые могут оказаться полезными (и вы можете подписаться на / голосовать, подсказка, подсказка ...):
Ошибка Debian # 85123 («sudo: SECURE_PATH все еще нельзя переопределить») (с 2001 года!)
Они упоминают что-то вроде этого в вашем файле sudoers:
но когда я делаю это в Ubuntu 8.10 по крайней мере, это дает мне эту ошибку:
Ошибка Ubuntu # 50797 («sudo, созданный с помощью --with-secure-path, проблематичен»)
Ubuntu bug # 192651 («путь sudo всегда сбрасывается»)
Ошибка Ubuntu # 226595 («невозможно сохранить / указать путь»)
источник
Казалось, это работает для меня
который берет на себя не судо
PATH
источник
Я думаю, что на самом деле желательно, чтобы sudo сбрасывал PATH: в противном случае злоумышленник, взломавший вашу учетную запись, мог бы поместить версии всех видов инструментов с резервным копированием в PATH ваших пользователей, и они будут выполняться при использовании sudo.
(конечно, сброс sudo в PATH не является полным решением проблем такого рода, но это помогает)
Это действительно то, что происходит, когда вы используете
в / etc / sudoers без использования
exempt_group
илиenv_keep
.Это также удобно, поскольку вы можете добавлять каталоги, которые полезны только для пользователя root (например,
/sbin
и/usr/sbin
), в путь sudo, не добавляя их в пути ваших пользователей. Чтобы указать путь, который будет использоваться sudo:источник
Работает сейчас, используя sudo из кармических репозиториев. Детали из моей конфигурации:
Замечательно, что наконец-то это решено без использования взлома.
источник
источник
Просто закомментируйте «значения по умолчанию env_reset» в / etc / sudoers
источник
Просто отредактируйте
env_keep
в/etc/sudoers
Это выглядит примерно так:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE"
Просто добавьте PATH в конце, чтобы после изменения это выглядело так:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE PATH"
Закройте терминал, а затем снова откройте.
источник
Secure_path - ваш друг, но если вы хотите освободить себя от secure_path, просто сделайте
И добавить
Если вы хотите освободить группу пользователей от создания группы, добавьте в нее всех пользователей и используйте ее в качестве группы exempt_group. человек 5 sudoers для большего.
источник
рекомендуемое решение в комментариях к дистрибутиву OpenSUSE предлагает изменить:
чтобы:
а затем предположительно закомментировать следующую строку, которая не нужна:
источник
закомментируйте оба "Default env_reset" и "Default secure_path ..." в файле / etc / sudores.
источник
Вы также можете переместить ваш файл в каталог sudoers:
источник
Э-э, это не совсем тест, если вы не добавили что-то на свой путь:
источник
PATH будет сброшен при использовании su или sudo по определению ENV_SUPATH и ENV_PATH, определенных в /etc/login.defs
источник
$ PATH - это переменная среды, и это означает, что значение $ PATH может отличаться для других пользователей.
Когда вы входите в свою систему, настройки вашего профиля определяют значение $ PATH .
Теперь давайте посмотрим: -
Предположим, что это значения $ PATH для другого пользователя. Теперь, когда вы выполняете любую команду с помощью sudo, в действительности пользователь root выполняет эту команду.
Вы можете подтвердить, выполнив эти команды на терминале: -
Это причина. Я думаю, это ясно для вас.
источник