一.ftp(文件传输协议)介绍
1、FTP连接及传输模式
FTP服务器默认使用TCP协议的20、21端口与客户机进行通信。如:
20端口用于建立数据连接。并传输文件数据;
21端口用于建立控制连接,并传输FTP控制命令。
2.ftp的两种工作模式
(1)主动模式(PORT):当客户端主动连接时,客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接收连接,建立一条命令链路。当需要传送数据时,客户端以PORT命令告知服务器”我打开了某端口(>1024),你来连接我“,于是服务器从20端口向客户端的该端口发送请求并建立数据连接。
(2)被动模式(PASV):当客户端被动连接时,客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接收连接,建立一条命令链路。当需要传输数据时,服务器告知客户端”我打开了某端口,你来连接我“。于是客户端向服务器的该端口发送请求并建立数据连接。
3.FTP用户服务类型:
(1)匿名用户:
anonymous或ftp
(2)本地用户:
账号名称、密码等信息保存在passwd、shadow文件中
(3)虚拟用户:
使用独立的账号和密码数据文
4.ftp的主配置文件
listen=YSE 是否监听服务
listen_address=0.0.0.0 FTP服务的IP地址
listen_port=21 FTP服务的端口号
write_enable=YES 写入权限
download_enable=YES 是否允许下载
dirmessage_enable=YSE 用户切换进入目录是显示.message(如果存在)文件的内容
xferlog_enable=YES 启用xferlog日志,默认记录到“/var/log/xferlog”
xferlog_std_format=YES 启用xferlog标准日志格式
connect_from_port_20=YES 允许服务器主动模式(从20端口建立数据连接)
pasv_enable=YES 允许被动模式连接
pasv_max_port=24600 服务器最大端口
pasv_min_port=24500 服务器最小端口
pam_service_name=vsftpd 用于用户认证的PAM文件位置
userlist_enable=YES suer_list用户类表文件
userlist_deny=YES ser_list列表文件中的用户账号
max_clients=0 最多允许多少个客户端同时连接(0无限制)
max_per_ip=0 最多允许多少个并发连接(0无限制)
tcp_wrappers=YES 是否启用TCP_Wrappers主机访问控制
二.具体配置
(1)匿名用户
@1.ftp服务器默认就支持匿名用户,下载好包,启动服务就可以了
[root@tx1 ~]# yum install -y vsftpd
[root@tx1 ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES启用匿名访问
local_umask=022 匿名用户上传文件权限的掩码
anon_upload_enable=YES 允许上传文件
anon_mkdir_write_enable=YES 允许创建目录
[root@tx1 ~]# service vsftpd restart
Shutting down vsftpd: [FAILED]
Starting vsftpd for vsftpd: [ OK ]
复制一些文件供用户下载
[root@tx1 default]# cp /etc/passwd /var/ftp/
[root@tx1 default]# cp /etc/group /var/ftp/
[root@tx1 default]# cp /etc/fstab /var/ftp/
@2.客户端测试
[root@tx2 ~]# ftp 192.168.8.70
Connected to 192.168.8.70.
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 (192.168.8.70: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 (192,168,8,70,33,125)
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 608 Jul 23 02:50 fstab
-rw-r--r-- 1 0 0 631 Jul 23 02:50 group
-rw-r--r-- 1 0 0 1595 Jul 23 02:50 passwd
drwxr-xr-x 2 0 0 4096 Dec 05 2011 pub
226 Directory send OK.
客户端下载
ftp> ls
227 Entering Passive Mode (192,168,8,70,51,26)
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 608 Jul 23 02:50 fstab
-rw-r--r-- 1 0 0 631 Jul 23 02:50 group
-rw-r--r-- 1 0 0 1595 Jul 23 02:50 passwd
drwxr-xr-x 2 0 0 4096 Dec 05 2011 pub
226 Directory send OK.
ftp> lcd ///改变本地目录
Local directory now /
ftp> get fstab//下载文件
local: fstab remote: fstab
227 Entering Passive Mode (192,168,8,70,35,55)
150 Opening BINARY mode data connection for fstab (608 bytes).
226 File send OK.
608 bytes received in 0.00014 seconds (4.2e+03 Kbytes/s)
ftp> quit//t退出
221 Goodbye.
[root@tx2 /]# ls//fstab文件已下载
bin dev fstab lib media mnt opt root selinux sys tmp var
boot etc home lost+found misc net proc sbin srv tftpboot usr
客户端上传
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,8,70,148,26)
150 Here comes the directory listing.
226 Directory send OK.
ftp> put fstab
local: fstab remote: fstab
227 Entering Passive Mode (192,168,8,70,180,30)
553 Could not create file.//错误!!!
解决办法
服务端
[root@tx1 ~]# cd /var/ftp/
[root@tx1 ftp]# ll
total 16
-rw-r--r-- 1 root root 608 Jul 23 10:50 fstab
-rw-r--r-- 1 root root 631 Jul 23 10:50 group
-rw-r--r-- 1 root root 1595 Jul 23 10:50 passwd
drwxr-xr-x 2 root root 4096 Dec 5 2011 pub
[root@tx1 ftp]# chmod 757 pub/
客户端测试
ftp> cd pub
250 Directory successfully changed.
ftp> put fstab
local: fstab remote: fstab
227 Entering Passive Mode (192,168,8,70,32,246)
553 Could not create file.
ftp> put fstab
local: fstab remote: fstab
227 Entering Passive Mode (192,168,8,70,188,161)
150 Ok to send data.
226 File receive OK.
608 bytes sent in 9.8e-05 seconds (6.1e+03 Kbytes/s)
ftp> lcd /etc
Local directory now /etc
ftp> put inittab
local: inittab remote: inittab
227 Entering Passive Mode (192,168,8,70,187,201)
150 Ok to send data.
226 File receive OK.
1666 bytes sent in 0.00036 seconds (4.5e+03 Kbytes/s)
注:不能上传和以后文件名相同的文件!!!
(2)系统用户
@1.服务器添加用户:
[root@tx1 ~]# useradd f1
[root@tx1 ~]# passwd f1
@2.配置文件
12#anonymous_enable=YES启用匿名访问要注释掉
15 local_enable=YES
18 write_enable=YES
22 local_umask=022
[root@tx1 ~]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
下载:使用系统用户,下载的时候,只要服务器上有文件就可以;下载文件之后,保存在连接之前所在的目录,如果使用lcd切换之后,保存在切换后的目录里。
上传:上传的时候,不需要作任何修改,因为我是向自己的家目录里面传输文件
(和上面基本上相同,这里就不做演示了.................)
问题:使用f1这种用户连接了服务器之后,能够在服务器上随意的切换目录,对服务器来说,这样不安全!!!
解决:让f1这种用户连接之后,只在自己的家目录里面待着。禁锢普通用户
[root@tx1 ~]# vim /etc/vsftpd/vsftpd.conf
96 chroot_list_enable=YES
98 chroot_list_file=/etc/vsftpd/chroot_list 保存着被禁锢的用户
[root@tx1 vsftpd]# echo f1 > chroot_list (写用户名的时候要一行一个)
三.虚拟用户
(1) 在vsftpd服务器中,使用虚拟用户的主要好处在于,可以将登录的账号与系统登录的账号区分开来,用户名,密码都不相同,从而进一步增强了FTP服务器的安全性。另外虚拟用户都具有独立的配置选项。可以灵活的控制对ftp服务器的访问。可以控制用户读的权限,写权限,下载,上传的权限
(2)具体配置
@1.创建一个保存虚拟用户信息的文件:
[root@tx1 vsftpd]# vim login.txt
v1 用户名
123 密码
@2.把这个文件转换成数据库文件
[root@tx1 vsftpd]# yum install -y db4-utils
[root@tx1 vsftpd]# db_load -T -t hash -f login.txt vsftpd_login.db
-T转换成数据库格式
-t hash 转换的格式-hash
-f指定原文件
@3.编写ftp虚拟用户需要的新的pam文件及配置文件
[root@tx1 vsftpd]# vim /etc/pam.d/vsftpd.v
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
[root@tx1 vsftpd]# vim vsftpd.conf
pam_service_name=vsftpd.v使用新的pam验证文件
guest_enable=YES支持虚拟用户
guest_username=vv使用的系统用户是vv
user_config_dir=/etc/vsftpd/vuser保存虚拟用户的配置文件的目录
[root@tx1 vsftpd]# mkdir vuser
[root@tx1 vsftpd]# cd vuser
[root@tx1 vuser]# vim v1
anon_world_readable_only=NO全局只读,能够浏览
anon_upload_enable=YES允许上传
anon_mkdir_write_enable=YES允许创建目录
anon_other_write_enable=YES允许修改文件名
local_root=/var/ftp/pub登录的目录
注:(在vsftpd服务中,虚拟用户被默认作为匿名用户进行处理以降低权限,因此对应的配置项通常以anon_开头。)
[root@tx1 vuser]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
测试:
[root@tx2 ftp]# ftp 192.168.8.70
Connected to 192.168.8.70.
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 (192.168.8.70:root): v1
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 (192,168,8,70,126,242)
150 Here comes the directory listing.
-rw------- 1 14 50 608 Jul 23 03:39 fstab
-rw------- 1 14 50 1666 Jul 23 03:39 inittab
226 Directory send OK.
(3)访问控制
@1.ftpusers
要把配置文件恢复到配置虚拟用户之前的状态 这个文件,只要用户写进去就不允许访问ftp。一行一个用户名
@2.user_list
[root@tx1 vsftpd]# vim vsftpd.conf
userlist_enable=YES
这个文件,只要用户写进去就不允许访问ftp。一行一个用户名
userlist_enable=NO 取消限制
@3.tcp_wrappers=YES 支持tcp_wrappers 访问控制
/etc/hosts.allow
/etc/hosts.deny
[root@tx1 vsftpd]# vim /etc/hosts.deny
vsftpd:192.168.8.20 把你要拒绝访问的客户端ip或网段写进去就行了。
四.lftp命令
1.. 登陆:lftp -u test 192.168.0.1 -p 2121
-u 登陆用的用户名
-p ftp的端口,标准21端口可以省略
get test.txt 下载单个文件
mget *.txt 下载多个文件
put test.txt 上传单个文件
mput *.txt 上传多个文件
mirror test 下载目录
mirror -R test 上传目录
pget -n 10 test.bin 多线程下载文件
2. 匿名用户:
(1)lftp
[root@tx2 vsftpd]# lftp 192.168.8.70
支持tab补齐
(2)mget * 同时下载多个文件
ftp> prompt off 关掉提示
ftp> mget *
@1.匿名用户:
[root@tx2 vsftpd]# wget ftp://172.16.1.2:21/* --ftp-user=ftp -r
@2.普通用户:
[root@mail vsftpd]# wget ftp://172.16.1.2:21/* --ftp-user=f1 --ftp-password=123 -r
在windows下也可以使用ftp传输文件。
@3.在windows下也可以使用ftp传输文件。
ftp://server_ip
转载于:https://blog.51cto.com/tanxin/1255527