CentOS 7 开启FTP及配置用户

什么是vsftpd

vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
vsftpd 的名字代表”very secure FTP daemon”, 安全是它的开发者 Chris Evans 考虑的首要问题之一。在这个 FTP 服务器设计开发的最开始的时候,高安全性就是一个目标。

安装步骤

操作系统:centos 7 64位
vsftpd: version 3.0.2

安装vsftpd
1、以管理员(root)身份执行以下命令
yum install vsftpd
2、设置开机启动vsftpd ftp服务
chkconfig vsftpd on
3、启动vsftpd服务
service vsftpd start
管理vsftpd相关命令:
停止vsftpd: service vsftpd stop
重启vsftpd: service vsftpd restart
配置防火墙
打开/etc/sysconfig/iptables文件
vi /etc/sysconfig/iptables
在REJECT行之前添加如下代码
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT
保存和关闭文件,重启防火墙
service iptables start
配置vsftpd服务器
默认的配置文件是/etc/vsftpd/vsftpd.conf,你可以用文本编辑器打开。
vi /etc/vsftpd/vsftpd.conf
添加ftp用户
下面是添加test用户,设置根目录为/opt/test_ftp,禁止此用户登录SSH的权限,并限制其访问其它目录。
1、修改/etc/vsftpd/vsftpd.conf

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
anonymous_enable=NO

local_enable=YES

write_enable=YES
#
# Default umask for local users is 077\. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022

#anon_upload_enable=YES

#anon_mkdir_write_enable=YES

dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES

#chown_uploads=YES
#chown_username=whoever

#xferlog_file=/var/log/xferlog

xferlog_std_format=YES

#idle_session_timeout=600

#data_connection_timeout=120

#nopriv_user=ftpsecure

#async_abor_enable=YES

#ascii_upload_enable=YES
#ascii_download_enable=YES

#ftpd_banner=Welcome to blah FTP service.
#

#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails

#chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#ls_recurse_enable=YES

listen=NO

listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

pasv_enable=YES
pasv_max_port=30100
pasv_min_port=30000

 

 

2、增加用户test,指向目录/opt/test_ftp,禁止登录SSH权限。
useradd -d /opt/test_ftp -g ftp -s /sbin/nologin test
3、设置用户口令
passwd test
4、重新启动vsftpd
service vsftpd restart

测试是否连接正常:
在另外一台服务器或者本地测试:
root@Aadadq2134214324:/home/zou# ftp 192.168.2.12
Connected to 192.168.2.12
220 (vsFTPd 3.0.2)
Name (192.168.2.12:zou): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-rw-rw- 1 1005 50 8 Aug 30 08:23 rr.php
-rw-r–r– 1 1005 50 0 Aug 30 08:21 rrr.php._tmp_uploadphp
226 Directory send OK.
ftp>

ok,测试正常。

另外,如果觉得以后管理ftp用户名嫌麻烦,可以使用centos官方发布的脚本管理。地址如下:
http://wiki.centos.org/HowTos/Chroot_Vsftpd_with_non-system_users

出现的错误

(以下错误只在本地用户试过,虚拟用户不知道是否可行)
1、500 OOPS: cannot change directory
ftp服务器连接失败,错误提示:
500 OOPS: cannot change directory:/home/***
500 OOPS: child died
解决方法:
在终端输入命令:
setsebool -P ftpd_disable_trans 1
service vsftpd restart
就OK了!
原因:这是因为服务器开启了selinux,这限制了FTP的登录。

2,500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解决方法(2种方法):
(1),
去掉该用户根目录的写的权限,再新建一目录,以后用新目录

#sudo chmod a-w /home/用户名

#sudo mkdir /home/用户名/新目录名
其实很不方便,用户登陆进去会发现必须要再进一层目录才能找到自己的文件
(2)
如果非要保证ftp用户根目录可写,
sudo vim /etc/vsftpd/chroot_list
移除/etc/vsftpd/chroot_list中的test用户
但这样也有风险,这个ftp用户可以去浏览系统其它目录了,失去了chroot设置意义了。
service vsftpd restart

原因:如果开启了chroot来控制用户路径,则用户不能再具有该用户根目录的写的权限。

3,530 Login incorrect
解决方法:
vi /etc/pam.d/vsftpd
设置如下:

1
2
3
4
5
6
7
8
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth

 

原因:这个pam认证文件可能被修改过。
4,530 Permission denied.
解决方法(两种办法):
(1),vi /etc/vsftpd/user_list
把里面的test用户删掉后保存

(2),vi /etc/vsftpd/vsftpd.conf
把userlist_enable改为NO

service vsftpd restart
原因:在vsftpd.conf中添加userlist_*是阻止特定的本地用户访问。

其他设置:

1.匿名上传下载
修改配置文件即可vsftpd.conf,确定有以下几行,没有自己添加进去就可以了.
anonymous_enable=yes
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_umask=022

然后你可以新建一个文件夹,修改它的权限为完全开放,任何用户就可以登录这个文件夹,并上传下载文件:
mkdir /var/ftp/guest
chmod 777 /var/ftp/guest

2.定制进入FTP服务器的欢迎信息
在vsftpd.conf文件中设置:
dirmessage_enable=yes
然后进入用户目录建立一个.message文件,输入欢迎信息即可(我这里写入的是Welcome to gxlinux’s FTP!):
[root@localhost test_ftp]# ftp 192.168.0.33
Connected to 192.168.0.33 (192.168.0.33).
220 (vsFTPd 2.0.5)
Name (192.168.0.33:gxl): test
331 Please specify the password.
Password:
230-Welcome to gxlinux’s FTP!
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

3.实现虚拟路径
将某个目录挂载到FTP服务器下供用户使用,这就叫做虚拟路径.
比如将gxl用户的目录挂载到FTP服务器中,供FTP服务器的用户使用,使用如下命令即可:
[root@localhost opt]# mount –bind /home/gxl /var/ftp/pub #使用挂载命令
[root@localhost opt]# ls /var/ftp/pub
LumaQQ Screenshot.png 桌面

4.打开vsFTPd的日志功能
添加下面一行到vsftpd.conf文件中,一般情况下该文件中有这一行,只要把前面的注释符号#去掉即可,没有的话就添加,或者修改:
xferlog_file=/var/log/vsftpd.log

5.限制链接数,以及每个IP最大的链接数
修改配置文件中,例如vsftp最大支持链接数100个,每个IP能支持5个链接:
max_client=100
max_per=5

6.限制传输速度
修改配置文件中,例如让匿名用户和vsftd上的用户(即虚拟用户)都以80KB=1024*80=81920的速度下载
anon_max_rate=81920
local_max_rate=81920

7.将用户(一般指虚拟用户)限制在自家目录
修改配置文件中,这样用户就只能访问自己家的目录了:
chroot_local_user=yes
如果只想某些用户仅能访问自己的目录,其它用户不做这个限制,那么就需要在chroot_list文件(此文件一般是在/etc/vsftpd/中)中添加此用户.
编辑此文件,比如将test用户添加到此文件中,那么将其写入即可.一般的话,一个用户占一行.
[root@localhost vsftpd]# cat chroot_list
test

8.绑定某个IP到vsFTPd
有时候要限制某些IP访问服务器,只允许某些IP访问,例如只允许192.168.0.33访问这个FTP,同样修改配置文件:
listen_address=192.168.0.33

坚持原创技术分享,您的支持将鼓励我继续创作!