почему «sudo -u xxx cmd» не удается, но «sudo -u xxx / path / to / cmd» преуспевает?

Недавно мы обновили наш экземпляр сервера aws linux. Это еще SLES 12 SP1. Однако я замечаю некоторые отличия, некоторые из которых смешиваются

$ sudo -u xyz cmd ... <it asks for password, causing old scripts to break> $ sudo -u xyz /path/to/cmd ... <works> $ sudo --version Sudo version 1.8.10p3 Sudoers policy plugin version 1.8.10p3 Sudoers file grammar version 43 Sudoers I/O plugin version 1.8.10p3 $ uname -a Linux ovcp6hana1 3.12.69-60.64.32-default #1 SMP Wed Feb 15 08:57:04 UTC 2017 (76392c8) x86_64 x86_64 x86_64 GNU/Linux 

(Конфигурация sudoers имеет Cmnd_Alias ​​и авторизацию для «/ path / to / cmd»)

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

Есть ли способ заставить старую форму работать? Благодарю.

–РЕДАКТИРОВАТЬ

Я проверил, что это точно такая же команда, т. which xyz Какая which xyz расширяется до /path/to/xyz .

–EDIT 2

Я думаю, что нашел проблему, но у меня пока нет способа оставаться совместимым с моим приложением. Похоже, что разница между версиями версии 1.7.6 и 1.8.10. Но я не нашел такого упоминания в примечаниях к выпуску sudo

Я создал другого пользователя с аналогичными привилегиями на более старом сервере, на котором работает sudo 1.7. Конкретная привилегия приведена ниже. Конфигурационные файлы в двух совпадениях в параметрах

 #added in /etc/sudoers #userA ALL=(userABC) NOPASSWD: /bin/bash, /usr/local/bin/aws #with both sudo versions userA$ sudo -u userABC bash -c "echo \$PATH" /usr/bin:/bin:/usr/sbin:/sbin userA$ sudo -u userABC bash -c "which aws" /usr/bin/aws <<<< but this is not reached in either of the two cases userA$ which aws /usr/local/bin/aws <<<<<< this is the right binary #with sudo version 1.7.6 userA$ sudo -u userABC aws ..the right binary runs, so path must have been set between check and run #with sudo version 1.8.10 userA$ sudo -u userABC aws failure! sudo asks for password of userABC 

Программа /usr/bin/aws выполняет некоторую упаковку. До сих пор я был блаженно не осведомлен (!) О его существовании, но даже когда я на мгновение удалил эту программу, на что-то не повлияло.

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

Когда пользователю разрешено выполнять команду в качестве другого пользователя по правилу в файле sudoers который указывает полный путь к исполняемому файлу, то этот полный путь также должен использоваться в командной строке.

Это мера безопасности.

Кроме того, если команда в файле sudoers указана с флагами командной строки, эти флаги должны присутствовать при вызове команды через sudo .

Это происходит потому, что ваш файл sudoers позволяет NOPASSWD атрибут NOPASSWD при вызове явного пути к исполняемому файлу, но не тогда, когда вы полагаетесь на поиск путей; он может ударить по другому исполняемому файлу.