テスト

テスト

私はDokuwiki用Apache2(httpd)サーバーを運営しています。 Dokuwikiはアップグレードやプラグインインストール機能を使用できません。問題はここにあります)。

ユーザーApacheネットワーク/インターネットにアクセスできません。

テスト

ルートとして、カールはうまく動作します。

root @alpha:~$ curl https://download.dokuwiki.org -L
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Download DokuWiki</title> ...

しかし、ユーザーapacheで同じことをしようとすると、

root @alpha:~$ sudo -H -u apache bash -c 'curl https://download.dokuwiki.org -L'
curl: (7) Failed to connect to 2a01:4f8:172:3483::2: Network is unreachable

あるいは、wgetをrootとして使用してください。

root @alpha:~$ wget https://download.dokuwiki.org
--2016-12-05 17:01:57--  https://download.dokuwiki.org/
Connecting to <proxy>:3128.... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

    [ <=>                    ] 25,350      --.-K/s   in 0.02s

2016-12-05 17:01:57 (1.40 MB/s) - ‘index.html’ saved [25350]

Apacheユーザーと比較:

root @alpha:~$ sudo -H -u apache bash -c 'wget https://download.dokuwiki.org'
--2016-12-05 17:02:26--  https://download.dokuwiki.org/
Resolving download.dokuwiki.org (download.dokuwiki.org)...    138.201.137.132, 2a01:4f8:172:3483::2
Connecting to download.dokuwiki.org (download.dokuwiki.org)|138.201.137.132|:443... failed: No route to host.
Connecting to download.dokuwiki.org (download.dokuwiki.org)|2a01:4f8:172:3483::2|:443... failed: Network is unreachable.

代理人

サーバーはプロキシの背後にあります。これはrootには知られているようですが、ユーザーのapacheには知られていないようです。

プロキシは/etc/profile.d/proxy.sh代理人プレースホルダーです):

MY_PROXY_URL="http://<proxy>:3128"

HTTP_PROXY=$MY_PROXY_URL
HTTPS_PROXY=$MY_PROXY_URL
FTP_PROXY=$MY_PROXY_URL
http_proxy=$MY_PROXY_URL
https_proxy=$MY_PROXY_URL
ftp_proxy=$MY_PROXY_URL

export HTTP_PROXY HTTPS_PROXY FTP_PROXY
export http_proxy https_proxy ftp_proxy

また、プロキシを設定しようとしました。/etc/設定ファイル(上記と同じコードを使用)サーバーを再起動しましたが、役に立ちませんでした。

ルートの場合は変数を設定します。 root @alpha:~$ echo $http_proxy http:// しかし、apache の場合は該当しません。 root @alpha:~$ sudo -H -u apache bash -c 'echo $http_proxy' /出力なし/ (del、テスト方法が間違っているからです)

/root/.bash_profile または /root/.bashrc には特別なものはありません。(重要ではない)

SELinux

SELinuxが原因のようです。 Dokuwikiで「Wiki Upgrade」を使用しようとすると、/var/log/audit/audit.logに2つの新しいエントリがあります。

type=AVC msg=audit(1481032251.392:768): avc:  denied  { name_connect } for  pid=1368 comm="httpd" dest=3128 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:squid_port_t:s0 tclass=tcp_socket
type=AVC msg=audit(1481032251.394:769): avc:  denied  { name_connect } for  pid=1368 comm="httpd" dest=3128 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:squid_port_t:s0 tclass=tcp_socket

ここで問題は何ですか? httpdサービスはポート3128に接続できませんか?

答え1

修正する

問題はSELinuxにあります。設定確認:

 getsebool -a | grep httpd_can_network_connect

私は持っています:

 httpd_can_network_connect --> off
 httpd_can_network_connect_cobbler --> off
 httpd_can_network_connect_db --> off

そして:

setsebool -P httpd_can_network_connect on

ネットワークアクセスを切り替えます。httpdプロセス存在する。 (インストールする必要がありました。strategycoreutils-pythonまず、rpm -qa | grep selinuxすでに持っていることを教えてください。 )

警告する!

SELinuxにまだ慣れていないため、この変更は副作用を引き起こす可能性があります。システムセキュリティを損なう

サイドノート

apacheユーザーでコマンドをテストする方法について混乱している(問題の削除されたコンテンツを参照)、ここで方法を紹介します。 apache ユーザーに対して新しいシェルを起動します。 :)

sudo -u apache /bin/bash

注:SELinuxが変更された後でもhttpdプロセスのみがネットワークにアクセスできるようにするので、カールはまだApacheユーザーに対して機能しません。

答え2

CentosはデフォルトでSElinuxを使用します。 ApacheのIDSルールを確認しましたか?

私の英語が母国語ではないので申し訳ありません。

関連情報