Когда я пытаюсь сделать это из командной строки, это работает, когда я ввожу правильный пароль.(В вашем случае правильный пароль - это пароль для учетной записи Tomcat; см. man sudo
.)
Поэтому я предлагаю вам проверить следующее:
- Попробуйте выполнить точныйтот же сценарий оболочки из командной строки.
- Убедитесь, что в командной строке указано правильное имя пользователя Tomcat, и вы вводите правильный пароль:
- Как отмечено mprev0 ,имя учетной записи Tomcat зависит от системы и может также зависеть от вашей версии Tomcat.
- При неправильном имени пользователя появляется другое сообщение об ошибке ... но YMMV.
- Убедитесь, что
ignore_local_sudoers
не действует в политике sudo
. - Убедитесь, что
requiretty
не действует в политике sudo
. - Проверьте, что
visiblepw
не действует в политике sudo
. - Убедитесь, что у пользователя Tomcat есть соответствующая запись в файле
sudoers
. - Если вы работаете в системе с SELinux в принудительном режиме, попробуйте временно отключить это (!)
См. man sudoers
для получения более подробной информации о политике sudo
.(Обратите внимание, что из документации неясно, как указанные три параметра политики взаимодействуют с параметром -S
.)
Я хотел бы отметить, что то, что вы делаете, не очень безопасно.Кто-то с доступом к оболочке может увидеть пароль в открытом виде, запустив ps -efl | grep echo
.(Если они запускают его точно в нужное время .....)
Вы можете защитить пароль, используя Process
, чтобы дать вам поток для записи пароля из Java, избегая echo
command.
Более важной проблемой является то, что разрешение пользователю Tomcat запускать команды sudo
подвергает вашу систему риску, если учетная запись Tomcat взломана или кому-то удастся подорвать ваш сервер Tomcat.Представьте, что может случиться, если хакер сможет обмануть Tomcat:
echo tomcat-passwd | sudo -S -u root rm -rf /