ftp,sftp,vsftpd
首先简单介绍一下ftp,sftp,vsftpd分别是什么
ftp:是File Transfer Protocol的缩写,文件传输协议,用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层
sftp:是SSH File Transfer Protocol的缩写,安全文件传输协议
vsftpd:是very secure FTP daemon的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件
vsftpd的安装及使用
环境为Centos7,并使用yum的方式进行安装
安装vsftpd
配置好yum源后执行命令yum -y install vsftpd
进行安装
执行命令systemctl status vsftpd
检测是否安装成功,此时服务的状态为dead
因为vsftpd服务为常驻服务,所以建议添加开机自启systemctl enable vsftpd
配置vsftpd
本次搭建vsftpd服务接到的需求是不同用户有不同的ftp根目录
备份原配置文件(养成修改之前先备份的习惯,血泪教训)
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
编辑/etc/vsftpd/vsftp.conf
为如下内容
anonymous_enable=NO
local_enable=YES
local_root=/var/ftp/
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
idle_session_timeout=300
data_connection_timeout=120
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
# userlist_deny=NO
tcp_wrappers=YES
listen_port=2121
pasv_enable=YES
pasv_min_port=9981
pasv_max_port=9990
user_config_dir=/etc/vsftpd/userconfig/
以下为各配置项作用
anonymous_enable=NO # 禁止匿名用户访问
local_enable=YES # 允许本地用户访问
local_root=/var/ftp/ # 设定本地用户家目录
write_enable=YES # 允许用户修改ftp目录下文件
local_umask=022 # 本地用户新增文件的权限
anon_upload_enable=NO # 禁止匿名用户上传文件
anon_mkdir_write_enable=NO # 禁止匿名用户创建新目录
dirmessage_enable=YES # 允许为目录配置显示信息,显示每个目录下面的message_file文件的内容
xferlog_enable=YES # 开启日志功能
xferlog_std_format=YES # 使用标准日志格式
xferlog_file=/var/log/xferlog # 日志文件位置
idle_session_timeout=300 # 空闲连接超时时间
data_connection_timeout=120 # 数据传输超时间
allow_writeable_chroot=YES # 使用户在使用ftp时具有自己根目录的写权限
chroot_local_user=YES # 如果启动这项功能,所有本地用户通过ftp只能访问自己的主目录
chroot_list_enable=YES # 如果启动这项功能,则所有列在chroot_list_file中的用户只能访问自己的主目录
chroot_list_file=/etc/vsftpd/chroot_list # 定义用户访问限制的文件
listen=YES # 启动独立模式,只接受IPV4的连接
pam_service_name=vsftpd # 定义PAM 所使用的名称,预设为vsftpd
userlist_enable=YES # 启用此选项,userlist_deny选项才能被启动
# userlist_deny=NO # 若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录
tcp_wrappers=YES # 开启tcp_wrappers支持
listen_port=2121 # 设定监听端口(因为是线上环境,所以没有使用默认端口21)
pasv_enable=YES # 允许PASV模式进行数据传输(自定义设置)
pasv_min_port=9981 # PASV模式下数据传输所使用port范围下界(自定义设置)
pasv_max_port=9990 # PASV模式下数据传输所使用port范围上界(自定义设置)
user_config_dir=/etc/vsftpd/userconfig/ # 定义用户配置文件的目录 (自定义设置)
因为上面指定了用户访问限制的文件以及滴定仪用户配置文件的目录,所以需要创建,否则会启动报错
touch /etc/vsftpd/chroot_list
mkdir /etc/vsftpd/userconfig/
修改/etc/pam.d/vsftpd
文件
注释auth required pam_shells.so
行
- 若不注释,则只有通过
pam_shells.so
库文件用户shell有效性(在/etc/shells
中)的用户才可以登录,而我们一会儿创建的client用户是不可shell登录的
注释session required pam_loginuid.so
行
- pam_loginuid.so 模块用来设置 loginuid 过程属性,暂时不知道这个对vsftpd的影响
增加client用户(项目需求,观众可随意)
useradd client -M -s /usr/sbin/nologin
设定client用户的访问目录,配置文件为cat /etc/vsftpd/userconfig/client
(需要自己创建),内容如下
local_root=/var/ftp/xxx/
修改client用户的家目录
vim /etc/passwd
修改该文件的client行为client:x:1000:1000::/var/ftp/xxx/:/usr/sbin/nologin
,其中1000:1000为用户id和用户组id,与上面的值不冲突即可
修改/var/ftp/xxx/
目录的属主和属组
chown -R client:client /var/ftp/xxx/
启动vsftpd服务
systemctl start vsftpd
若访问异常,可查看/var/log/xferlog
文件来进行排查