CentOS 7 使用Yum方式安装配置vsftpd服务
ftp是我们最常用的网络协议之一,用于方便的在网络中传输文件。vsftp是Linux平台轻量级的ftp服务软件,它小巧轻快、简单易用。本文介绍CentOS 7下使用yum安装配置vsftpd服务器,包括匿名登录方式、系统用户登录方式和虚拟用户登录三种登录方式的vsftpd服务配置。本文也适用于RHEL、Fedora、Oracle Linux 等其它Linux Redhat发行版本。
2、生成虚拟用户数据库:
3、配置vsftpd pam验证文件/etc/pam.d/vsftpd:
4、修改虚拟数据库文件vir_user.db的权限为700:
5、增加一个系统用户virftp ,所有虚拟用户都会映射到此用户后对文件系统进行读写操作:
mkdir /ftproot
6、设置vsftpd主配置文件/etc/vsftpd/vsftpd.conf:
7、设置虚拟用户各自的配置文件:
8、在虚拟用户 aiezuuser 的配置文件中写入如下配置/etc/vsftpd/vsftpd_viruser/aiezuuser:
9、重启vsftpd服务:
10、使用虚拟用户aiezuuser和密码aiezu123进行连接vsftpd测试:
①. vsftpd服务全局相关参数:
②. vsftpd用户、权限相关参数:
一、实验环境:
- 操作系统: CentOS Linux release 7.2.1511 (Core)
- CPU构架:x86_64
- Vsftpd版本:vsftpd-3.0.2-21.el7
二、安装准备:
1、关闭SELINUX:
SELINUX为Linux提供安全强化同时,也让Linux服务安装变得更复杂。未正确的为相关服务配置SELINUX,将导致服务无法正常运行。所以对于初学者来说,建议关闭SELINUX。vim /etc/selinux/config:#SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加保存退出后,执行“setenforce 0”命令使配置立生效:
setenforce 0
三、安装vsftpd服务:
1、使用安装yum安装vsftpd:
使用“yum -y install vsftpd ”命令,会自动安装vsftpd命令和相关依赖包:yum -y install vsftpd
2、备份vsftpd配置文件:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
四、方案一,配置匿名访问的vsftpd服务:
1、配置vsftpd.conf文件:
#允许匿名用户访问 anonymous_enable=YES #禁止本地用户访问 local_enable=NO #允许匿名用户创建目录 anon_mkdir_write_enable=YES #允许匿名用户上传文件 anon_upload_enable=YES #允许匿名用户执行其他写入操作,如删除 anon_other_write_enable=YES #设置匿名用户根目录 anon_root=/ftp
2、创建匿名用户目录:
# /ftp/pub目录可写,/ftp目录不可写 mkdir -p /ftp/pub chown -R ftp.ftp /ftp chmod a-w /ftp
3、启动vsftpd服务:
[root@aiezu.com vsftpd]# service vsftpd start Redirecting to /bin/systemctl start vsftpd.service
4、测试:
在另外一台服务器上连接ftp进行测试,使用匿名用户“anonymous”和任意包含"@"字符串的密码进行连接:[root@aiezu.com ~]# ftp xxx.xxx.xxx.xxx Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx). 220 (vsFTPd 3.0.2) Name (yyy.yyy.yyy.yyy:root): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> dir 227 Entering Passive Mode (106,14,37,132,180,191). 150 Here comes the directory listing. drwxr-xr-x 2 14 50 4096 Mar 24 15:01 pub 226 Directory send OK. ftp> cd pub 250 Directory successfully changed. ftp> mkdir ok 257 "/pub/ok" created ftp> rm ok 250 Remove directory operation successful.
五、方案二,配置本地用户(系统)访问的vsftpd服务:
1、配置主配置文件vsftpd.conf:
#禁止匿名用户访问 anonymous_enable=NO #允许本地用户访问 local_enable=YES #允许写入操作 write_enable=YES #禁止用户离开自己的用户根目录 chroot_local_user=YES #启用用户名单列表 userlist_enable=YES #设置用户名单列表为白名单(只允许名单中的用户连接到vsftpd) userlist_deny=NO #设置用户名单列表文件名 userlist_file=/etc/vsftpd/user_allow
2、添加测试用户和设置权限:
添加用户testuser,设置密码后,添加到"/etc/vsftpd/user_allow"文件,并重启vsftpd服务:[root@aiezu.com ~]# mkdir -p /ftproot/testuser [root@aiezu.com ~]# useradd -d /ftproot testuser -s /sbin/nologin [root@aiezu.com ~]# chown -R testuser.testuser /ftproot/testuser [root@aiezu.com ~]# chmod a-w /ftproot [root@aiezu.com ~]# passwd testuser Changing password for user testuser. New password: (这里输入密码) passwd: all authentication tokens updated successfully. [root@aiezu.com ~]# echo "testuser" >> /etc/vsftpd/user_allow
3、重启vsftpd服务:
[root@aiezu.com ~]# service vsftpd restart Redirecting to /bin/systemctl restart vsftpd.service
4、测试:
在另外一台服务器上连接ftp进行测试,使用本地用户“testuser”和你设置的密码进行连接:[root@s2 ~]# ftp xxx.xxx.xxx.xxx Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx). 220 (vsFTPd 3.0.2) Name (yyy.yyy.yyy.yyy:root): testuser 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> dir 227 Entering Passive Mode (106,14,37,132,223,218). 150 Here comes the directory listing. drwxr-xr-x 2 1000 1000 4096 Mar 25 12:56 testuser 226 Directory send OK. ftp> mkdir aa 550 Create directory operation failed. ftp> cd testuser 250 Directory successfully changed. ftp> mkdir aa 257 "/testuser/aa" created ftp> dir 227 Entering Passive Mode (106,14,37,132,89,105). 150 Here comes the directory listing. drwxr-xr-x 2 1000 1000 4096 Mar 25 12:58 aa 226 Directory send OK.
六、方案三,配置虚拟用户访问的vsftpd服务(推荐方式):
1、创建虚拟用户密码文件,奇数行为用户名,偶数行为密码:touch /etc/vsftpd/vir_user.txt echo -e "aiezuuser\naiezu123" >> /etc/vsftpd/vir_user.txt
2、生成虚拟用户数据库:
yum -y install libdb-utils db_load -T -t hash -f /etc/vsftpd/vir_user.txt /etc/vsftpd/vir_user.db
3、配置vsftpd pam验证文件/etc/pam.d/vsftpd:
mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak cat <<END > /etc/pam.d/vsftpd auth required pam_userdb.so db=/etc/vsftpd/vir_user account required pam_userdb.so db=/etc/vsftpd/vir_user END
4、修改虚拟数据库文件vir_user.db的权限为700:
chmod 700 /etc/vsftpd/vir_user.db
5、增加一个系统用户virftp ,所有虚拟用户都会映射到此用户后对文件系统进行读写操作:
mkdir /ftproot
useradd -d /ftproot virftp -s /sbin/nologin chown -R virftp.virftp /ftproot
6、设置vsftpd主配置文件/etc/vsftpd/vsftpd.conf:
#禁止匿名用户登录 anonymous_enable=NO #允许本地用户登录 local_enable=YES #启用虚拟账户 guest_enable=YES #把虚拟账户映射到系统账户virftp guest_username=virftp #使用虚拟用户验证(PAM验证) pam_service_name=vsftpd #设置存放各虚拟用户配置文件的目录(此目录下与虚拟用户名相同的文件为他的配置文件) user_config_dir=/etc/vsftpd/vsftpd_viruser #启用chroot时,虚拟用户根目录允许写入 allow_writeable_chroot=YES
7、设置虚拟用户各自的配置文件:
mkdir /etc/vsftpd/vsftpd_viruser/ #配置文件名同虚拟账户名 touch /etc/vsftpd/vsftpd_viruser/aiezuuser mkdir -p /ftproot/aiezuuser/ chown -R virftp.virftp /ftproot/aiezuuser/
8、在虚拟用户 aiezuuser 的配置文件中写入如下配置/etc/vsftpd/vsftpd_viruser/aiezuuser:
# 允许写入 write_enable=YES #允许浏览FTP目录和下载 anon_world_readable_only=NO # 允许虚拟用户aiezuuser上传文件 anon_upload_enable=YES # 允许虚拟用户创建目录 anon_mkdir_write_enable=YES # 允许虚拟用户aiezuuser执行其他操作(如改名、删除) anon_other_write_enable=YES # 上传文件的掩码,如022时,上传目录权限为755,文件权限为644 anon_umask=022 # 指定虚拟用户的虚拟目录(虚拟用户登录后的主目录) local_root=/ftproot/aiezuuser/
9、重启vsftpd服务:
service vsftpd restart
10、使用虚拟用户aiezuuser和密码aiezu123进行连接vsftpd测试:
[root@S2 ~]# ftp xxx.xxx.xxx.xxx Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx). 220 (vsFTPd 3.0.2) Name (yyy.yyy.yyy.yyy:root): aiezuuser 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> mkdir aa 257 "/aa" created ftp> mkdir bb 257 "/bb" created ftp> ls 227 Entering Passive Mode (106,14,37,132,129,241). 150 Here comes the directory listing. drwx------ 2 1000 1000 4096 Mar 25 14:36 aa drwx------ 2 1000 1000 4096 Mar 25 14:36 bb 226 Directory send OK.
七、常见问题:
问题一:连接到vsftpd服务器时,提示:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()解决方法:请参考http://aiezu.com/question/112.html
八、附录:
1、vsftpd相关目录和文件介绍:
- /etc/vsftpd/vsftpd.conf:vsftpd服务主配置文件;
- /etc/vsftpd/ftpusers:设置不允许访问ftp服务的系统用户(黑名单),一行一个用户名;
- /etc/vsftpd/user_list:用于设置允许或禁止访问vsftpd服务的系统用户名单,主配置文件的“userlist_enable”参数决定此名单是否生效,“userlist_deny”参数决定此名单是黑名单还是白名单;
- /etc/pam.d/vsftpd:vsftpd的pam模块的配置文件,用来认证身份和阻止特定用户;
- /usr/sbin/vsftpd:vsftpd的主要执行文件;
- /var/ftp:vsftpd的默认匿名用户登录的根目录。
2、主配置文件vsftpd.conf相关参数介绍:
vsftpd的配置参数很多,我们可以通过man 5 vsftpd.conf命令获取到vsftpd.conf配置文件的详细帮助信息。下面介绍一些vsftpd常用的参数。①. vsftpd服务全局相关参数:
参数 | 描述 |
---|---|
connect_from_port_20=YES|NO | 是否使用20号端口做为ftp-data的端口号 |
listen_port=21 | 设置vsftpd服务监听的端口号 |
listen=YES|NO | 设置vsftpd是否stand alone方式启动 |
pasv_enable=YES|NO | 是否开启被动模式 |
pasv_max_port=0 pasv_min_port=0 | 设置被动模式(passive mode)使用的端口范围,为0时不受限制 |
max_Clients=0 | 当vsftpd以stand alone运行时,用来设置最大同时在线数 |
max_per_ip=0 | 用于设置同一IP允许的同时最大连接数 |
idle_session_timeout=300 | 如果用户300秒内没有命令操作,则强制离线 |
ftpd_banner="欢迎信息" banner_file=/path/file | 通过字符串或者文件的方式设置连接到vsftpd服务器时的欢迎信息 |
dirmessange_enable=YES|NO message_file=.message | 配置ftp进入目录时显示目录下某个文件的内容做为提示信息 |
ascii_download_enable=YES|NO ascii_upload_enable=YES|NO | 是否允许ascii方式传输 |
xferlog_enable=YES|NO xferlog_file=/var/log/vsftpd.log | 是否记录用户下载上传的文件 |
参数 | 描述 |
---|---|
write_enable=YES|NO | 用来设置是否允许用户上传文件 |
guest_username=ftp | 指定来宾用户身份的用户名 |
guest_enable=YES|NO | 是否将非匿名用户映射成来宾用户。 |
local_enable=YES|NO | 是否允许/etc/passwd中的用户以实体用户的身份登录到ftp服务器。 |
local_max_rate=0 | 设置最大传输速度,单位为bytes/s |
chroot_local_user=YES|NO chroot_list_enable=YES|NO chroot_list_file=/etc/vsftpd/chroot_list | 用来设置哪些用户被限制在自己的目录内无法离开 |
allow_writeable_chroot=YES|NO | 启用chroot时用户根目录是否允许写入,默认否 |
userlist_enable=YES|NO userlist_deny=YES|NO userlist_file=/etc/vsftpd/user_list | 用来阻止或者允许相关用户登录到vsftpd服务器; userlist_file:指定允许或禁止访问vsftpd服务的系统用户名单文件; userlist_enable:决定名单是否生效; userlist_deny:决定此名单是黑名单还是白名单; |
anonymous_enable=YES|NO | 是否允许anonymouns用户登录到vsftpd服务器 |
anon_root=/var/ftp | 设置匿名用户根目录 |
anon_world_readable_only=YES|NO | 匿名用户是否只允许下载可读的文件 |
anon_mkdir_write_enable=YES|NO anon_upload_enable=YES|NO anon_other_write_enable=YES|NO | 设置匿名用户的写入权限 |
no_anon_password=YES|NO | anonymous登录时是否可以省略密码。 (匿名用户使用用户名“anonymous”,密码使用任意包含“@”字符的字符串登陆) |
anon_max_rate=0 | 设置anonymous的最大传输速度。 |
anon_umask=077 | anonymous用户上传文件的权限掩码。 |