현재 vsftpd의 연결 문제로 어려움을 겪고 있습니다.
저는 아치 리눅스를 사용하고 있으며 vsftpd 버전 3.0.3이 설치되어 있습니다.
나는 iptables 등을 사용하지 않습니다. FTP 서버에 연결하면 성공적으로 로그인하여 디렉토리를 탐색할 수 있습니다. 파일을 업로드하고 다운로드할 수도 있습니다.
FTP 사용자는 자신의 홈 디렉토리로 루트가 지정되고 모든 하위 디렉토리는 ftp 사용자가 소유합니다.
현재 구조:
|- home_dir
|- dir1
|- dir2
|- dir3
|- dir3
|- dir4
|- ...
dir1에 "cd"하고, "ls"를 실행하고, 파일을 업로드/다운로드할 수 있습니다. dir2에 "cd"할 수도 있지만 여기에 까다로운 부분이 있습니다.
dir2에 파일을 완벽하게 업로드할 수 있지만 "ls"를 실행하면 서버가 연결을 닫고 "421 서비스를 사용할 수 없습니다. 원격 서버가 연결을 닫았습니다."라는 메시지가 표시됩니다. 원인은 "dir2"의 여러 하위 디렉터리에 있는 것으로 나타났습니다. 8개의 하위 디렉터리가 모두 존재하면 연결이 끊어지는 것으로 나타났습니다. 일단 제거하면 목록이 제대로 작동합니다. 모든 이름에는 특수 문자 없이 a부터 z까지의 소문자만 포함됩니다.
내 FTP 구성:
log_ftp_protocol=YES
anonymous_enable=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
pasv_addr_resolve=YES
pasv_address=mydomain.com
pasv_enable=Yes
pasv_min_port=40020
pasv_max_port=40030
local_enable=YES
write_enable=YES
local_umask=002
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=myuser
ftpd_banner=Welcome.
chroot_local_user=YES
FTP-Log 서버는 다음과 같이 말합니다.
Wed Dec 28 13:55:06 2016 [pid 2] CONNECT: Client "<client_ip>"
Wed Dec 28 13:55:06 2016 [pid 2] FTP response: Client "<client_ip>", "220 Welcome."
Wed Dec 28 13:55:07 2016 [pid 2] FTP command: Client "<client_ip>", "USER myuser"
Wed Dec 28 13:55:07 2016 [pid 2] [myuser] FTP response: Client "<client_ip>", "331 Please specify the password."
Wed Dec 28 13:55:07 2016 [pid 2] [myuser] FTP command: Client "<client_ip>", "PASS <password>"
Wed Dec 28 13:55:07 2016 [pid 1] [myuser] OK LOGIN: Client "<client_ip>"
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "230 Login successful."
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "OPTS UTF8 ON"
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "200 Always in UTF8 mode."
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "PWD"
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "257 "/" is the current directory"
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "TYPE I"
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "200 Switching to Binary mode."
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "PASV"
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "227 Entering Passive Mode (<server_ip>,156,86)."
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "LIST"
Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "150 Here comes the directory listing."
Wed Dec 28 13:55:08 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "226 Directory send OK."
Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "CWD /dir1"
Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "250 Directory successfully changed."
Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "PASV"
Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "227 Entering Passive Mode (<server_ip>,156,92)."
Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "LIST"
Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "150 Here comes the directory listing."
Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "226 Directory send OK."
Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "CWD /dir1/dir2"
Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "250 Directory successfully changed."
Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "PASV"
Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "227 Entering Passive Mode (<server_ip>,156,87)."
Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "LIST"
Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "150 Here comes the directory listing."
로그는 항상 "150 디렉토리 목록이 옵니다." 이후에 중지됩니다. 나는 여러 번 시도했다.
터미널에서 ftp 명령을 사용하면 다음과 같이 표시됩니다.
$ ftp -n 127.0.0.1
Connected to 127.0.0.1.
220 Welcome.
ftp> user myuser
331 Please specify the password.
Password:
230 Login successful.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 4 1000 1000 4096 Dec 28 13:27 dir1
226 Directory send OK.
ftp> cd dir1
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxr-xr-x 1 1000 1000 469504 Dec 23 03:03 file_1
-rw-r--r-- 1 1000 1000 186 Feb 19 2016 file_2
-rw-r--r-- 1 1000 1000 121856 Dec 23 00:16 file_3
-rw-r--r-- 1 1000 1000 118272 Feb 12 2016 file_4
-rw-r--r-- 1 1000 1000 88232 Mar 22 2016 file_5
-rw-r--r-- 1 1000 1000 64680 Mar 22 2016 file_6
-rw-r--r-- 1 1000 1000 101032 Mar 22 2016 file_7
-rw-r--r-- 1 1000 1000 6144 Mar 22 2016 file_8
-rw-r--r-- 1 1000 1000 899584 Mar 22 2016 file_9
drwxrwxr-x 42 1000 1000 4096 Dec 28 11:38 dir2
226 Directory send OK.
ftp> cd dir2
250 Directory successfully changed.
ftp> pwd
257 "/dir1/dir2" is the current directory
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
421 Service not available, remote server has closed connection
도움을 주셔서 감사합니다.
답변1
답변2
vsftp 3.0.3(pkg rel 3)이 설치된 Arch Linux에서도 똑같은 문제가 발생했습니다. 이 문제를 일으키는 디렉터리에 파일이 너무 많습니다(2,666개). 대부분을 제거한 후 FTP를 통한 목록이 다시 작동하기 시작했습니다.
이상하지 않나요? 2,666개는 많지 않은 것 같습니다. 그러나 나는 정말로 다른 것을 바꾸지 않았습니다. vsftp 설정은 여전히 동일하며 파일 시스템 권한은 영향을 받지 않습니다. 또한 파일 이름에는 이상한 문자(최대 21자 길이의 연속 숫자)가 포함되어 있지 않습니다.