Centos7 http가 정상적으로 시작되지 않습니다. httpd는 작동하지만 systemctl은 httpd를 시작하지 않습니다.

드류

을 통해 아파치를 직접 시작할 수 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

Pastebin

/ etc / httpd / logs / error_log

Pastebin

기본 구성에 대한 유일한 변경 사항 :

/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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관