방화벽으로 인해 FTP 서비스가 막히는 것을 해결해기 위해 PASV 방식을 지원하는 FileZilla를 통해 서버로 파일을 업로드하려고 하였다. FTP 서버와 연결(제어 세션 수립)은 정상적으로 되나, 파일 업로드 시 다음과 같이 550 에러로 인해 파일 업로드를 실패하는 현상이 생긴다.
우선 550 에러의 경우 '권한 부족' 또는 '접근 불가'와 관련된 코드이다. FTP 서버의 경우 FTP 서버에 접속한 사용자의 업로드 하려는 디렉토리에 대한 권한이 부족하거나, 서버가 요청을 처리하지 못한 무언가의 문제가 있을거라고 생각이 든다..
1. 파일 권한 문제
먼저 디렉토리 접근 권한이 있는지 확인해보자(특히 w)
권한이 정상적으로 설정돼있다는 것을 확인할 수 있다.
권한이 없을 경우 다음과 같이 권한을 부여해주거나, 소유권을 변경해준다(필요한 만큼만 권한을 부여할 것)
chmod 755 /home/user
chown user:user /home/user
2. FTP 서버 설정 문제
FTP 서버가 /home/user 디렉터리에 쓰기 작업을 허용하지 않도록 설정되어 있을 수 있다.
FTP 서버 설정 파일( /etc/vsftpd.conf )을 열어 확인해보자
설정 파일의 다음 항목들이 주석처리 또는 NO로 돼있는지 확인해보고, 다음과 같이 설정돼있지 않다면 수정해주자
write_enable=YES
local_umask=022
설정이 변경됐다면, FTP 서버를 재시작해주자
sudo systemctl restart vsftpd
3. SELinux 문제
SELinux가 활성화돼있다면 FTP 서버로의 업로드를 차단할 수 있다
SELinux의 설정 확인해보자
getenforce
결과값이 enforcing이 나온다면 SELinux가 실행 중인 것이다.
다음과 같이 업로드하려는 디렉터리에 FTP 쓰기를 허용해주거나, SELinux를 비활성화해주자
// 비활성화
setenforce 0
sudo setsebool -P ftp_home_dir 1
4. 디스크 사용량 문제
서버의 디스크 공간이 부족한 경우 550 에러가 발생할 수 있다
디스크 사용량을 확인하는 명령어는 다음과 같다
df -h
만약 디스크가 꽉 차 있다면, 디스크를 정리하고 다시 업로드를 실행해보자