AWS

aws EC2 활용 중 nginx 설정 및 권한 이슈

개발하는지호 2024. 5. 14. 06:59

EC2로 프론트 React를 배포하기 위해 Nginx를 사용하면서 권한 문제가 발생했다!!
 
 
권한 에러
"""
sudo tail -f /var/log/nginx/error.log 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [crit] 7582#7582: *2 stat() "/home/ubuntu/teammap-frontend-pipeline/index.html" failed (13: Permission denied), client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/" 2024/05/04 05:55:08 [error] 7582#7582: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 59.11.133.163, server: 3.12.107.101, request: "GET /favicon.ico HTTP/1.1", host: "3.12.107.101", referrer: "http://3.12.107.101/"
"""
 
이를 해결하기 위해

 sudo chmod 755 /home/ubuntu

 명령어를 작성해줬다.
 
이후, 
 

sudo -u www-data cat /home/ubuntu/teammap-frontend-pipeline/index.html

를 작성해줌으로써 www-data가 접근이 가능하게 해줬다.
 

<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <link rel="icon" type="image/png" href="/assets/icon-DfLVdc98.png" class="bg-indigo-800" />
  <link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Nanum+Myeongjo&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Do+Hyeon&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Song+Myung&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Gugi&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Hahmlet&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Gowun+Batang&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Orbit&display=swap" rel="stylesheet">

  <!-- 임시 -->
  <!-- <script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script> -->
  <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.5.1/chart.min.js"></script> -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />

  <script type="text/javascript" async defer
    src="//dapi.kakao.com/v2/maps/sdk.js?appkey=0ed864a6358904fb3dd1f67c07afc0ae&autoload=false&libraries=services"></script>
  <script src="https://cdn.jsdelivr.net/npm/three@0.126.1/build/three.min.js"></script>

  <title>우주해</title>

  <script type="module" crossorigin src="/assets/index-BrrWTV2P.js"></script>
  <link rel="stylesheet" crossorigin href="/assets/index-B2AM09Tq.css">
</head>

<body>
  <div id="root"></div>
</body>

</html>

 
이렇게 무사히 접근이 가능한 것을 볼 수 있고 Nginx 가 실행이 되면서 무사히 배포가 가능했다.
 
 

문제의 원인 

 
문제의 원인과 해결 과정을 종합적으로 이해하기 위해서는, 파일 시스템 권한, 운영 체제의 보안 정책, 그리고 웹 서버 설정이 어떻게 상호 작용하는지를 파악하는 것이 중요합니다. 여기서 발생한 문제는 주로 리눅스 파일 시스템의 권한 설정과 관련이 있었으며, 특히 웹 서버인 Nginx가 실행되는 사용자(www-data)의 파일 접근 권한이 중심이었습니다.
 

  1. 권한 설정: /home/ubuntu 디렉토리에 대한 접근 권한이 ubuntu 사용자에게만 제한적으로 부여되어 있었습니다 (drwxr-x---). 이 설정은 www-data 사용자가 이 디렉토리 아래에 위치한 index.html 파일을 포함한 모든 파일에 접근하는 것을 방해했습니다.
  2. 웹 서버 사용자: Nginx는 일반적으로 www-data 사용자 계정으로 실행됩니다. 웹 서버가 웹 콘텐츠를 제공하기 위해서는 해당 파일과 디렉토리에 접근 권한이 있어야 합니다.
  3. SELinux 및 AppArmor: 리눅스 배포판에 따라 SELinux나 AppArmor와 같은 추가 보안 정책이 파일 접근에 영향을 줄 수 있습니다. 이 경우, SELinux는 비활성화되어 있었으나, 이러한 보안 모듈이 활성화되어 있다면 문제의 원인이 될 수 있습니다.

해결 과정

  1. 권한 변경: /home/ubuntu 디렉토리의 권한을 755 (drwxr-xr-x)으로 변경하여, 모든 사용자가 디렉토리를 읽고 실행할 수 있게 했습니다. 이를 통해 www-data 사용자도 /home/ubuntu/teammap-frontend-pipeline/index.html 파일에 접근할 수 있게 되었습니다.
  2. 파일 접근 테스트: 권한 변경 후 www-data 사용자로 파일에 접근하는 것을 테스트하여 권한 설정이 올바르게 적용되었는지 확인했습니다.
  3. Nginx 재시작: 권한 변경을 완료한 후, Nginx를 재시작하여 모든 설정을 새로고침하고 적용했습니다.
  4. 브라우저에서의 테스트: 최종적으로 웹 브라우저를 통해 웹 사이트에 접속하여 변경사항이 제대로 반영되었는지 확인했습니다.

중요 포인트

  • 권한: 리눅스 시스템에서 파일과 디렉토리에 대한 권한은 사용자의 파일 접근성을 결정짓는 중요한 요소입니다. 웹 서버 설정 시, 웹 콘텐츠 파일에 대한 올바른 권한 부여는 필수적입니다.
  • 보안 정책: SELinux나 AppArmor 같은 보안 정책이 활성화된 경우, 이 정책이 웹 서버의 파일 접근을 제한할 수 있으므로, 이를 고려해야 합니다.
  • 디버깅: 권한 문제 해결 시, ls -l, ls -ld와 같은 명령어를 사용하여 권한을 확인하고, sudo -u www-data 명령을 사용하여 실제 웹 서버 사용자의 관점에서 파일 접근을 테스트하는 것이 유용합니다.

이러한 지식은 리눅스 기반 시스템에서 흔히 발생할 수 있는 유사한 문제를 해결하는 데 도움이 됩니다.