FTP协议:文件传输协议(File Transfer Protocol)
FTP模型
控制连接(端口号21)
数据连接(端口号20)
主动模式
被动模式
分为控制连接(端口号21)和数据连接(端口号20)
/usr/lib/system/vsftpd.service
/usr/sbin/vsftpd
21(ftp),20(ftp-data)
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/logrotate.d/vsftpd
参数 | 作用 |
---|---|
listen=NO | 是否以独立运行的方式监听服务 |
listen_address=ip地址 | 设置要监听的IP地址 |
listen_port=21 | 设置FTP服务的监听端口 |
download_enable=YES | 是否允许下载文件 |
userlist_enable=YES | 设置用户列表为“允许” |
userlist_deny=YES | 设置用户列表为“禁止” |
max_clients=0 | 最大客户端连接数,0为不限制 |
max_per_ip=0 | 同一IP地址的最大连接数,0为不限制 |
anonymous_enable=YES | 是否允许匿名访问 |
anon_upload_enable=YES | 是否允许匿名用户上传文件 |
anon_umask | 匿名用户上传文件的umask |
anon_root=/var/ftp | 匿名用户的ftp根目录 |
anon_mkdir_write_enable=YES | 是否允许匿名用户创建目录 |
anon_other_write_enable=YES | 是否开放匿名用户的其他写入权限(重命名、删除等) |
anon_max_rate=0 | 匿名用户的最大传输速率,0为不限制 |
local_enable=yes | 是否允许本地用户登录 |
local_umask=022 | 本地用户上传文件的umask值 |
local_root=/var/ftp | 本地用户的ftp根目录 |
chroot_local_user=YES | 是否将用户权限禁锢在ftp目录,以确保安全 |
local_max_rate=0 | 本地用户的最大传输速率,0为不限制 |
安装vsftp
[root@localhost ~]#yum -y install vsftpd
准备分发的文件
[root@localhost ~]#touch /var/ftp/abc.txt
启动服务
[root@localhost ~]#systemctl start vsftpd
[root@localhost ~]#systemctl enable vsftpd
关闭防火墙
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
Linux中
安装的都是客户端连接工具
[root@localhost ~]#yum install ftp -y
[root@localhost ~]#ftp <IP地址>
username:.......anonymous
password:.......
[root@localhost ~]#yum install lftp -y
[root@localhost ~]#lftp <IP地址>
windows中
第一种
ftp://IP地址/
,这样访问的是ftp的根位置,如果需要访问相关目录可以输入ftp://IP地址/目录/文件名
第二种
ftp <IP地址>
即可访问[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=Yes
anon_mkdir_write_enable=Yes
anon_other_write_enable=Yes
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost ~]# systemctl restart vsftpd
linux的目录权限会限制我们不允许往里新建文件,但是如果直接添加目录的w权限会导致触发他的安全判断问题,所以就把ftp里的pub目录的属主属组改成ftp解决,并且添加写权限
chown ftp:ftp /var/ftp/pub
chmod 777 /var/ftp/pub
现在就可以往里写文件了
使用本地用户(在linux服务端下创建的可以登录的用户)登录成功时位置在家目录的位置
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
注意:出现在/etc/vsftpd/ftpuser /etc/vsftpd/user_list这两个文件 中的内容将会被定义为黑名单
1、创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# vi vuser.list
eagle
centos
cisco
centos
huawei
centos
2、使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件
3、降低数据库文件的权限(避免其他人看到数据库文件的内容)
4、把原始的明文信息文件删除。
[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@localhost vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@localhost vsftpd]# chmod 600 vuser.db
[root@localhost vsftpd]# rm -f vuser.list
5、创建一个本地用户,用来做虚拟用户在本地的代理,为了安全起见,禁止这个本 地用户登录
[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@localhost vsftpd]# ls -ld /var/ftproot/
drwx------. 2 virtual virtual 59 8月 10 23:04 /var/ftproot/
[root@localhost vsftpd]# chmod -Rf 777 /var/ftproot/
6、新建一个用于虚拟用户认证的PAM文件vsftpd.vu,利用pam模块(linux内核的一个认证模块)做一个认证
[root@localhost vsftpd]# vi /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
7、配置文件
[root@localhost vsftpd]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
[root@localhost vusers_dir]# systemctl restart vsftpd
用刚刚创建好的用户登录,但是只能登录,不能写文件,想要给权限,这个用户的权限是被匿名用户权限控制的
8、如果想要针对不同的用户设置不同的权限
[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir/
[root@localhost vsftpd]# cd /etc/vsftpd/vusers_dir/
[root@localhost vusers_dir]# touch huawei
[root@localhost vusers_dir]# vi eagle
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@localhost vusers_dir]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu #记得修改这里为我们自己的认证文件
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusers_dir #告诉主配置文件,我们下面还有配置
[root@localhost vusers_dir]# systemctl restart vsftpd
huawei没有权限
eagle有权限