非rootユーザーとしてnginxを実行します


17

Ubuntu 10.04 Lucid Server http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucidに nginxをインストールするためにこのプロセスに従いました

inginスクリプトを作成してnginxを起動し、/ etc / init.d / nginx startを呼び出した後、迷子になりました。私がそれをしたとき、私は次のエラーを受け取りました:

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:17:27 [emerg] 859#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

私がそれを実行できる唯一の方法は、使用sudoしてプロセスをとして実行する場合でroot、これは望ましくありません。

私はしましchownD」ディレクトリ全体(chown -R nginx:nginx /opt/nginx)と私もしましたchmod -R 755だけでなく、ディレクトリを。

userCS3によって提案されたディレクティブを追加すると、このエラーが発生しますが、追加の行があります。

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:48:34 [warn] 1606#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /opt/nginx/conf/nginx.conf:2
2012/03/16 18:48:34 [emerg] 1606#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

何か案は?


and I've also chmod -R 755 the directory as wellこれをやり続けると、最終的に代価を支払うことになります。これが問題を「修正」する最初の寄港地であることを示唆しているインターネット上の人々の数を目撃するのは怖いです。あなたが何かモロニックなことをすると、Unixはフレンドリーなフィードバックをしません。

回答:


11

まず、initスクリプトが実行されることになっています。

sudo /etc/init.d/name

ルートとしてログインしていないとき(ログインしているユーザーがsudoを有効にしているとき)

次に、sudo /etc/init.d/nginx start ==>を実行すると、マスターnginxプロセスがrootとして起動され、ワー​​カープロセスがnginx.confユーザーディレクティブで指定したユーザーとして起動されます(例:www-data)

sudo /etc/init.d/nginx startを発行するときに、nginxの下のすべてのプロセスがrootによって実行されていることを確認できますか?

ps aux | grep [n]ginx

例えば。

ここに画像の説明を入力してください

提案:Ubuntu 10.04 LTSには、nginxチームによる優れたubuntuパッケージサポートがあります。では、nginx内にカスタムモジュールの要件がないのに、なぜソースからインストールするのが面倒なのでしょうか?

相談する

バイナリパッケージには、すでに必要なモジュールが既に付属しています

nginx version: nginx/1.0.12
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-upstream-fair

私が持っているワーカープロセスには、名前ではなくIDがあります。nginxユーザーIDの可能性はありますか?私はUbuntuを初めて使います。aptパッケージでこれらのフラグがすべてオンになっていることは知りませんでした。どうやってそれを見つけましたか?
ジョン

nginx.confで指定したユーザーが存在するかどうかを確認しましたか?公式リポジトリにはこのNginxはありません!指定されたURLからPPAを使用してください
kaji

8文字の制限より長い別のユーザー名を使用しました。それが、ユーザーIDが表示される理由です。
ジョン

ええ、それは1つのシナリオです
-kaji

1
nginx -Vはあなたの答えです
-kaji

1

nginx.conf内にユーザーディレクティブを追加します

リファレンス:http : //wiki.nginx.org/CoreModule#user


申し訳ありませんが、より具体的に教えていただけますか?私はすでにそれを無駄にしました。
ジョン

ポート1〜1024の間で何かを実行するには、root権限が必要です。ユーザーディレクティブは、セキュリティ上の理由から、nginxが非rootユーザーとして実行されるようにします。
シャムサンダーCS

また、ログを開いて書き込むには、nginxディレクトリを実行しようとしているユーザーにchown'dする必要があります。
シャムサンダーCS

1

これに関する私の5 kopek

nginx -V 2>&1 | sed 's/ --/\n--/g' | grep path

..は、他のすべてのパスを取得します。カスタムの提供された構成または「-g」オプションでオーバーライドする必要があります。


次のコマンドが示す出力からすべての行、及びハイライト用語「パス」を含むものは:nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards

0

私の場合、nginx.confにファイル参照がありませんでした。

error_log /var/log/nginx/error.log warn;

なった:error_log warn;

そのため、誤って/var/log/nginx/error.log参照を削除したため、アクセス許可が拒否されましたというエラーメッセージが表示されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.