环境
centos 7
你也许会用到的基础指令看这里:CENTOS 一些常用的指令
安装vsftp
yum -y install vsftpd
打开、关闭、查看状态、开机启动
systemctl start vsftpd.service
systemctl stop vsftpd.service
systemctl status vsftpd.service
systemctl enable vsftpd.service
如果只是用sftp方式使用root账户登录上传下载文件,这个就够用了!客服端选择连接的时候使用 SFTP(FTP OVER SSH),端口号22
简易配置使用FTP登录
VSFTP 配置文件地址:
vim /etc/vsftpd/vsftpd.conf
基础设置
pam_service_name=vsftpd
tcp_wrappers=YES
listen_port=21
write_enable=YES
防火墙放行21端口
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --reload
开启pasv
如果你想在浏览中也能访问ftp,但是又不想麻烦的设置浏览器,那么可以开启 vsftp的被动(pasv)模式:
pasv_enable=YES
pasv_max_port=30000
pasv_min_port=30000
30000这个端口选用你自己的没有被占用的端口就行,你也可以修改min和max多设置几个端口,目前端口设置多少对vsftp有什么影响我也不是很清楚,然后防火墙放行你添加的端口
firewall-cmd --zone=public --add-port=30000/tcp --permanent
firewall-cmd --reload
先期准备
我们这里假定使用条件是,普通用户登录进入默认目录为:/usr/local/ftp;匿名用户默认目录为:/usr/local/ftp/share;这个目录根据自己的需求设定
#创建一个 ftp目录,你可以用自己的路径
mkdir /usr/local/ftp
#修改任何人可以都可以读写权限
chmod -R a=rwx /usr/local/ftp
#查看一下是不是都具有了读写权限
getfacl /usr/local/ftp
#创建一个匿名用户使用的目录,你可以用自己的目录
mkdir /usr/local/ftp/share
匿名用户登录配置
修改vsftp配置文件,首先保证
#允许匿名登录,设置NO表示不允许匿名登录
anonymous_enable=YES
然后添加
#设置匿名用户的基本目录
anon_root= /usr/local/ftp/share
#允许匿名用户上传
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root= /usr/local/ftp/share ,这个是设置匿名用户的根目录,你可以使用你自己的
这个设置是允许匿名用户上传文件,但是一般情况下我们都不允许匿名用户上传,只能查看和下载,禁止的方法如下:
修改上面配置中的部分内容如下:
#不允许匿名用户上传
anon_upload_enable=NO
anon_mkdir_write_enable=NO
但是修改了之后,由于vsftp要检查chroot权限,所以我们这里要修改一下匿名用户主目录的权限,取消他的写权限,如果不取消会出现:
vsftpd: refusing to run with writable root inside chroot()
错误,导致不能连接
默认匿名用户的用户名为ftp,如果你修改了请在下面修改为你修改后默认的用户名
#修改目录的所有者为ftp
chown -R ftp /usr/local/ftp/share
#禁用文件所有(ftp)的写权限
chmod -R u-x /usr/local/ftp/share
# ftp :为你的匿名用户的统一id,也是vsftp默认的
#/usr/local/ftp/share :上面的配置中 anon_root= /usr/local/ftp/share 这一项中你设置的匿名用户的主目录
本地用户登录配置
怎么创建一个只能登录FTP的用户
我们这里新建一个测试用户:ftptest,并把他放在ftp组里面,且不能让他直接登录系统,可以登录FTP
#添加一个用户
useradd -g ftp -s /sbin/nologin ftptest
#设置密码 为 123456
echo "123456" | passwd --stdin ftptest
有的系统没有 /sbin/nologin shell那么修改vim /etc/shells 添加如下:
/sbin/nologin
配置
修改配置文件 /etc/vsftpd/vsftpd.conf,增加如下,先添加 然后按照后面的说明,根据你自己的需求修改
#开启userlist的限制本地用户功能
userlist_enable=YES
#YES 表示在user_list中的用户不能登录,NO表示只允许在user_list中的用户才能登录
userlist_deny=YES
#允许用户对主目录拥有写权限,否则就只能在系统中把主目录的写权限去掉
allow_writeable_chroot=YES
#设置本地用户登录后的默认目录
local_root=/usr/local/ftp
#限制本地用户只能访问配置的默认目录下的内容,只有在chroot_list中的用户才能访问默认目录以外的内容
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
用户限制说明
vsftp下有2个用户列表:
1、/etc/vsftpd/ftpusers :凡是在这个目录中的用户 不论什么情况下都不能登录FTP
如果你想让在系统中的某个用户(如:root)登录FTP那么首先vim /etc/vsftpd/ftpusers 注释掉root。
2、/etc/vsftpd/user_list :根据以上的配置文件来确定是否可以登录FTP,有效配置为如下:
#开启userlist的限制本地用户功能
userlist_enable=YES
#YES 表示在user_list中的用户不能登录,NO表示只允许在user_list中的用户才能登录
userlist_deny=YES
这里分情况说明:
-
userlist_enable=NO :不开启/etc/vsftpd/user_list 的用户检测功能,任何合法用户都可以登录(在/etc/vsftpd/ftpusers中的用户除外)
-
userlist_enable=YES :开启/etc/vsftpd/user_list 的用户检测功能,根据 userlist_deny 的配置来确定,具体看配置上的注释
用户主目录限制配置说明
#限制本地用户只能访问配置的默认目录下的内容,只有在chroot_list中的用户才能访问默认目录以外的内容
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user : NO (默认值)下面两项配置无效,所有用户都可以访问local_root=/usr/local/ftp 配置的之外的目录(可以访问整个服务器上的所有文件),即这个配置只是用户登录后的默认的所在目录,没有其他限制作用。
chroot_local_user : YES 限制所有用户只能访问设定的主目录,是否有例外根据后面2项配置确定:
-
chroot_list_enable : NO (默认)不启用例外
-
chroot_list_enable : YES,在chroot_list_file=/etc/vsftpd/chroot_list 配置文件中列出的用户例外,可以访问其他目录
虚拟用户登录配置
新建一个虚拟用户适用的本地用户,名称可以自己定,我这里使用ftpviruser
useradd -g ftp -s /bin/false ftpviruser
新建一个用于存放虚拟用户权限的目录,路径可以自己定
mkdir /etc/vsftpd/virusers
修改 主配置 /etc/vsftpd/vsftpd.conf,添加如下:
#启用虚拟用户
guest_enable=YES
#刚才建立的用于虚拟用户的系统用户
guest_username=ftpviruser
#设置刚才建立的存放虚拟用户权限的目录
user_config_dir=/etc/vsftpd/virusers
增加虚拟用户的用户列表,名字可以自己定义,我这里用的是viruser_list.并增加用户,用户ID和密码分为2行,依次增加,如下:
vim /etc/vsftpd/viruser_list
内容举例如下,实际根据自己的用户添加:
ftpvir1
123456
ftpvir2
123456
ftpvir4
123456
生成用户数据库文件,并修改权限。以后每次修改viruser_list的内容后都需要 生成数据库文件(不需要再修改权限)
db_load -T -t hash -f /etc/vsftpd/viruser_list /etc/vsftpd/viruser_list.db
chmod 700 /etc/vsftpd/viruser_list.db
#以上执行时如果没有db_load命令 则安装
yum -y install libdb-utils
修改PAM验证文件
vim /etc/pam.d/vsftpd
在前面增加如下内容(这样可以保证本地用户也可以登录,否则本地用户则不能登录)
auth sufficient pam_userdb.so db=/etc/vsftpd/viruser_list
account sufficient pam_userdb.so db=/etc/vsftpd/viruser_list
示例如下
增加用户权限文件,这里仅以一个用户为例,虚拟用户只能访问设置的目录:
vim /etc/vsftpd/virusers/ftpvir1
#允许下载
anon_world_readable_only=NO
write_enable=YES
#默认目录,需要把目录的权限赋给前面创建的系统用户,我这里是ftpviruser,具体什么权限根据你的需求来,不知道就777
local_root= /usr/local/ftp
#是否允许上传
anon_upload_enable=YES
#是否允许创建目录
anon_mkdir_write_enable=YES
#是否允许其他写操作,如删除,重命名等
anon_other_write_enable=YES
重启VSFTP
以上有不知道命令可以查看:CENTOS 一些常用的指令