본문으로 바로가기







우분투 서버에서 파일 업로드 시 권한 문제 해결하기





우분투 서버에 배포된 웹 애플리케이션을 실행하여 파일 업로드를 할 때 java.io.FileNotFoundException 에러가 발생하는 경우가 있다. 에러 메시지의 맨 끝을 보면 permission denied 라고 되어있는데, 권한 문제로 인해 폴더에 접근이 거부된 것이다.


이럴 경우 업로드 폴더의 소유권과 권한을 변경하여 에러를 해결할 수 있다.



# 톰캣 계정 추가
[mgt@localserver: ~$sudo useradd tomcat 
 
# 톰캣 폴더(tomcat8)의 소유권을 tomcat으로 
[mgt@localserver: ~$sudo chown -­R tomcat:tomcat /usr/share/tomcat8




먼저 명령어를 실행하여 톰캣 계정을 만들고, /usr/share/tomcat8 폴더의 소유권을 tomcat로 변경한다.





다음으로 업로드될 폴더의 소유권을 변경할 것이다. 위에 표시된 board-upload 폴더가 각종 파일들이 업로드되는 폴더이다. drwxr-xr-x  4 뒤에 root root라고 되어있다. 이것은 board-upload 폴더의 소유자가 root 라는 것이다. 이 폴더의 소유자를 tomcat로 변경할 것이다.



# 업로드 폴더의 소유권을 톰캣으로 변경
[mgt@localserver: ~$sudo chown -­R tomcat:tomcat /파일업로드 경로
 
# -R은 하위 폴더까지 모두 소유자를 변경하기 위해 준 옵션이다.
ex)
[mgt@localserver: ~$sudo chown -­R tomcat:tomcat /var/board-upload






다시 폴더를 보면 소유자가 tomcat로 변경된 것을 알 수 있다. 그다음으로 할 일은 board-upload 폴더의 권한을 변경하는 것이다. 그전에 권한에 대해서 알아보자. 


위에서 빨간색 박스로 표시한 부분을 따로 보면 이렇다. 



drwxr-xr-x  4 tomcat tomcat   4096 Aug 14 21:18 board-upload
 
파일타입 권한(permission)정보 링크수 소유자 소유그룹 용량 생성날짜 파일(or 폴더)이름



  • 파일타입 : d - 디렉토리 , l - 링크파일 , - 는일반파일 등

  • 권한정보 : 해당 폴더(파일)에 부여된 권한

  • 링크수 : 해당 폴더(파일)의 링크 수 (링크 = 윈도우의 바로가기)

  • 소유자 : 해당 폴더의 소유자

  • 소유그룹 : 해당 폴더의 소유그룹

  • 용량 : 폴더의 용량

  • 생성날짜 : 폴더의 생성날짜

  • 폴더(파일)이름 : 폴더이름



맨 앞을 d를 제외한 부분을 보면 rwxr-xr-x 로 되어있는데, 이것은 각각 소유자, 그룹, 기타 사용자(소유자와 그룹을 제외한 사용자)의 권한을 나타낸 것이다. 그리고 r, w, x 라는 것은 접근 권한을 나타낸 것이다.


  • r : 읽기 허용

  • w : 쓰기 허용

  • x : 실행 허용



권한을 볼 때는 3개씩 끊어서 봐야 한다. 왜냐하면 소유자 ,그룹, 기타 사용자에 대해 읽기, 쓰기, 실행 권한을 모두 표시한 것이므로 권한은 총 9자리로 표시된다. 그래서 3개씩 끊어서 확인하는 것이다.


그러면 board-upload 폴더의 권한을 하나씩 살펴보자.


  • rwx : 소유자 권한으로 읽기, 쓰기, 실행 모두 가능

  • r-x : 그룹 권한으로 읽기, 실행만 가능 (권한이 없는 것은 - 으로 표시한다. 즉 쓰기 권한이 없으므로 가운데에 - 표시가 되어있다.)

  • r-x : 기타 사용자 권한으로 읽기, 실행만 가능



현재 소유권자만 모든 권한이 부여된 상태인데, 이것을 그룹, 기타 사용자도 모든 권한이 부여되도록 변경할 것이다.





# 폴더 또는 파일의 권한 변경
[mgt@localserver: ~$] chmod -Rf 777 [폴더 또는 파일명]
 
 
# 옵션 설명
# -R  서브 디렉토리의 파일까지 실행된다.
# -f  자기소유가 아닌 파일에 까지 변경을 시도한다. 에러 메시지를보여주진 않는다.
# -v  변경되는 모드에 대해 보여준다.
 
ex)
[mgt@localserver: ~$] chmod -Rf 777 board-upload






명령어를 실행시켜 권한을 변경한 뒤, 다시 폴더의 권한을 확인해 보자. 권한이 rwxrwxrwx로 변경된 것을 확인할 수 있다. 이렇게 권한 변경을 한 것은 웹 애플리케이션에서 파일 업로드를 하면서 폴더를 생성할 경우 (예를 들어 업로드 날짜의 폴더를 생성) 오류가 발생할 수 있기 때문에 누구라도 읽기, 쓰기, 실행의 권한을 가질수 있도록 변경한 것이다.





권한 변경 후 파일을 업로드해보면 정상적으로 동작할 것이다. 파일질라를 이용해 업로드 폴더를 확인해 보면 업로드된 파일이 있는 것을 확인할 수 있다.






RSS구독 링크추가 트위터 이메일 구독