vsftp配置详解
FTP:文件传输协议(File Transfer Protocol)
是用于在网络上进行文件传输的一套标准协议。它属于网络传输协议的应用层。
FTP服务一般运行在20和21两个端口
20用于在客户端和服务器之间传输数据流(主动模式时使用)
21用于传输控制流,并且是命令通向ftp服务器的进口。
FTP两种使用模式:
主动PORT模式:PORT模式 由FTP服务器端发起,FTP服务器使用20端口连接客户端的某一个大于1023的随机端口。
被动PASV模式:PASV模式 由FTP客户端发起的,使用一个大于1024的端口连接服务器上大于1023的随机端口。
数据传输模式:
ASCII:文本格式
BINARY:二进制格式
vsftp:very secure FTP
主配置文件:/etc/vsftpd/vsftpd.conf
anonymous_enable=YES 允许匿名用户登录
local_enable=YES 允许本地用户登录
write_enable=YES 允许用户上传
local_umask=022 本地用户上传后的权限mask
anon_upload_enable=NO 匿名用户上传控制
#anon_mkdir_write_enable=YES 匿名用户创建目录
dirmessage_enable=YES 显示目录注释
xferlog_enable=YES 开启日志
connect_from_port_20=YES 主动连接使用的数据通道
#chown_uploads=YES
#chown_username=whoever
xferlog_std_format=YES 与wu-ftp相同的日志文件格式
#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
#banned_email_file=/etc/vsftpd/banned_emails
#chroot_local_user=NO 若开启,则本地用户默认使用chroot()
#chroot_list_enable=NO 如果开启,需提供文件指定生效用户,如果chroot_local_user设置为Yes,则这个列表为不生效用户,默认列表文件是/etc/vsftpd.chroot_list,可通过chroot_list_file参数制定文件
#chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=NO 是否允许用户使用'ls -R'命令,递归显示目录
listen=YES 以stand alone的方式启动(值为NO时,super daemon方式启动)
#listen_ipv6=YES
pam_service_name=vsftpd vsftpd服务中PAM验证模块的名称
userlist_enable=YES 使用user_list文件控制用户登录(配合userlist_deny)
#userlist_deny=YES
tcp_wrappers=YES 采用tcp_wrappers进行控制访问
匿名用户相关配置:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
系统用户相关:
local_enable=YES
write_enable=YES
辅助认证配置文件/etc/vsftpd/ftpusers
pam认证的配置文件:/etc/pam.d/vsftpd
chroot_local_users=YES
禁锢所有的本地用户于自己的家目录中;需移除用户对家目录写权限;
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
禁锢指定的文件中的用户于自己的家目录中;需移除用户对家目录写权限;
数据传输日志:
xferlog_std_format=YES
xferlog_enable=YES
xferlog_file=/var/log/xferlog
控制可登录vsftpd服务的用户列表:
userlist_enable=YES
userlist_deny={YES|NO}
如果userlist_deny=NO, 只允许user_list文件中的用户
如果userlist_deny=YES (默认), 不允许user_list文件中的用户, 输入密码前就会报错
vsftpd配置实例:
Centos 7
禁锢系统用户于家目录;
基于mysql进行用户认证;
不同的虚拟用户拥有不同的权限设定;
安装vsftp、mysql及pam-mysql模块,用于pam连接mysql存储密码:
]# yum isntall vsftpd mariadb-server mariadb-devel pam-devel
]# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
]# tar xvf pam_mysql-0.7RC1.tar.gz
]# cd pam_mysql-0.7RC1
]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
]# make
]# make install
准备mairadb数据库:
]# mysql_install_db --user=mysql 初始化数据库
]# systemctl start mariadb 启动mariadb
]# mysql_secure_installation 安全设置
]# mysql -p 输入密码登陆数据库
> create database vsftpd; 创建vsftpd数据库
插入虚拟用户信息:
> insert into vsftpd.users (name,password) values ('rick',PASSWORD('222222')),('morty',PASSWORD('222222'));
授权:
> grant all on vsftpd.* to 'vuser'@'localhost' identified by '333333';
> grant all on vsftpd.* to 'vuser'@'127.0.0.1' identified by '333333';
> flush privileges;
配置vsftpd通过pam_mysql进行认证
]# vi /etc/vsftpd/vsftpd.conf
#listen_ipv6=YES 注释该行
pam_service_name=vsftpd.mysql
guest_enable=YES
guest_username=vuser
模块认证配置文件:
]# vi /etc/pam.d/vsftpd.mysql 添加两行
auth required /usr/lib64/security/pam_mysql.so user=vuser passwd=333333 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vuser passwd=333333 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
创建映射的系统用户账号:
]# mkdir vpub
]# useradd -d /vpub vuser
]# mkdir /vpub/{pub,upload}
]# chmod u-w /vpub
]# setfacl -m u:vuser:rwx /vpub/upload
设置各虚拟用户的权限
]# vi /etc/vsftpd/vsftpd.conf 添加一行指定虚拟用户权限目录
user_config_dir=/etc/vsftpd/users_conf
]# mkdir users_conf
]# vi rick 虚拟用户的权限都用匿名指令指定
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
]# vi morty 该用户无上传权限
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
测试成功:
lftp rick@10.1.235.7:/upload> put issue
59 bytes transferred
lftp morty@10.1.235.7:/upload> put centos-release
put: Access failed: 550 Permission denied. (centos-release)