php79 / stack

PHP 5.3 ~ 8.4 + Nginx + Let's Encrypt + MariaDB + 앱 자동 설치
https://www.php79.com
MIT License
90 stars 32 forks source link

nginx 신규 설치시 user 가 nobody 에서 nginx 로 바뀜 #86

Closed ibin79 closed 2 years ago

ibin79 commented 3 years ago

오류

신규 설치후 index.html 만 추가해도, 권한 오류 발생

2021/08/30 18:59:14 [crit] 9360#9360: *48 stat() "/home/php79/master/public/" failed (13: Permission denied), client: 205.169.39.98, server: php79.kr, request: "GET / HTTP/1.1", host: "php79.kr"
2021/08/30 18:59:14 [crit] 9360#9360: *48 stat() "/home/php79/master/public/index.php" failed (13: Permission denied), client: 205.169.39.98, server: php79.kr, request: "GET / HTTP/1.1", host: "php79.kr"

원인

nginx 신규 설치시 user 가 nobody 에서 nginx 로 바뀜

# grep user /etc/nginx/nginx.conf
user nginx;

nginx/1.20.1

임시 해결

sed -i 's/^user nginx;/user nobody;/g' /etc/nginx/nginx.conf

TODO:

ibin79 commented 3 years ago

파일 업로드시 에러

2021/09/10 14:03:30 [crit] 30352#30352: *16 open() "/var/lib/nginx/tmp/client_body/0000000002" failed (13: Permission denied),

임시 스크립트 제작하여 대응

# ./nginx-to-nobody.sh 

php79 stack version 1.2.1

### Nginx 디렉토리의 소유자/그룹을 nginx 에서 nobody 로 변경합니다. ###

  - 약 2021년 8월 이후, nginx 를 신규소 설치한 경우, 이 스크립트를 실행해주시면 됩니다.
    참고) https://github.com/php79/stack/issues/86

변경할 디렉토리/파일:
/var/lib/nginx/tmp

위 디렉토리/파일의 소유자/그룹을 nobody 로 변경하시겠습니까? [n/Y] y
changed ownership of ‘/var/lib/nginx/tmp’ from nginx to nobody

소유자/그룹을 nobody 로 변경하였습니다.

TODO:

#!/usr/bin/env bash

# Copyright:: Copyright (c) 2016 Been Kyung-yoon (http://www.php79.com/)
# License:: The MIT License (MIT)

STACK_ROOT=$( cd "$( dirname "$0" )" && pwd )
source "${STACK_ROOT}/includes/function.inc.sh"

cd ${STACK_ROOT}

welcome_short

title "Nginx 디렉토리의 소유자/그룹을 nginx 에서 nobody 로 변경합니다."

outputInfo "  - 약 2021년 8월 이후, nginx 를 신규소 설치한 경우, 이 스크립트를 실행해주시면 됩니다.\n"
outputInfo "    참고) https://github.com/php79/stack/issues/86\n"
echo

DIRS="/var/lib/nginx"
FILES=$( find ${DIRS} -user nginx -o -group nginx )

if [ -z "${FILES}" ]; then
  outputInfo "변경 대상이 없으므로 중단합니다."
  echo
else
  outputComment "변경할 디렉토리/파일:\n"
  echo ${FILES}|xargs -n 1
  echo

  if [ "$INTERACTIVE" = "1" ]; then
    outputQuestion "위 디렉토리/파일의 소유자/그룹을 nobody 로 변경하시겠습니까? [n/Y]"
    read -p " " -r
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
       outputInfo "변경을 중단합니다."
       echo
       exit 1
    fi
  fi

  find ${FILES} -user nginx -exec chown -v nobody {} \;
  find ${FILES} -group nginx -exec chgrp -v nobody {} \;

  echo
  outputInfo "소유자/그룹을 nobody 로 변경하였습니다."
  echo
fi
ibin79 commented 3 years ago

nginx 업데이트시에도 변경되는 문제 확인되어,

nginx-to-nobody.sh 스크립트 추가 완료함.