CentOS 8 에서 Nginx Permission Denied 문 제 를 해결 합 니 다.
최근 서버 를 되 돌 릴 때 는 CentOS 8 운영 체 제 를 선 택 했 는데, 설정 Nginx 를 설치 하 던 중 Permission Denied 문제 가 발생 했다.chown 과 chmod 에 따라 설정 이 완료 되 지 않 았 으 며, 나중에 SELinux 문 제 를 찾 았 습 니 다.
SELinux 가 뭐 예요?
When you upgrade a running system to Red Hat Enterprise Linux (RHEL) 6.6 or CentOS 6.6, the Security Enhanced Linux (SELinux) security permissions that apply to NGINX are relabelled to a much stricter posture. Although the permissions are adequate for the default configuration of NGINX, configuration for additional features can be blocked and you need to permit them explicitly in SELinux. This article describes the possible issues and recommended ways to resolve them.
Nginx 설치
다음 설정 에 따라 nginx 를 정상적으로 시작 하고 nginx 의 환영 페이지 에 접근 할 수 있 습 니 다.
#
sudo yum install -y nginx
#
systemctl start nginx.service
사용자 정의 설정
프로필 주소:
/etc/nginx/nginx.conf
사용자 정의 프로필 은 보통 conf. d 디 렉 터 리 에 놓 습 니 다.
$nginx_conf/conf.d/default.conf
사용자 정의 항목 설정 추가
server {
listen 8081;
server_name localhost;
access_log /var/log/nginx/access.log main;
location / {
root /home/custom/web; #
index index.html index.htm;
}
}
이 때 nginx 프로그램 을 다시 시작 하면 정상적으로 시작 할 수 없습니다.
systemctl start nginx
따라서 nginx 명령 으로 시작 하여 정상적으로 시작 되 었 으 나 페이지 에 접근 하 는 데 403 권한 문제 가 발생 했 습 니 다.
nginx # nginx
403 권한 문제 로그, 로그 정 보 를 볼 수 있 습 니 다.
2018/09/18 23:41:37 [error] 1266#1266: *1 "/home/custom/web/index.html" is forbidden (13: Permission denied), client: xxx.xxx.xxx.xxx, server: localhost, request: "GET / HTTP/1.1", xxx.xxx.xxx.xxx:8081"
인터넷 을 통 해 자 료 를 찾 으 면 루트 사용자 로 시작 하 는 것 이 해결 방법 입 니 다.nginx. conf 파일 을 수정 해 야 합 니 다.
# /etc/nginx/nginx.conf
#user nginx;
user root;
worker_processes 1;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
......
}
SELinux 에서 어떻게 설정 합 니까?
이렇게 루트 사용자 로 프로그램 을 시작 하면 생산 환경 에서 강력 히 건의 하지 않 고 매우 큰 안전 문제 가 존재 합 니 다.그래서 SELinux 가 열 리 면 어떻게 설정 하 는 지 계속 연구 해 야 합 니 다.
기본 창고 에서 nginx 는 정상적으로 작 동 할 수 있 습 니 다.파일 경로 정보 보기,
ll -Zd /usr/share/nginx/html/
# drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html/
그 중, systemu:object_r:httpd_sys_content_t: s0 은 현재 경로 의 보안 컨 텍스트 설정 입 니 다.chcon 명령 을 통 해 새 디 렉 터 리 주소 설정 을 설정 합 니 다.
chcon -Ru system_u /home/custom/web
chcon -Rt httpd_sys_content_t /home/custom/web
이 때 user 를 nginx 로 설정 하고 SELinux 를 닫 으 면 정상적으로 접근 할 수 있 습 니 다.
setenforce 0
systemctl start nginx
그러나 SELinux 를 열 때 다음 오류 로그 가 시 작 됩 니 다.
[root@localhost mgzy]# systemctl start nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
[root@localhost mgzy]# systemctl status nginx.service
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 2018-09-19 03:07:23 CST; 7s ago
Docs: http://nginx.org/en/docs/
Process: 12298 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)
9 19 03:07:23 localhost.localdomain systemd[1]: Starting nginx - high performance web server...
9 19 03:07:23 localhost.localdomain nginx[12298]: nginx: [emerg] open() "/etc/nginx/none" failed (13: Permission denied)
9 19 03:07:23 localhost.localdomain systemd[1]: nginx.service: control process exited, code=exited status=1
9 19 03:07:23 localhost.localdomain systemd[1]: Failed to start nginx - high performance web server.
9 19 03:07:23 localhost.localdomain systemd[1]: Unit nginx.service entered failed state.
9 19 03:07:23 localhost.localdomain systemd[1]: nginx.service failed.
로그 에서 / etc / nginx / none 파일 을 보고 어리둥절 하지만 Permission denied 설명 은 권한 문제 입 니 다.이 때 nginx 를 통 해 시작 하면 none 파일 을 만 들 수 있 습 니 다.이 때 다음 명령 을 실행 해 야 합 니 다.
# make the process type httpd_t permissive
semanage permissive -a httpd_t
이로써 SELinux 에서 nginx 를 설정 하면 정상적으로 작 동 할 수 있 습 니 다.
기타 설명
다음 명령 을 통 해 nginx 가 의존 하 는 안전 정 보 를 볼 수 있 습 니 다.
# grep nginx /var/log/audit/audit.log | audit2allow -m nginx
module nginx 1.0;
require {
type httpd_t;
type unreserved_port_t;
type httpd_config_t;
class tcp_socket name_bind;
class file { append create };
class dir { add_name write };
}
#============= httpd_t ==============
allow httpd_t httpd_config_t:dir { add_name write };
allow httpd_t httpd_config_t:file { append create };
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.