FTP扫盲
-
FTP连接方式
控制连接:标准端口为21,用于发送FTP命令信息 数据连接:标准端口为20,用于上传、下载数据
-
数据连接的建立类型:
主动模式:服务端从20端口主动向客户端发起连接 被动模式:服务端再指定范围内的某个端口被动等待客户端发起连接
-
FTP传输模式
文本模式:ASCII模式,以文本序列传输数据 二进制模式:Binary模式,以二进制序列传输数据
-
FTP用户的类型
匿名用户:anonymous或ftp 本地用户:账号名称、密码等信息保存再passwd、shadow文件中 虚拟用户:独立使用的账号/密码数据文件
-
常用的全局配置项
listen=YES #是否以独立运行的方式监听服务
listen_address=192.222.0.10 #设置监听的IP地址
listen_port=21 #设置监听FTP服务的端口号
nopriv_user=ftp #指定vsftpd服务的运行帐户,不指定时使用ftp
write_enable=YES #是否启用写入权限
#进入每个目录是显示欢迎信息,在每个目录下建立.message文件在里面写欢迎信息
dirmessage_enable=YES
xferlog_enable=YES #上传/下载文件时记录日志
xferlog_file=/var/log/vsftpd.log #设置日志文件
xferlog_std_format=YES #使用标准文件日志
idle_session_timeout=600 #会话超时,客户端连接到ftp但未操作的超时时间
data_connection_timeout=120 #数据传输超时(传输过程中卡顿会导致传输超时)
connect_from_port_20=YES #是否使用20端口传输数据(是否使用主动模式)
#是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求
async_abor_enable=YES
ascii_upload_enable=YES #是否允许上传二进制文件
ascii_download_enable=YES #是否允许下载二进制文件
chown_uploads=YES、chown_username=xxx #修改匿名用户上传文件的拥有者
download_enable=YES #是否允许下载文件
#此选项被激活后,vsftpd将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入密码之前就被禁止了。即该用户名输入后,vsftpd查到该用户名在列表中,vsftpd就直接禁止掉该用户,不会再进行询问密码等后续步聚
userlist_enable=YES
#决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入密码的提示。NO,只允许在文件中的用户登录FTP服务器
userlist_deny=YES
max_clients=0 #限制并发客户端连接数
max_per_ip=0 #限制同一IP地址的并发连接数
pam_service_name=vsftpd #使用pam模块控制,vsftpd文件在/etc/pam.d目录下
guest_enable=YES #启用用户映射功能
guest_username=virtual:指定映射的系统用户名称
virtual_use_local_privs=YES #虚拟用户和本地用户有相同的权限
virtual_use_local_privs=NO #虚拟用户和匿名用户有相同的权限,默认是NO
#2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。可以在vsftpd的配置文件中增加该命令
allow_writeable_chroot=YES
anon_other_write_enable=YES #值为YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。
- 常用的匿名FTP配置项
anonymous_enable=YES #启用匿名访问
anon_umask=022 #匿名用户所上传文件的权限掩码
anon_root=/var/ftp #匿名用户的FTP根目录
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_other_write_enable=YES #开放匿名用户其他写入权
anon_max_rate=0 #匿名用户的最大传输速度,单位是Byts/s
- 常用的本地用户FTP配置项
local_enable=YES #是否启用本地系统用户
local_umask=022 #本地用户所上传文件的权限掩码
local_root=/var/ftp #设置本地用户的FTP根目录
chroot_local_user=YES #是否将本地用户禁锢在家目录
chroot_list_enable=YES、chroot_list_file=/etc/vsftpd/chroot_list #指定不能离开家目录的用户,将用户名一个一行写在/etc/vsftpd/chroot_list文件里,使用此方法时必须chroot_local_user=NO
local_max_rate=0 #本地用户的最大传输速度,单位是Byts/s
local_root=/home/ftp #所有用户的根目录,对匿名用户无效
调整上传目录的属主或权限
确保匿名用户ftp有权写入文件:chown ftp /var/ftp/pub
centos7.6环境下vsftp安装
- 安装好系统后,vi /etc/selinux/config,关闭selinux。
- 随后systemctl disable firewalld,关闭防火墙,并重启系统
- 重新进入系统后,执行yum install -y vsftpd安装FTP服务
- systemctl enable vsftpd设置开机启动,systemctl start vsftpd启动FTP服务。
- 打开配置文件:
vi /etc/vsftpd/vsftpd.conf
,关闭匿名登录。
- 允许虚拟用户上传等写入操作
- 允许ascii方式上传和下载
- 建立虚拟FTP用户的账号数据库文件(奇数行为账号,偶数行为密码),
vi /etc/vsftpd/vusers.list
- 通过db_load工具创建出Berkeley DB格式的数据库文件:
db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vusers.db
并查看文件:file /etc/vsftpd/vusers.db
- 把以vusers开头的文件的权限设置为600,以提高虚拟用户账号文件的安全性:
chmod 600 /etc/vsftpd/vusers.*
- 创建用户virtual并设置为不允许登陆系统并定义该用户的home目录:
useradd -d /home/ftproot -s /sbin/nologin virtual
保证其他用户可以访问,给予rwxr-xr-x权限:chmod 755 /home/ftproot/
- 建立支持虚拟用户的PAM认证文件:
vi /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
13. vi /etc/vsftpd/vsftpd.conf
,在vsftpd.conf文件中添加支持配置
pam_service_name=vsftpd.vu
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
reverse_lookup_enable=NO
virtual_use_local_privs=YES
14. 为个别虚拟用户建立独立的配置文件 在vsftpd.conf文件中添加用户配置目录支持
user_config_dir=/etc/vsftpd/vusers_dir
mkdir /etc/vsftpd/vusers_dir
cd /etc/vsftpd/vusers_dir
touch cooper
vi langers
anon_upload_enable=YES
anon_mkdir_write_enable=YES
- 重新加载vsftpd配置
systemctl restart vsftpd
- 在服务器上用ftp命令登陆,会提示详细的错误信息,而在客户端则无错误日志。切记切记。
ftp>ftp 127.0.0.1
附录
- virtual_use_local_privs参数
virtual_use_local_privs=YES #虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO #虚拟用户和匿名用户有相同的权限,默认是NO。
当virtual_use_local_privs=YES,write_enable=YES #虚拟用户具有写权限(上传、下载、删除、重命名)。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YESanon_upload_enable=YES #虚拟用户不能浏览目录,只能上传文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=NO #虚拟用户只能下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=YES #虚拟用户只能上传和下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_mkdir_write_enable=YES #虚拟用户只能下载文件和创建文件夹,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_other_write_enable=YES #虚拟用户只能下载、删除和重命名文件,无其他权限。
- 建立各个虚拟用户自身的配置文件
cd /etc/vsftpd/vuser_dir/
- 在/etc/vsftpd/user_conf目录中创建以用户名命名的配置文件admin、web、download、upload
- “admin”文件内容如下:
local_root=/home/ftp #默认就是/var/ftproot,可不写
anon_world_readable_only=NO
write_enable=YES #写权限
anon_mkdir_write_enable=YES #新建目录权限
anon_upload_enable=YES #上传权限
anon_other_write_enable=YES #删除/重命名的权限
- “web”文件内容如下:
local_root=/var/www
anon_world_readable_only=NO
anon_umask=022 #由于web页面的特殊性,故单独设置上传文件权限为755,此掩码值可根据具体情况更改
write_enable=YES #写权限
anon_mkdir_write_enable=YES #新建目录权限
anon_upload_enable=YES #上传权限
anon_other_write_enable=YES #删除/重命名的权限
- “download”文件内容如下:
local_root=/home/ftp #当然,你高兴也可以设置成其它,但要注意virtual用户对此目录的权限)
anon_world_readable_only=NO #使download用户的能下载,也只能下载;写成YES,将不能列出文件和目录
#下面这句可以不写,不写时同样不能新建文件夹(若需要可以NO--> YES)
anon_mkdir_write_enable=NO
- “upload”文件内容如下:
local_root=/home/ftp #当然,你高兴也可以设置成其它,但要注意virtual用户对此目录的权限
virtual_use_local_privs=NO #虚拟用户和匿名用户有相同的权限,默认是NO;本地用户是YES
anon_world_readable_only=NO #写成YES,将不能列出文件和目录
write_enable=YES
anon_upload_enable=YES