web-dev-qa-db-ja.com

Jenkinsエラーを回避するためのベストプラクティス:Sudo:ttyが存在せず、askpassプログラムが指定されていません

JenkinsからSudoコマンドを実行すると、次のエラーが発生します。

Sudo:ttyが存在せず、askpassプログラムが指定されていません

ユーザーjenkinsの実行を許可する/etc/sudoersファイルにNOPASSWDエントリを追加することでこれを解決できることを理解していますパスワードを必要としないコマンド。次のようなエントリを追加できます。

%jenkins ALL=(ALL)NOPASSWD:/home/vts_share/test/sudotest.sh

...しかし、これは次の問題につながります: sudoersファイルでフルパスを指定しないようにする方法

次のようなエントリを追加できます。

%jenkins ALL=NOPASSWD: ALL

...しかし、これはユーザーjenkinsがすべてのコマンドのパスワードプロンプトを回避できるようにします。これは少し安全ではないようです。ここに私の選択肢が何であるかを知りたいだけで、ベストプラクティスがある場合は検討する必要があります。

5
s g

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)do rootを持つためにjenkinsが必要な場合は、sudoers Cmndオプションを使用してSudo機能を制限することを検討してください。

3)使い捨てVMでjenkinsを実行します。誰かがそれを根付いた場合は、それを再構築し、セキュリティの選択肢を再評価してください。また、LANまたはVPN経由でのみアクセス可能なイントラネットサービスとしてjenkinsを実行することをお勧めします。認証を含めることを忘れないでください!

6
neoice

スクリプトの一部としてjenkinsユーザーとしてSudoを実行する場合、2つのものが必要です。

  1. コマンドの正確なコピー.//bin/chown www-data/var/wwwなど

  2. Sudo -n exactコマンド

-nは、NOPASSWDの場合、プロンプトを要求しないように指示します。

これは、ジェンキンスが呼び出すスクリプトでSudoを実行するために私を修正しました

5
art3mis