LINUX之FTP服务

1.FTP的链接类型

控制链接(持续链接) -> TCP21(命令信道) -> 用户收发FTP命令linux

数据链接(按需链接) -> TCP20(数据信道) -> 用于上传下载数据数据库

 

2.FTP的工做模式

ftp模式分为主动模式(active mode)和被动模式(passive mode),ftp是tcp链接,因此要进行三次握手。vim

@See安全

1.1active和passive模式的配置:

在命令行输入vim /etc/vsftpd/vsftpd.conf:服务器

  • active mode:app

    pasv_enable=NO     (passive模式关闭)
    pasv_min_port=3000
    pasv_max_port=4000
    port_enable=YES   (active模式开启)
    connect_from_port_20=YES (即默认状况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。)
  • passive mode:ssh

    pasv_enable=YES
    pasv_min_port=30000  
    pasv_max_port=40000

    设定在PASV模式下,创建数据传输所可使用port范围的下界和上界,0 表示任意(1024 – 65535端口)。默认值为0。把端口范围设在比较高的一段范围内,好比30000 -40000。

在linux上,若是不配置pasv_enable=NO,默认是passive模式。(之前在镇江农商行,遇到文件传输过不去的问题,后来才发现为被动模式,但配置的为NO,改为YES便可。tcp

  • service vsftpd restart 重启ftp服务; ui

    • 经过命令行链接ftp server:加密

                   active mode: ftp -A 192.168.180.106

                   active模式链接ftp server时必定要加 -A

                   passive mode: 能够直接使用 ftp 192.168.180.106

1.2 active 模式:

 在active模式下,以下图抓的包中,在命令链接部分(ftp类型的包),client端使用的端口是36439,这个端口是大于1024的任意端口,ftp server端用的端口是21:

以下图,在active模式下,要传输数据时,ftp client经过第23个包经过21号端口告诉server数据传输联系端口43187(大于1024的任意端口),并进行listen,server端用端口20主动和client端43187创建数据传输通道,并传输数据(第30,32,34个包)。这里是server知道了client端的数据通道监听端口后,主动创建了数据传输通道,因此是主动模式。

 

在active模式下,数据传输部分(FTP-DATA类型的包),ftp-server端用的端口是20,默认状况下,FTP PORT主动模式进行数据传输时使用20端口,ftp-client端用的是43187端口,是上一步client发给server的数据传输监听端口。

总结:active 模式

1.3 passive 模式:

 在passive 模式下,以下图所抓的包中,在命令部分(ftp类型的包),client端使用的端口是36434,这个端口是大于1024的任意端口,ftp server用的端口是21.

在passive模式下,以下图的第28个包,是由client端发起PASV(passive mode)的数据传输通道链接请求,因此为被动模式。

而在passive模式的数据传输部分(FTP-DATA类型的包),ftp-server端用的端口是3542,这个端口是在/etc/vsftpd/vsftpd.conf文件中passive模式下设置的端口范围(3000-4000,能够本身设置)中任意选的一个端口,ftp-client端用的是53001端口,是大于1024的任意一个端口。

总结:

passive模式

3.FTP的传输模式

Binary模式: 不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等。

ASCII模式:进行文本传输时,自动适应目标操做系统的结束符,如回车符等

LINUX的红帽发行版中VSFTP默认采用的是Binary模式,这样能保证绝大多数文件传输后能正常使用

切换方式:

4.FTP的安装

 1 [root@localhost etc]# yum -y install vsftpd ftp
 2 已加载插件:fastestmirror, langpacks
 3 Loading mirror speeds from cached hostfile
 4 epel/x86_64/metalink                                                                         | 6.7 kB  00:00:00
 5  * base: mirrors.zju.edu.cn
 6  * epel: my.fedora.ipserverone.com
 7  * extras: mirrors.163.com
 8  * updates: mirrors.163.com
 9 [root@localhost etc]# service vsftpd start
10 Redirecting to /bin/systemctl start vsftpd.service
11 [root@localhost etc]# netstat -antp
12 Active Internet connections (servers and established)
13 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
14 tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
15 tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      7421/X
16 tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      7737/dnsmasq
17 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      7099/sshd
18 tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      7100/cupsd
19 tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      7360/master
20 tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      18303/sshd: root@pt
21 tcp        0      0 192.168.180.106:22      192.168.180.1:51721     ESTABLISHED 18303/sshd: root@pt
22 tcp        0      0 192.168.180.106:22      192.168.180.1:51729     ESTABLISHED 18312/sshd: root@no
23 tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
24 tcp6       0      0 :::6000                 :::*                    LISTEN      7421/X
25 tcp6       0      0 :::21                   :::*                    LISTEN      25188/vsftpd
26 tcp6       0      0 :::22                   :::*                    LISTEN      7099/sshd
27 tcp6       0      0 ::1:631                 :::*                    LISTEN      7100/cupsd
28 tcp6       0      0 ::1:25                  :::*                    LISTEN      7360/master
29 tcp6       0      0 ::1:6010                :::*                    LISTEN      18303/sshd: root@pt

 


   

FTP的使用可使用?查询全部命令

 1 [root@localhost etc]# cd /var/ftp
 2 [root@localhost ftp]# ls
 3 pub
 4 [root@localhost ftp]# touch test.txt
 5 [root@localhost ftp]# cd
 6 [root@localhost ~]# ftp 192.168.180.106
 7 Connected to 192.168.180.106 (192.168.180.106).
 8 220 (vsFTPd 3.0.2)
 9 Name (192.168.180.106:root): ftp
10 331 Please specify the password.
11 Password:
12 230 Login successful.
13 Remote system type is UNIX.
14 Using binary mode to transfer files.
15 ftp> ?
16 Commands may be abbreviated.  Commands are:
17 18 !               debug           mdir            sendport        site
19 $               dir             mget            put             size
20 account         disconnect      mkdir           pwd             status
21 append          exit            mls             quit            struct
22 ascii           form            mode            quote           system
23 bell            get             modtime         recv            sunique
24 binary          glob            mput            reget           tenex
25 bye             hash            newer           rstatus         tick
26 case            help            nmap            rhelp           trace
27 cd              idle            nlist           rename          type
28 cdup            image           ntrans          reset           user
29 chmod           lcd             open            restart         umask
30 close           ls              prompt          rmdir           verbose
31 cr              macdef          passive         runique         ?
32 delete          mdelete         proxy           send
33 ftp>
34

 

5.匿名用户登陆

注:关闭防火墙和SELINUX

anonymous_enable=YES                          #启用匿名访问        
anon_umask=022                               #匿名用户上传文件的权限掩码(755,644)   anon_root=/var/ftp                           #FTP的根目录
anon_upload_enable=YES                       #容许上传文件                    
anon_mkdir_write_enable=YES                   #容许建立目录
anon_other_write_enable=YES                   #开放其余写入权
anon_max_rate=0                               #限制最大传输速率(0为不限速)

注:在客户端登陆后,默认状况下能够下载,不能上传

FTP服务器端

FTP客户端

    

  • 实现上传

    anonymous_enable=YES                          #启用匿名访问  
    须要FTP服务器端的上传目录要有足够的权限(演示:第一次权限不足,第二次能够)

  • 实现建立目录和文件其余操做

    anon_mkdir_write_enable=YES                   #容许建立目录
    anon_other_write_enable=YES                   #开放其余写入权
  • 实现文件下载

 

     
anon_umask=022                               #匿名用户上传文件的权限掩码(755)  
添加之后,就能够get了,拥有了r权限。

6.本地用户登陆 (如今项目用的这种)

local_enable=YES                 #是否启用本地系统用户
local_umask=022                 #本地用户所上传文件的权限掩码
(新建的目录 权限是755 ,文件的权限是 644)
local_root=/var/ftp             #设置本地用户的FTP根目录
chroot_local_user=YES           #是否将用户禁锢在主目录
local_max_rate=0                 #限制最大传输速率
userlist_enable=YES&userlist_deny=YES  
#禁止/etc/vsftpd/user_list 文件中出现的用户名登陆ftp
userlist_enable=YES&userlist_deny=NO
#仅容许/etc/vsftpd/user_list 文件中出现的用户名登陆ftp
配置文件:ftpusers
#禁止/etc/vsftpd/user_list 文件中出现的用户名登陆ftp,权限比User_list更高,及时生效
  • 建立的用户,不须要登陆操做系统,仅用来登陆VSFTP


[root@localhost ~]# useradd -s /sbin/nologin ftpuser
[root@localhost ~]# passwd ftpuser
更改用户 ftpuser 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
从新输入新的 密码:
passwd:全部的身份验证令牌已经成功更新。
[root@localhost ~]

建立的时候,若是想限制用户的家目录,能够这样建立

useradd -d /tz/ftp   -s /sbin/nologin dhftpuser
  • 将全部的用户禁锢在本身的家目录下(即不能随意切换路径)

    chroot_local_user=YES
  • 将部分用户禁锢在本身的家目录下

    chroot_list_enable=YES
    chroot_list=file=/etc/vsftpd/chroot_list

 

注:白名单使用的前提,要把chroot_local_user=YES开启,测了几遍发现这个问题

  • 配置文件:/etc/vsftpd/ftpusers

    全部写入此文件内的用户名都不容许登陆ftp,当即生效

  • 修改被动模式数据传输使用端口

    pasv_enable=YES
    pasv_min_port=30000
    pasv_max_port=35000

7.虚拟用户验证登陆 (之前项目这种)

 1 [root@localhost vsftpd]# vim vsftpd.user
 2 #奇数行为用户,偶数行为密码
 3 [root@localhost vsftpd]# db_load -T -t hash -f vsftpd.user vsftpd.db
 4 #将用户密码的存放文本转化数据库类型,并使用hash加密
 5 [root@localhost vsftpd]# ll
 6 total 40
 7 -rw-r--r-- 1 root root    13 May 26 01:03 chroot_list
 8 -rw------- 1 root root   125 Mar 22  2017 ftpusers
 9 -rw------- 1 root root   361 Mar 22  2017 user_list
10 -rw------- 1 root root  4638 May 26 01:09 vsftpd.conf
11 -rwxr--r-- 1 root root   338 Mar 22  2017 vsftpd_conf_migrate.sh
12 -rw-r--r-- 1 root root 12288 May 26 01:37 vsftpd.db
13 -rw-r--r-- 1 root root    33 May 26 01:36 vsftpd.user
14 [root@localhost vsftpd]# chmod 600 vsftpd.db
15 #修改文件权限为600,保证其安全性
16 [root@localhost wgr]# useradd -d /wgr/tz -s /sbin/nologin tzftpuser
17 #建立用户做为ftp的虚拟用户的映射用户
18  /wgr/tz这里的路径不要建,建立用户的时候会本身产生
19 20 [root@localhost wgr]# vim /etc/pam.d/vsftpd.pam
21 添加下面的内容
22 auth required pam_userdb.so db=/etc/vsftpd/vsftpd
23 account required pam_userdb.so db=/etc/vsftpd/vsftpd
24 修改
25 pam_service_name=vsftpd.pam
26 添加
27 guest_enable=YES
28 guest_username=tzftpuser
29 user_config_dir=/etc/vsftpd/dir

 

 

注:作虚拟用户配置文件设置时,将主配置文件中的自定义的匿名用户相关设置注释掉

anon_upload_enable=YES                        #容许上传文件
anon_mkdir_write_enable=YES                   #容许建立目录
anon_other_write_enable=YES                   #开放其余写入权

给3个配置文件赋予权限

a1: anon_upload_enable=YES                        #容许上传文件  
a2: anon_mkdir_write_enable=YES                   #容许建立目录
a3: anon_upload_enable=YES                        #容许上传文件
    anon_other_write_enable=YES                   #开放其余写入权
 1 #建立dir目录,并给3个用户赋予不一样的权限
 2 [root@localhost dir]# ll
 3 总用量 12
 4 -rw-r--r--. 1 root root 23 5月  26 17:15 a1
 5 -rw-r--r--. 1 root root 28 5月  26 17:15 a2
 6 -rw-r--r--. 1 root root 50 5月  26 17:16 a3
 7 [root@localhost dir]#
 8 [root@localhost dir]# ls -ld /wgr/tz/
 9 drwx------. 3 tzftpuser tzftpuser 78 5月  26 17:08 /wgr/tz/
10 # 注:要给映射用户的家目录  设置 O+r 让虚拟用户有读权限
11 [root@localhost dir]# chmod o+r /wgr/tz
12 [root@localhost dir]# ls -ld /wgr/tz/
13 drwx---r--. 3 tzftpuser tzftpuser 78 5月  26 17:08 /wgr/tz/
14 [root@localhost dir]#

 

 

相关文章
相关标签/搜索