При запуске любой команды sudo от Jenkins я получаю следующую ошибку:
sudo: нет tty и не указана программа askpass
Я понимаю, что могу решить эту проблему, добавив NOPASSWD
вход в мой /etc/sudoers
файл, который позволит пользователю Дженкинс для выполнения команд без пароля. Я могу добавить такую запись:
%jenkins ALL=(ALL)NOPASSWD:/home/vts_share/test/sudotest.sh
... но это приводит к следующей проблеме: как избежать указания полного пути в файле sudoers?
Я могу добавить такую запись:
%jenkins ALL=NOPASSWD: ALL
... но это позволяет пользователю Дженкинс чтобы не запрашивать пароль для всех команд, что кажется немного небезопасным. Мне просто интересно, какие у меня есть варианты, и если есть какие-то передовые методы, я должен рассмотреть.
Я считаю, что вы ищете этот вариант от man sudoers
requiretty If set, sudo will only run when the user is logged in to a real tty. When this flag
is set, sudo can only be run from a login session and not via other means such as
cron(8) or cgi-bin scripts. This flag is off by default.
вот мои рекомендации в порядке от наиболее безопасного до наименее безопасного:
1) вообще не позволяйте jenkins sudo. если вы делаете сборку пакетов, посмотрите fakeroot
. jenkins не нужен root для создания программного обеспечения.
2) если вы делать нужно, чтобы у jenkins был root, рассмотрите возможность ограничения возможностей sudo с помощью sudoers Cmnd
параметры.
3) запустить jenkins на одноразовой ВМ. если кто-то укоренит его, восстановите его и повторно оцените свой выбор безопасности. Я бы также рекомендовал запустить jenkins как службу интрасети, доступную только через LAN или VPN. не забудьте включить аутентификацию!
Если вы запускаете sudo как пользователь jenkins как часть скрипта, вам понадобятся две вещи.
точная копия команды .. например / bin / chown www-data / var / www
sudo -n точная команда
-n укажет ему не запрашивать приглашение, если это NOPASSWD.
это помогло мне запустить sudo в скрипте, который вызывает Дженкинс