centosの下でphpweb環境が遭遇した穴を構築する
6821 ワード
以下の知識点はすべてネット上で多くのネットユーザーを検索するために無私に分かち合うことができて、ここでただいっしょに感謝します.また、私に権利侵害を訴えないでください.
一、phpweb環境の構築
インストールする前に、コマンドを使用してサービスがインストールされているかどうかを確認できます.
rpm -q ***
1、apacheをインストールする:
yum install httpd httpd-devel
開始apache:
/etc/init.d/http startまたはservice httpd start
この時サーバーのIPアドレスを入力して、apacheのサービスのページを見るべきで、ポートは負けないで、apacheのデフォルトは80ポートを使います
2、mysqlをインストールする:
yum install mysql mysql-server
mysqlを起動するには:
/etc/init.d/mysqld startまたはservicemysqld start
mysqlをインストールした後、初めてrootにログインしてパスワードがなく、コマンド方式でパスワードを設定することができます:
shell> mysqladmin -u root -h host_name password "newpwd"
-h host_nameは記入しません.
passwordの後ろの二重引用符は必須ではありませんが、パスワードにスペースや特殊な記号が含まれている場合は引用符が必要です.
3、phpをインストールする
yum install php php-devel
apacheを再起動してphpを有効にします.
/etc/init.d/httpd restart
ディレクトリ:/var/www/html/の下にPHPファイルを作成できます.
コード:
phpの拡張子をインストールするには:
拡張子のインストールが完了したらapacheを再起動する必要があります
/etc/init.d/httpd restart
4、vsftpdのインストール(flashFXPツールの使用を推奨)
a、yum install vsftpd
b、vsftpdサービスを起動する:
service vsftpd start
c、vsftpdメインプロファイルの変更
ファイルパス:/etc/vsftpd/vsftpd.conf
コメントを削除し、値をNOに変更し、匿名ログインは許可されません
コメントを削除
コメントを削除します.ここではchrootを使用していません.list_Enableは、コマンドを直接使用して追加したftpユーザーです.
最後に、改行コードを追加するのは、その後のピットを抜けるためです.後で説明します.
d、ftpユーザーを作成する:
useradd -s/sbin/nologin -d/var/www/html test
testこのユーザーはftpに接続するしかシステムにログインできません.デフォルトのホームディレクトリはvar/www/htmlフォルダの下にあります.
パスワードの設定:
passwd test
ディレクトリ権限の設定:
chmod —R 777/var/www/html
e、selinuxプロファイルの変更
ファイルのパス:
/etc/selinux/config
コメントをキャンセルし、値をdisabledに設定します.
selinuを変更した後、サービスを再起動する必要があります.サーバーが一時的に再起動できない場合は、以下のコマンドを実行し、一時的にselinuxのポリシーを変更し、再起動する必要はありません.
setenforce 0
f、vsftpdサービスを再起動し、次の自動起動
service vsftpd restart
chkconfig vsftpd on
g、それからソフトウェアでftpをリンクしてテストすればいい
5、iptables
centos 7の場合、使用するファイアウォールはfirewalldですが、iptablesの使用に慣れているのでfirewalldを閉じてiptablesをインストールします
a、iptables iptables-serviceのインストール
まずiptables service iptables statusがインストールされているかどうかを確認します
iptables yum install-y iptablesのインストール
iptablesのアップグレード(インストールの最新バージョンは不要)yum update iptables
iptables-services yum install iptables-servicesのインストール
b、持参したfirewalldサービスを無効/停止する
firewalldサービスsystemctl stop firewalldの停止
firewalldサービスsystemctl mask firewalldの無効化
c、ルールの追加
プロファイルパス:/etc/sysconfig/iptables
赤枠内ルールを追加します.基本的にはhttpd、mysqld、vsftpdのポートです.
二、出会った問題
1、httpd
a、
問題の説明:
httpd: Could not reliably determine the server's fully qualified domain name
解決策:
httpが見つかりました.confプロファイル
経路:/etc/http/conf/http.conf
次のコードを追加します.
httpを再起動すればいいです.
2、mysqld
a、
問題の説明:
データ接続ツール(navicatを使用)を使用してsqlファイルを実行すると、「MySQL server has gone away」というプロンプトが表示されます.
解決方法:
このような原因は、一般的にsql操作の時間が長すぎるか、転送されたデータが大きすぎる(例えばinsert...valuesを使用する文が長すぎる場合、max_allowed_packedの構成パラメータを変更することによって回避したり、プログラムでデータをバッチで挿入したりすることができます).
ネット上には多くの原因の分析があります.ここでは一つ一つ列挙しません.私の状況は挿入文が長すぎることです.
Your SQL statement was too large.
クエリの結果セットがmax_を超えるとallowed_packetでもこのようなエラーが発生します.位置決め方法は、関連するエラーを出す文です.
select*into outfileでファイルにエクスポートし、ファイルサイズがmax_を超えているかどうかを確認します.allowed_packet、超えた場合はパラメータを調整するか、文を最適化する必要があります.
mysql> show global variables like 'max_allowed_packet'; +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet|1048576|+----------------------------+---+1 row in set(0.00 sec)修正パラメータ:
mysql> set global max_allowed_packet=1024*1024*16; mysql> show global variables like 'max_allowed_packet'; +--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 16777216 | +--------------------+----------+ 1 row in set (0.00 sec)
変更後、sqlスクリプトは正常に実行されました.
b、
問題の説明:
Navicatソフトウェア接続データベースエラー:2003-can't connect to MYSQL serve
解決方法:
次のコマンドを実行します.
GRANT ALL PRIVILEGES ON *.* TO 'itoffice'@'%' IDENTIFIED BY 'itoffice' WITH GRANT OPTION; (最初のitofficeはユーザー名を表し、%はすべてのパソコンが接続できることを示し、あるipアドレスを設定して接続を実行することもでき、2番目のitofficeはパスワードを表す)
次のコマンドを実行します.
flush privileges
mysqlを再起動します.
3、php
a、
問題の説明:
Call to undefined function mb_substr()
解決方法:
この場合、php接続mysqlを含め、対応するphp拡張子が開かれていないため、拡張子を開く必要があります.
サーバに関連するsoファイルがある、これらのsoファイルが属するディレクトリをphpに直接追加することができる.iniプロファイルにあります.
本機のphp.iniファイルパス:/etc/php.ini
vi後、/extension_dirコマンドが存在する場所を検索し、次のパラメータを追加します.
このディレクトリの下にはsoファイルがいくつかあります
保存後、httpdを再起動すると、問題が解決します.
b、
問題の説明:
解決方法:
次のコマンドを実行します.
chmod -R 777/var/www/html
問題はすぐ解決できる
4、iptables
5、vsftpd
a、
問題の説明:
接続のエラーメッセージ:ステータス:接続が確立され、ウェルカムメッセージが待機しています...戻り:220(vsFTPd 2.0.1)コマンド:USER xiaozhuren_user:331 Please specify the password.コマンド:PASS**********戻り:230 Login successful.コマンド:SYST戻り:215 UNIX Type:L 8コマンド:FEAT戻り:211-Features:戻り:EPRT戻り:EPSV戻り:MDTM戻り:PASV戻り:REST STREAM戻り:SIZE戻り:TVFS戻り:211 End状態:接続済み状態:ディレクトリリストの読み取り...コマンド:PWD戻り:257"/home/xiaozhuren_user"コマンド:TYPE I戻り:200 Switching to Binary mode.コマンド:PASV返却:227 Entering Passive Mode(60,29225,54125229)コマンド:LISTエラー:接続タイムアウトエラー:ディレクトリリストの読み取りに失敗しましたコマンド:PASVデフォルトはpasvモードです.サービス側ファイアウォールの設定のため、クライアントはpasvモードを使用できません.設定中のpasvモードを空にします.正常に戻ります:227 Entering Passive Mode(58,X,X,X,0,1)ftpサービスソフトウェアに指定されたポートアドレス範囲を設定し、60000-60020などのPassive Modeの使用を許可します.
解決策:転送設定中:転送モードを変更する:アクティブ転送
b、
問題の説明:
正常に接続できますが、ファイルをアップロードすると、常に553 Could not create fileエラーメッセージが表示されます.
解決方法:
まず/var/wwwのディレクトリにディレクトリを作成し(ある場合は作成せず、一般的にhtmlディレクトリになる)、777$sudo mkdir/var/www/html$sudo chmod-R 777/var/www/htmlの権限を設定します.
その後、vsftpのプロファイル/etc/vsftpdを変更する.confファイルは最後にlocal_を追加しますroot=/var/www
保存して、vsftpdプロセスを殺し(このステップは必要ないかもしれませんが、再起動が失敗したらkill vsftpdプロセスを再起動します)、vsftpdサーバプログラムを再起動します.試してみて、htmlディレクトリにファイルをアップロードして、この時正常にファイルをアップロードすることができます.
また、システムに従ってプログラムを起動する場合は、次のコマンドを使用します.
chkconfig XXX onでOK
これらを一時的に記録し、問題が発生した場合は補充を続けます.
一、phpweb環境の構築
インストールする前に、コマンドを使用してサービスがインストールされているかどうかを確認できます.
rpm -q ***
1、apacheをインストールする:
yum install httpd httpd-devel
開始apache:
/etc/init.d/http startまたはservice httpd start
この時サーバーのIPアドレスを入力して、apacheのサービスのページを見るべきで、ポートは負けないで、apacheのデフォルトは80ポートを使います
2、mysqlをインストールする:
yum install mysql mysql-server
mysqlを起動するには:
/etc/init.d/mysqld startまたはservicemysqld start
mysqlをインストールした後、初めてrootにログインしてパスワードがなく、コマンド方式でパスワードを設定することができます:
shell> mysqladmin -u root -h host_name password "newpwd"
-h host_nameは記入しません.
passwordの後ろの二重引用符は必須ではありませんが、パスワードにスペースや特殊な記号が含まれている場合は引用符が必要です.
3、phpをインストールする
yum install php php-devel
apacheを再起動してphpを有効にします.
/etc/init.d/httpd restart
ディレクトリ:/var/www/html/の下にPHPファイルを作成できます.
コード:
そしてこのファイルにアクセスすると、PHPのいくつかの情報が表示されます.php.iniプロファイルのパスはこのページでご覧いただけますphpの拡張子をインストールするには:
yum
install
php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
拡張子のインストールが完了したらapacheを再起動する必要があります
/etc/init.d/httpd restart
4、vsftpdのインストール(flashFXPツールの使用を推奨)
a、yum install vsftpd
b、vsftpdサービスを起動する:
service vsftpd start
c、vsftpdメインプロファイルの変更
ファイルパス:/etc/vsftpd/vsftpd.conf
コメントを削除し、値をNOに変更し、匿名ログインは許可されません
コメントを削除
コメントを削除します.ここではchrootを使用していません.list_Enableは、コマンドを直接使用して追加したftpユーザーです.
最後に、改行コードを追加するのは、その後のピットを抜けるためです.後で説明します.
d、ftpユーザーを作成する:
useradd -s/sbin/nologin -d/var/www/html test
testこのユーザーはftpに接続するしかシステムにログインできません.デフォルトのホームディレクトリはvar/www/htmlフォルダの下にあります.
パスワードの設定:
passwd test
ディレクトリ権限の設定:
chmod —R 777/var/www/html
e、selinuxプロファイルの変更
ファイルのパス:
/etc/selinux/config
コメントをキャンセルし、値をdisabledに設定します.
selinuを変更した後、サービスを再起動する必要があります.サーバーが一時的に再起動できない場合は、以下のコマンドを実行し、一時的にselinuxのポリシーを変更し、再起動する必要はありません.
setenforce 0
f、vsftpdサービスを再起動し、次の自動起動
service vsftpd restart
chkconfig vsftpd on
g、それからソフトウェアでftpをリンクしてテストすればいい
5、iptables
centos 7の場合、使用するファイアウォールはfirewalldですが、iptablesの使用に慣れているのでfirewalldを閉じてiptablesをインストールします
a、iptables iptables-serviceのインストール
まずiptables service iptables statusがインストールされているかどうかを確認します
iptables yum install-y iptablesのインストール
iptablesのアップグレード(インストールの最新バージョンは不要)yum update iptables
iptables-services yum install iptables-servicesのインストール
b、持参したfirewalldサービスを無効/停止する
firewalldサービスsystemctl stop firewalldの停止
firewalldサービスsystemctl mask firewalldの無効化
c、ルールの追加
プロファイルパス:/etc/sysconfig/iptables
赤枠内ルールを追加します.基本的にはhttpd、mysqld、vsftpdのポートです.
二、出会った問題
1、httpd
a、
問題の説明:
httpd: Could not reliably determine the server's fully qualified domain name
解決策:
httpが見つかりました.confプロファイル
経路:/etc/http/conf/http.conf
次のコードを追加します.
httpを再起動すればいいです.
2、mysqld
a、
問題の説明:
データ接続ツール(navicatを使用)を使用してsqlファイルを実行すると、「MySQL server has gone away」というプロンプトが表示されます.
解決方法:
このような原因は、一般的にsql操作の時間が長すぎるか、転送されたデータが大きすぎる(例えばinsert...valuesを使用する文が長すぎる場合、max_allowed_packedの構成パラメータを変更することによって回避したり、プログラムでデータをバッチで挿入したりすることができます).
ネット上には多くの原因の分析があります.ここでは一つ一つ列挙しません.私の状況は挿入文が長すぎることです.
Your SQL statement was too large.
クエリの結果セットがmax_を超えるとallowed_packetでもこのようなエラーが発生します.位置決め方法は、関連するエラーを出す文です.
select*into outfileでファイルにエクスポートし、ファイルサイズがmax_を超えているかどうかを確認します.allowed_packet、超えた場合はパラメータを調整するか、文を最適化する必要があります.
mysql> show global variables like 'max_allowed_packet'; +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet|1048576|+----------------------------+---+1 row in set(0.00 sec)修正パラメータ:
mysql> set global max_allowed_packet=1024*1024*16; mysql> show global variables like 'max_allowed_packet'; +--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 16777216 | +--------------------+----------+ 1 row in set (0.00 sec)
変更後、sqlスクリプトは正常に実行されました.
b、
問題の説明:
Navicatソフトウェア接続データベースエラー:2003-can't connect to MYSQL serve
解決方法:
次のコマンドを実行します.
GRANT ALL PRIVILEGES ON *.* TO 'itoffice'@'%' IDENTIFIED BY 'itoffice' WITH GRANT OPTION; (最初のitofficeはユーザー名を表し、%はすべてのパソコンが接続できることを示し、あるipアドレスを設定して接続を実行することもでき、2番目のitofficeはパスワードを表す)
次のコマンドを実行します.
flush privileges
mysqlを再起動します.
3、php
a、
問題の説明:
Call to undefined function mb_substr()
解決方法:
この場合、php接続mysqlを含め、対応するphp拡張子が開かれていないため、拡張子を開く必要があります.
サーバに関連するsoファイルがある、これらのsoファイルが属するディレクトリをphpに直接追加することができる.iniプロファイルにあります.
本機のphp.iniファイルパス:/etc/php.ini
vi後、/extension_dirコマンドが存在する場所を検索し、次のパラメータを追加します.
このディレクトリの下にはsoファイルがいくつかあります
保存後、httpdを再起動すると、問題が解決します.
b、
問題の説明:
解決方法:
次のコマンドを実行します.
chmod -R 777/var/www/html
問題はすぐ解決できる
4、iptables
5、vsftpd
a、
問題の説明:
接続のエラーメッセージ:ステータス:接続が確立され、ウェルカムメッセージが待機しています...戻り:220(vsFTPd 2.0.1)コマンド:USER xiaozhuren_user:331 Please specify the password.コマンド:PASS**********戻り:230 Login successful.コマンド:SYST戻り:215 UNIX Type:L 8コマンド:FEAT戻り:211-Features:戻り:EPRT戻り:EPSV戻り:MDTM戻り:PASV戻り:REST STREAM戻り:SIZE戻り:TVFS戻り:211 End状態:接続済み状態:ディレクトリリストの読み取り...コマンド:PWD戻り:257"/home/xiaozhuren_user"コマンド:TYPE I戻り:200 Switching to Binary mode.コマンド:PASV返却:227 Entering Passive Mode(60,29225,54125229)コマンド:LISTエラー:接続タイムアウトエラー:ディレクトリリストの読み取りに失敗しましたコマンド:PASVデフォルトはpasvモードです.サービス側ファイアウォールの設定のため、クライアントはpasvモードを使用できません.設定中のpasvモードを空にします.正常に戻ります:227 Entering Passive Mode(58,X,X,X,0,1)ftpサービスソフトウェアに指定されたポートアドレス範囲を設定し、60000-60020などのPassive Modeの使用を許可します.
解決策:転送設定中:転送モードを変更する:アクティブ転送
b、
問題の説明:
正常に接続できますが、ファイルをアップロードすると、常に553 Could not create fileエラーメッセージが表示されます.
解決方法:
まず/var/wwwのディレクトリにディレクトリを作成し(ある場合は作成せず、一般的にhtmlディレクトリになる)、777$sudo mkdir/var/www/html$sudo chmod-R 777/var/www/htmlの権限を設定します.
その後、vsftpのプロファイル/etc/vsftpdを変更する.confファイルは最後にlocal_を追加しますroot=/var/www
保存して、vsftpdプロセスを殺し(このステップは必要ないかもしれませんが、再起動が失敗したらkill vsftpdプロセスを再起動します)、vsftpdサーバプログラムを再起動します.試してみて、htmlディレクトリにファイルをアップロードして、この時正常にファイルをアップロードすることができます.
また、システムに従ってプログラムを起動する場合は、次のコマンドを使用します.
chkconfig XXX onでOK
これらを一時的に記録し、問題が発生した場合は補充を続けます.