FTP(file transfer protocol)
=====
网络文件共享的几种方式
HTTP NFS(unix like) SAMBA FTP
vsftpd (Very Secure FTP)
ftp需要两个端口
21:命令端口
20:数据端口
是一种跨平台的文件传输工具。
ftp有两种传输模式
1、主动模式
服务器的端口:21,20
2、被动模式
服务器的端口:21,随机端口
ftp主动模式和被动模式的区别:
主动模式:
wKiom1MBZmvT0RQLAACb4ayUWPc892.jpg
主动模式的过程:
任何端口到FTP服务器的21端口(客户端初始化的连接 S<-C)
FTP服务器的21端口到大于1023的端口(服务器响应客户端的控制端口S->C)
FTP服务器的20端口到大于1023的端口(服务器端初始化数据连接到客户端的数据端口 S->C)
大于1023端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口 S<-C)
当用户登录到ftp服务器的时候,匿名用户进入到/var/ftp,系统帐户进入到自己的家目录
ftp的被动模式
wKioL1MBZqbB3c-yAACcT96VVW4616.jpg
从任何端口到服务器的21端口(客户端初始化的连接 S<-C)
服务器的21端口到任何大于1023的端口(服务器响应到客户端的控制端口的连接 S->C)
从任何端口到服务器的大于1023端口(入;客户端初始化数据连接到服务器指定的任意端口 S<-C)
服务器的大于1023端口到远程的大于1023的端口(出;服务器发送 ACK响应和数据到客户端的数据端口 S->C)
软件安装:
#yum install vsftpd -y
服务启动:
#servicevsftpd start
#/etc/init.d/vsftpdstart
#chkconfigvsftpd on
# netstat -antulp | grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 28997/vsftpd
配置文件的位置:
/etc/vsftpd/vsftpd.conf
在编辑配置文件之前,最好备份一份,以防万一
ftp配置的目标:
1、搞定匿名帐户的访问
2、本地帐户
3、虚拟帐户
匿名用户访问:
#vi /etc/vsftpd/vsftpd.conf
12anonymous_enable=YES //允许匿名用户登录
//匿名用户指的是: ftpanonymous
28anon_upload_enable=YES //匿名用户可以上传
#cd /
# touch a
# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,50,241)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Oct 13 13:29 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (127,0,0,1,191,136)
150 Here comes the directory listing.
226 Directory send OK.
ftp> put a
local: a remote: a
227 Entering Passive Mode (127,0,0,1,192,96)
553 Could not create file.
ftp> quit
221 Goodbye.
允许匿名用户上传但是为什么上传不了文件呢?
还必须看目录有没有可写权限。
# chmod 777 /var/ftp/pub
# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,200,175)
150 Here comes the directory listing.
drwxrwxrwx 2 0 0 4096 Oct 13 13:29 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> put a
local: a remote: a
227 Entering Passive Mode (127,0,0,1,168,25)
150 Ok to send data.
226 File receive OK.
ftp> quit
221 Goodbye.
----------------------------------------------
本地帐户
指的就是服务器本身的拥有的帐号
vim/etc/vsftpd/vsftpd.conf
anonymouns_enable=NO
#anon_upload_enable=YES
15 local_enable=YES
//本地帐户认证方式启动
18 write_enable=YES
//表示开启写权限
22 local_umask=022
//表示上传文件的权限掩码
/etc/init.d/vsftpdrestart
ftplocalhost
ftp>cd /etc
ftp>pwd
/etc
那么这个时候,就可以下载u1拥有权限的任意文件。用户u1可以随意切换所在目录
解决用户瞎溜达的问题?
vim/etc/vsftpd/vsftpd.conf
96 chroot_list_enable=YES
98 chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
u1
u2
//表示这是一个关于chroot的黑名单,凡是在chroot_list中出现的用户名
//都会实现chroot的限制
限制所有的本地用户:
vim/etc/vsftpd/vsftpd.conf
chroot_local_user=YES
限制用户chroot的白名单设置:
vim/etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
//chroot_list文件中,列出不进行chroot限制的用户列表
ftp
虚拟帐户
具体实现:
1.通过创建本地数据库实现虚拟用户
#yum install db4-utils -y
创建一个用于映射虚拟用户的真实用户:
#useradd -d /var/ftp/vuserdir -s /sbin/nlogin vuser
2.修改配置文件:
#vim/etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
3.生成虚拟用户文件
#vim/etc/vsftpd/vftpuser.txt
neo
123
mike
456
4.生成虚拟用户数据文件
#db_load -T -t hash -f /etc/vsftpd/vftpuser.txt/etc/vsftpd/vftpuser.db
#chmod600 /etc/vsftpd/vftpuser.db
5.创建一个新的pam认证程序
vim/etc/pam.d/vsftpd1
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
#vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd1
/etc/init.d/vsftpdrestart
登录之后,出现这样的问题:
226Transfer done (but failed to open directory).
修改配置文件:
vim/etc/vsftpd/vsftpd.conf
anon_world_readable_only=NO
额外的ftp配置:
vim/etc/vsftpd/vsftpd.conf
ftpd_banner=Welcometo uplooking ftp service
anon_max_rate=100 (单位是字节)
max_clients=1
deny_file={*.ext,*.dll}
关于用户访问控制的两个文件:
user_list
ftpusers