Linux下FTP服务搭建完成后的一些设置

今天在centos下搭建里一个ftp 服务,但是使用commen-net包下的ftpclient进行连接登录时报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
private boolean connect() {
log.debug("ftp status:{}/{}", ftpClient.isAvailable(), ftpClient.isConnected());
if (!ftpClient.isConnected()) {
log.debug("ftp client 失去连接");
try {
ftpClient.logout();
} catch (Exception e) {
log.debug("注销异常", e);
}
try {
ftpClient.disconnect();
} catch (Exception e) {
log.debug("关闭连接异常", e);
}
try {
ftpClient.connect(BDConfig.getString("fs.ftp.ip"), BDConfig.getInt("fs.ftp.port"));
} catch (IOException e) {
log.error("连接到:{}:{}异常", BDConfig.getString("fs.ftp.ip"), BDConfig.getString("fs.ftp.port"), e);
return false;
}
boolean connect = FTPReply.isPositiveCompletion(ftpClient.getReplyCode());
log.debug("ftp 连接完毕:{}。", connect, ftpClient.getReplyString());
if (!Strings.isEmpty(Config.getString("fs.ftp.userName")) && !Strings.isEmpty(Config.getString("fs.ftp.password"))) {
try {
boolean b = ftpClient.login(Config.getString("fs.ftp.userName"), Config.getString("fs.ftp.password"));
log.debug("{}/{}登录结果:{}/{}", Config.getString("fs.ftp.userName"), Config.getString("fs.ftp.password"), b, ftpClient.getReplyString());
} catch (IOException e) {
log.error("登录到:{}:{}异常", Config.getString("fs.ftp.ip"), Config.getString("fs.ftp.port"), e);
return false;
}
}
try {
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
} catch (IOException e) {
log.error("设置文件类型异常,{}", e, ftpClient.getReplyString());
return false;
}
}
return true;
}

连接没问题,登录报错

1
ftpuser2/ftpuser2登录结果:false/500 OOPS: cannot change directory:/home/ftpuser2

一开始以为是用户的问题,重新配置了一下vsftpd仍然不行。
最后google下发现linux搭建好ftp server还要配置几个开关项才能使用。使用命令查看ftp的配置项

1
sestatus -b|grep ftp

1
2
3
4
5
6
7
8
9
10
11
12
allow_ftpd_anon_write off
allow_ftpd_full_access off
allow_ftpd_use_cifs off
allow_ftpd_use_nfs off
ftp_home_dir off
ftpd_connect_db off
ftpd_use_fusefs off
ftpd_use_passive_mode off
httpd_enable_ftp_server off
tftp_anon_write off
tftp_use_cifs off
tftp_use_nfs off

其中ftp_home_dir用于控制用户目录下的读写,如果此项是off则会报出 cannot change directory错误,使用命令开启

1
setsebool -P ftp_home_dir on

重启server

1
service vsftpd restart

重启完后程序可以正常连接登录。