Nginx가 자산을 읽고 제공하려면 내 애플리케이션 디렉터리 "assets"의 전체 경로에 대해 동일한 권한이 필요합니다.

Nginx가 자산을 읽고 제공하려면 내 애플리케이션 디렉터리 "assets"의 전체 경로에 대해 동일한 권한이 필요합니다.

내 폴더에 웹 애플리케이션이 있습니다.

  /home/main_user/dir1/dir2/my_web_app/

거기에는 실행 파일과 폴더 자산이 있습니다.

Nginx는 다음과 같이 설정됩니다. 자산만 제공합니다.

  location ~ ^/assets/(images|css|js| [.........])/(.*) {
    alias /home/main_user/dir1/dir2/my_web_app/assets/$1/$2;
    autoindex off;
  }

Nginx는 사용자 "http"로 실행됩니다.

nginx가 "assets" 폴더에서 권한 거부 오류를 받고 있는 것으로 나타났습니다. "assets" 디렉토리의 소유자를 "http"로 변경하고 755를 주더라도

오류를 수정하려면 "o+x" 권한을 부여해야 합니다.길을 따라루트 디렉터리에서 "assets" 폴더로 이동합니다."자산" 폴더뿐만 아니라

즉, 다음을 수행하려면 "o+x"를 호출해야 합니다.

   /home
   /home/main_user/
   /home/main_user/dir1/

등.....

적어도 모든 사람이 /home/main_user에 있는 모든 파일을 실행할 수 있기 때문에 이것은 나에게 잘못된 것 같습니다. 그러나 "assets" 디렉토리에 대해서만 이 작업을 수행하면 작동하지 않습니다.

더 좋거나 더 권장되는 방법이 있습니까?

답변1

디렉토리에 대한 권한의 경우 실행 비트는 실제로 "해당 디렉토리에 포함된 파일 및 디렉토리에 대한 액세스 허용"을 의미합니다(반면 읽기 비트는 디렉토리의 내용을 나열할 수 있음). 따라서 당신 말이 맞습니다. http 사용자는 최소한 x전체 디렉토리 체인에 대한 권한이 필요합니다.

즉, 모든 사용자에게 이 액세스 권한을 부여할 필요는 없습니다. ACL을 사용하면 http 사용자에게만 액세스를 허용할 수 있습니다. setfacl(1)자세한 내용은 을 참조하세요 . setfacl -m u:http:x /home시작하는 방법은 (및 기타 중간 디렉토리)를 참조하세요.

개별 사용자에게 액세스 권한을 부여하는 또 다른 방법은 파일 소유 그룹을 해당 파일에 액세스할 수 있는 모든 사용자만 포함하는 그룹으로 설정하고 이에 따라 그룹 권한을 설정하는 것입니다. 이 접근 방식의 한 가지 문제점은 일반적으로 많은 수의 그룹이 생성될 수 있다는 것입니다. 또 다른 이유는 이 접근 방식이 두 사람이 쓸 수 있고 일부 그룹이 읽을 수 있고 다른 그룹이 액세스할 수 없는 파일과 호환되지 않기 때문입니다. 이것이 우리가 ACL을 사용하는 이유입니다.

관련 정보