Sudo не может видеть исполняемые файлы с символьными связями в пути

565
StudentsTea

На CentOS 7 я установил несколько исполняемых файлов в /opt/app-version/bin/executable. Эти исполняемые файлы имеют следующие разрешения:

rwxrwxr-x. 500 500

Собственность каждого каталога в пути /opt/app-version/bin/является 500 500--except /opt, который root root.

Мой первый вопрос: что это за 500 500бизнес? Учитывая, что я установил исполняемые файлы с помощью sudo, не должен ли быть владелец и группа root?

Я запустил следующую команду от имени пользователя root для создания символических ссылок на исполняемые файлы в /usr/local/bin/:

ln /opt/app-version/bin/executable /usr/local/bin/executable --symbolic

Я могу работать executableиз командной строки как обычный пользователь, но не как обычный пользователь, использующий sudo.

Бег sudo executableвозвращается sh: executable: command not found.

Запуск sudo echo $PATHпоказывает, что /usr/local/bin/в $PATHсредах sudo. (Или так? Я вижу содержимое $PATHдля среды суперпользователя или $PATHдля среды вызывающего пользователя sudo? Создает ли CentOS новую среду для команд, выполняемых с помощью sudo, или он просто запускает команду в среде вызывающего? )

Запуск sudo ls -la /usr/local/bin/executableвозвращает листинг executableв /usr/local/bin/с правом собственности lrwxrwxrwx. 1 root root. ( ln --symbolicДействительно ли по умолчанию создаются глобально редактируемые ссылки? Разве это не ужасная идея?) Насколько я понимаю, эти шоу sudo должны иметь возможность работать executable.

Что мне не хватает?

0

1 ответ на вопрос

0
AFH

Looking first at the 500 500, if you restore from a tar archive (among others) the owner and group will be preserved from the system where the archive was created: I'm guessing that the installer does this, and if the restored user or group does not exist on your system the numeric value is displayed.

Looking now at the PATH, I have reproduced this on Ubuntu, and it seems that sudo modifies PATH: in your command sudo echo $PATH the PATH variable was expanded in the original shell before calling sudo. There is a file /etc/sudoers with an entry "defaults secure_path="...", and this seems to be what is used.

If you use sudo sh -c 'echo $PATH' you will get a better idea of the PATH being used. Note that I deliberately used sh instead of bash in order to bypass some of the initialisation files, which may change things, although sh will of course have some of its own.

On Ubuntu, the secure_path line does contain /user/local/bin, but CentOS may be different (both are derived from Debian, but according to man sudoers SELinux may override some entries). As far as I can see you have at least four options:-

  • Modify secure_path to include `/usr/local/bin'.
  • Put the link into one of the directories defined in secure_path.
  • Use su -c " " instead of sudo .
  • Use sudo -s to get a root bash with the same PATH initialisation as the original shell, then call your executable from there and exit afterwards.

I also found a lot of discussion and some other possible solutions here.

В StackExchange нет ни одной функции обмена личными сообщениями, о которой я знаю, поэтому - я просто опубликую ее здесь: прочитав ваш профиль пользователя прямо сейчас, я подумал, что такие люди, как вы, вероятно, не получают достаточно частых сообщений о том, сколько людей как я ценю столкновение с вами в профессиональном контексте. Снимаю шляпу перед вами за ваш опыт и поддержку! Если бы я был в Великобритании, а не в Лос-Анджелесе, первый тур был бы на мне. Салют! ( И спасибо ) StudentsTea 8 лет назад 0

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