을 통해 아파치를 직접 시작할 수 httpd
있지만을 통해 시작할 수는 없습니다 systemctl start httpd
. 자동으로 시작할 수 있도록 데몬 메서드를 선호합니다.
누구든지이 문제가 발생합니까? 이것은 새로운 CentOS7 VM에 있습니다.
systemctl 시작 http
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
systemctl 상태 httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2018-03-20 17:20:54 EDT; 37s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 7025 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
Process: 7024 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 7024 (code=exited, status=1/FAILURE)
Mar 20 17:20:54 test.local.com systemd[1]: Starting The Apache HTTP Server...
Mar 20 17:20:54 test.local.com systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Mar 20 17:20:54 test.local.com kill[7025]: kill: cannot find process ""
Mar 20 17:20:54 test.local.com systemd[1]: httpd.service: control process exited, code=exited status=1
Mar 20 17:20:54 test.local.com systemd[1]: Failed to start The Apache HTTP Server.
Mar 20 17:20:54 test.local.com systemd[1]: Unit httpd.service entered failed state.
Mar 20 17:20:54 test.local.com systemd[1]: httpd.service failed.
journalctl -xe
/ etc / httpd / logs / error_log
기본 구성에 대한 유일한 변경 사항 :
/etc/httpd/conf/httpd.conf
IncludeOptional sites-enabled/*.conf
/etc/httpd/sites-enabled/local.com.conf
<VirtualHost *:80>
ServerName test.local.com
ServerAlias local.com
Redirect / https://local.com
</VirtualHost>
<VirtualHost _default_:443>
ServerName test.local.com
ServerAlias local.com
ServerAdmin [email protected]
DocumentRoot /var/www/local.com/public_html
ErrorLog /var/www/local.com/error.log
CustomLog /var/www/local.com/access.log common
SSLEngine On
SSLCertificateFile /etc/ssl/certs/www/local.com.crt
SSLCertificateKeyFile /etc/ssl/certs/www/local.com.key
</VirtualHost>
열린 포트만 :
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-dmc --reload
다음은 새로 설치 한 CentOS7에서 수행 한 정확한 전체 프로세스입니다.
Fresh CentOS 7 installation (VM)
yum upgrade -y
yum search http
yum install -y httpd httpd-devel mod_ssl openssl
systemctl start httpd
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
Browse to 192.168.1.241
Apache is live!
yum search mariadb
yum install -y mariadb-server
systemctl start mariadb
mysql_secure_installation
mysql -uroot -p
Login to mysql server works!
yum search php
yum install -y php php-cli php-dba php-devel php-fpm php-mysql php-process php-pspell php-xml
systemctl restart httpd
Browse to 192.168.1.241/info.php
PHP is live!
mkdir /etc/httpd/sites-enabled
echo "IncludeOptional sites-enabled/*.conf" >> /etc/httpd/conf/httpd.conf
/etc/httpd/sites-enabled/local.com.conf
<VirtualHost *:80>
ServerName test.local.com
ServerAlias local.com
Redirect permenent / https://local.com
</VirtualHost>
<VirtualHost _default_:443>
ServerName test.local.com
ServerAlias local.com
ServerAdmin [email protected]
DocumentRoot /var/www/local.com/public_html
ErrorLog /var/www/local.com/error.log
CustomLog /var/www/local.com/access.log combined
SSLEngine On
SSLCertificateFile /etc/ssl/certs/www/local.com.crt
SSLCertificateKeyFile /etc/ssl/certs/www/local.com.key
</VirtualHost>
mkdir -p /var/www/local.com/public_html
chown -R apache:apache /var/www/local.com/public_html
chmod -R 755 /var/www
cd /etc/ssl/certs/www
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout local.com.key -out local.com.crt
Browse to 192.168.1.241
Unsecure service (self signed ssl) accept
Site is live!
I was redirected to https://local.com
NOTE: I added the following to my desktop's (separate PC) /etc/hosts
192.168.1.241 test.local.com local.com
This acts as a DNS record for my site
yum install -y epel-release
yum install -y phpmyadmin
edit /etc/httpd/conf.d/phpMyAdmin.conf
Add under any line with Require ip 127.0.0.1 with
Require ip 192.168.1.5
Add under any line with Allow from 127.0.0.1 with
Allow from 192.168.1.5
systemctl restart httpd # FAILS
kill pid for httpd
httpd # start httpd directly
Access https://local.com/phpMyAdmin
Now have access to phpMyAdmin
Login with root, 12345
And have mariadb access!
yum install -y awstats
edit /etc/httpd/conf.d/awstats.conf
Change Require ip and Allow ip same as phpMyAdmin
cp /etc/awstats/awstats.localhost.localdomain.conf /etc/awstats/awstats.local.com.conf
edit /etc/awstats/awstats.local.com.conf
LogFile="/var/log/httpd/access.log"
SiteDomain="www.local.com"
HostAliases="local.com 127.0.0.1"
echo "*/30 * * * * root /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=www.local.com -update" >> /etc/crontab
kill httpd pid
httpd
Browse to https://local.com/awstats/awstats.pl?config=local.com
Awstats is live!
SELinux에 문제가 있습니다.
CentOS 7 /var/www
은 보안상의 이유로 httpd가에서 파일에 쓰지 못하도록하는 규칙을 제공 합니다.
VirtualHost에 대한 로그 파일을 해당 디렉토리 아래로 이동하도록 구성하고 있습니다.
ErrorLog /var/www/local.com/error.log
CustomLog /var/www/local.com/access.log combined
따라서 httpd (systemd에 의해 시작됨)가 이러한 로그 파일에 쓰려고하면 SELinux가이를 방지하여 오류 종료 코드와 함께 httpd 종료를 만듭니다.
ausearch
감사 로그 (아래에 저장 됨 /var/log/audit/audit.log
)의 항목을 확인 하는 명령 을 사용하여 확인할 수 있습니다 .
$ sudo ausearch -m avc
type=AVC msg=audit(1234567890.123:234): avc: denied { write } for pid=12345 comm="httpd" name="local.com" dev="sda1" ino=12345678 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=dir
이 메시지에서 쓰기 대상이로 태그되어 있음을 알 수 httpd_sys_content_t
있습니다. ls -Z
로그 파일에서 사용 하는 경우 다음 과 같이 태그가 지정되었음을 알 수 있습니다.
$ ls -Z /var/www/local.com/
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 access.log
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 error.log
drwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 public_html
이것이 httpd를 직접 실행할 때가 아니라 systemd에 의해 시작된대로 httpd에만 영향을 미치는 이유는 SSH 세션이 "제한되지 않은"도메인에서 실행되므로 httpd를 실행해도 SELinux 전환이 트리거되지 않기 때문입니다. systemd를 통해 시작할 때 데몬을 시작할 때 올바른 SELinux 권한을 적용합니다.
chcon
명령을 사용하여 해당 파일의 SELinux "유형"을 변경 하여 일시적으로이 문제를 해결할 수 있습니다.
$ sudo chcon -t httpd_log_t /var/www/local.com/*.log
$ ls -Z /var/www/local.com/
-rw-r--r--. root root unconfined_u:object_r:httpd_log_t:s0 access.log
-rw-r--r--. root root unconfined_u:object_r:httpd_log_t:s0 error.log
drwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 public_html
이 시점에서 systemctl을 통해 httpd를 시작하면 정상적으로 작동합니다.
그러나 이는 훌륭한 솔루션이 아닙니다. 이러한 파일이 다시 생성되거나 (예 : 로그 회전 중) 파일 시스템에 레이블이 다시 지정되면 SELinux 유형이 손실되기 때문입니다.
이 유형을 더 영구적으로 만드는 방법 (예 : semanage fcontext
명령)이 있지만이 SELinux 정책이 여기서 구현하려는 것은 실수로 로그 파일을 제공하거나 웹 콘텐츠를 덮어 쓰는 것을 방지하기 위해 웹 콘텐츠와 로그가 섞이는 것을 방지하는 것입니다. .
정답은 /var/log/httpd
해당 디렉터리의 하위 디렉터리 또는 하위 디렉터리에 로그 파일을 만드는 것입니다 . 그렇게하면 SELinux 유형이 처음부터 정확하고 SELinux 레이블 재 지정을 포함한 모든 작업에서 올바르게 유지되며 모든 것이 예상대로 작동합니다.
따라서 /var/log/httpd
대신 로그를 가질 수 있다면 이 문제를 해결할 것입니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다