우분투 서버에서 파일 업로드 시 권한 문제 해결하기
우분투 서버에 배포된 웹 애플리케이션을 실행하여 파일 업로드를 할 때 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로 변경된 것을 확인할 수 있다. 이렇게 권한 변경을 한 것은 웹 애플리케이션에서 파일 업로드를 하면서 폴더를 생성할 경우 (예를 들어 업로드 날짜의 폴더를 생성) 오류가 발생할 수 있기 때문에 누구라도 읽기, 쓰기, 실행의 권한을 가질수 있도록 변경한 것이다.
권한 변경 후 파일을 업로드해보면 정상적으로 동작할 것이다. 파일질라를 이용해 업로드 폴더를 확인해 보면 업로드된 파일이 있는 것을 확인할 수 있다.
'운영체제, 서버 > 리눅스' 카테고리의 다른 글
[Ubuntu] 아파치(Apache) OpenSSL 적용 (6) | 2017.11.09 |
---|---|
[Ubuntu] 아파치(Apache) 설치 및 톰캣(Tomcat8) 연동 (9) | 2017.09.19 |
[Ubuntu] 우분투 서버(16.04)에 MySQL(5.7) 설치 (7) | 2017.08.14 |
[Ubuntu] 우분투 서버(16.04)에 톰캣 설치 (3) | 2017.08.13 |
[Ubuntu] 우분투 서버(16.04)에 자바 설치 (7) | 2017.08.12 |