これはシナリオで最もよく説明できます。 「Test:OK」または「Test:Failed」と書くと、Apacheサーバー(httpdサービス)を再起動します。デフォルトでは、target_hostからrootとしてすべての操作を実行します。
scp user@source_host:/etc/httpd/conf.d/custom.conf /home
mv /home/custom.conf /etc/httpd/conf.d/
テスト失敗
scp user@source_host:/etc/httpd/conf.d/custom.conf /etc/httpd/conf.d/
テスト:OK
scp user@source_host:/etc/httpd/conf.d/custom.conf /
mv /custom.conf /etc/httpd/conf.d/
テスト:OK
以下を使用した場合の動作は同じです。
scp root@source_host...
テストが失敗した場合:
Iniciando httpd: httpd: Syntax error on line 221 of /etc/httpd/conf/httpd.conf: Could not open configuration file /etc/httpd/conf.d/custom.conf: Permission denied
イニチアンド(Iniciando)はスペイン語で「スタート」という意味だ。
conf.d内の権限は常に(ls -ln)です。
-r--r--r--. 1 0 0 311 Jun 18 14:19 custom.conf
scp は、Apache が読み込めないか読み取れないように、これらのファイルの内容を変更しますか?
答え1
はい、scp
権限を変更します。コピーすると、新しいファイルが作成され、その新しいファイルはそのファイルを作成したディレクトリのデフォルト権限で作成されます。
terdon@local$ ls -l aa
-rwx------ 1 root root 0 Jun 19 15:37 aa
terdon@local$ scp aa terdon@remote:/home/terdon/aa
terdon@remote$ ls -l aa
-rw-r--r-- 1 terdon terdon 587 2013-06-19 15:38 aa
これを望まない場合は、次の-p
フラグを使用します。
-p Preserves modification times, access times, and modes from the original file.
terdon@local$ scp -p aa terdon@remote:/home/terdon/aa
terdon@remote$ ls -l aa
-rwx------ 1 terdon terdon 587 2013-06-19 15:38 aa
別の考えられる問題は、ファイルユーザーが変更されたことです。必要な設定ファイルをコピーするには、root
必ずscp root@remote
。
答え2
SELinuxは、Apacheプロセスがユーザーのホームディレクトリコンテンツ(user_home_t)またはデータベースデータ(mysql_db_t)としてマークされたデータを読み取ることを防ぎます。
また、SELinuxがファイルに割り当てるラベルに違いがあることも学びました。で確認できますls -Z
。私:
-r--r--r--. root root unconfined_u:object_r:home_root_t:s0 custom.conf
-r--r--r--. root root unconfined_u:object_r:httpd_config_t:s0 custom_ok.conf
2番目のファイルを使用すると、Apacheが再起動されます。最初は失敗しました。実際、custon_ok.confをホームに移動したときに何も変わりませんでした。しかし、自宅でcpまたはcp -pを実行すると、新しいファイルにタグがあります。
unconfined_u:object_r:home_root_t:s0
これにより、Apacheは再び移動したときに/etc/httpd/conf.dを読み取ることができません。