RHEL 6.x vsftpd搭建 ftp ftps

      RHEL  6.x  vsftpd搭建  ftp  ftps

==============================

ftp服务器的工作原理

vsftpd实现ftp的匿名用户

vsftpd实现ftp的本地用户

vsftpd实现限制客户端的速率和连接数

vsftpd+ssl实现安全的ftps

==============================


一、ftp服务器的工作原理

FTP是一种能实现下载文件的协议,FTP的协议连接有两种方式,一种是控制连接,一种是数据连接,FTP的数据连接方式中也有两种模式,一种是主动模式,一种是被动模式。

主动模式的工作原理

152834591.png

   被动模式的工作原理

153657634.png

安装FTP的软件包:

       yum -y install  vsftpd

               rpm -ql vsftpd  (ql接包名,查看软件包安装生成了那些文件)

rpm -ql vsftpd  (qc查看软件包生成的配置文件)


二、vsftpd实现ftp的匿名用户

1
2
3
4
5
6
7
8
9
10
11
[root@jie1 ~] # rpm -ql vsftpd | grep -v /usr*
/etc/logrotate .d /vsftpd     #配置日志回滚的文件
/etc/pam .d /vsftpd           #配置vsftpd的PAM认证文件
/etc/rc .d /init .d /vsftpd     #服务启动的脚本文件
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd .conf    #服务的配置文件
/etc/vsftpd/vsftpd_conf_migrate .sh
/var/ftp                   #FTP默认的宿主目录
/var/ftp/pub


1)匿名用户能上传和下载文件,且宿主目录为默认目录(/var/ftp/pub)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@jie1 ~] # grep -v "^#" /etc/vsftpd/vsftpd.conf | grep -v "^$"
anonymous_enable=YES   #允许匿名用户访问(yes,为允许,no为不允许)
local_enable=NO  #是否禁用本地用户(设置为no是表示禁用,yes表示不禁用)
write_enable=YES  #允许开放写的权限
anon_umask=022  #设置匿名用户上传建立文件时的权限掩码
anon_upload_enable=YES  #允许匿名上传文件
anon_mkdir_write_enable=YES  #允许匿名用户创建目录
dirmessage_enable=YES  #用户切换进入目录时显示.message(如果存在)文件的内容
xferlog_enable=YES  #开启xferlog日志,默认记录到/var/log/xferlog
connect_from_port_20=YES   #连接控制端口为20
xferlog_file= /var/log/xferlog  #记录日志文件的路径
xferlog_std_format=YES  #启用标准xferlog的日志格式,若禁用此项,将使用vsftpd自己的日志格式
listen=YES   #是否以独立运行的方式监听服务
pam_service_name=vsftpd   #设root置用于用户认证的PAM文件位置(/etc/pam.d/目录中对应的文件名)
userlist_enable=NO   #未启用本地用户时,可以将用户列表功能禁用
tcp_wrappers=YES   #是否开启tcp_wrappers主机访问控制
[root@jie1 ~] # service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd  for  vsftpd:                                [  OK  ]


验证:

173344241.png

173146414.png2)匿名用户可以上传、下载、删除目录且ftp访问的默认宿主目录为自己指定目录

1
2
3
4
vim   /etc/vsftpd/vsftpd .conf
####在之前的配置基础上,在加入两句#######
anon_other_write_enable=YES   #是否允许匿名用户有其它写入权限,如对文件改名,覆盖以及删除(此选项慎用)
anon_root= /gx   #指定匿名用户登陆后的宿主目录

181256549.png

三、vsftpd实现ftp的本地用户

      本地用户必须存在于系统中

1)本地用户可以上传下载,删除文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@jie1 vsftpd] # grep -v "^#" /etc/vsftpd/vsftpd.conf | grep -v "^$"
anonymous_enable=NO
local_enable=YES    #开启本地用户
write_enable=YES    #本地用户允许写入
local_umask=022     #设置本地用户的umask值为022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file= /var/log/xferlog
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES    #启用user_list列表文件
tcp_wrappers=YES
[root@jie1 vsftpd] # service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd  for  vsftpd:                                [  OK  ]
[root@jie1 vsftpd] # useradd jie  #创建系统用户
[root@jie1 vsftpd] #echo redhat | passwd --stdin jie &>/dev/null #给系统用户设置密码为redhat

204340692.png

2)禁锢本地用户在自己的家目录,开启user_list文件的相关功能

     本地用户是否能访问ftp,需注意/etc/vsftpd目录下的ftpusers文件和user_list文件这两个文件

       ftpusers文件:该文件中包含的用户帐户将被禁止登入vsftpd服务器,不管用户是不是在user_list文件出现。

       user_list文件:该文件中包含的用户帐户可能被禁止登入vsftpd服务器,也可能被允许登入,具体要看配置文件中的userlist_enable参数的配置(配置成YES,则启用user_list用户列表文件,NO则不启用user_list用户列表文件),当userlist_enable=YES,之后看配置文件中userlist_deny的配置(为YES则仅禁止用户列表文件的用户账号登入,为NO则仅用户列表文件的用户账号登入)

不允许user_list文件里面的用户登录ftp服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@jie1 vsftpd] # useradd user1
[root@jie1 vsftpd] # echo user1 | passwd --stdin user1 &>/dev/null
[root@jie1 vsftpd] # useradd user2
[root@jie1 vsftpd] # echo user2 | passwd --stdin user2 &>/dev/null
[root@jie1 vsftpd] # useradd user3
[root@jie1 vsftpd] # echo user3 | passwd --stdin user3 &>/dev/null
######配置文件里面添加这几条#########################################
userlist_enable=YES   #启用user_list文件
userlist_deny=YES     #禁止用户列表文件的用户账号登入
chroot_local_user=YES   #将本地用户禁锢在自己的家目录
#####################################################################
[root@jie1 vsftpd] # service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd  for  vsftpd:                                [  OK  ]
[root@jie1 vsftpd] # echo "user1" >/etc/vsftpd/user_list  #把user1用户添加到user_list文件中
[root@jie1 vsftpd] # lftp -u user1 172.16.22.1
Password:
lftp user1@172.16.22.1:~>  ls   
` ls ' at 0 [Delaying before reconnect: 23]      #验证显示user1无法登录ftp服务器
[root@jie1 vsftpd] # lftp -u user2 172.16.22.1
Password:
lftp user2@172.16.22.1:~>  ls   
lftp user2@172.16.22.1:~>  mkdir  user2   #user2可以登录ftp服务器,还可以创建文件
mkdir  ok, `user2' created
lftp user2@172.16.22.1:/>  cd  /   #切换到ftp服务器的根目录
lftp user2@172.16.22.1:/>  ls     #显示不能切换
drwxr-xr-x    2 502      502          4096 Aug 14 13:53 user2
lftp user2@172.16.22.1:~> bye
[root@jie1 vsftpd] # lftp -u user3 172.16.22.1
Password:
lftp user3@172.16.22.1:~>  mkdir  user3  #user3也可以登录ftp服务器,还可以创建文件
mkdir  ok, `user3' created
lftp user3@172.16.22.1:~>  ls   
drwxr-xr-x    2 503      503          4096 Aug 14 13:54 user3
lftp user3@172.16.22.1:/>  cd  /   #尝试切换到根目录
lftp user3@172.16.22.1:/>  ls     #显示切换不过去
drwxr-xr-x    2 503      503          4096 Aug 14 13:54 user3     
lftp user3@172.16.22.1:~> bye
[root@jie1 vsftpd] #

只允许user_list文件里面的用户能登录ftp服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sed  -i  '/userlist_deny/s@YES@NO@g'  /etc/vsftpd/vsftpd .conf   #修改配置文件匹配userlist_deny行,把YES改为NO
[root@jie1 vsftpd] # service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd  for  vsftpd:                                [  OK  ]
[root@jie1 vsftpd] # lftp -u user3 172.16.22.1
Password:
lftp user3@172.16.22.1:~>  ls  
` ls ' at 0 [Delaying before reconnect: 23]      #验证显示user3无法登录ftp服务器
[root@jie1 vsftpd] # lftp -u user1 172.16.22.1
Password:
lftp user1@172.16.22.1:~>  ls   
lftp user1@172.16.22.1:/>  mkdir  user1   #验证只有user1可以登录ftp服务器
mkdir  ok, `user1' created
lftp user1@172.16.22.1:/>  ls
drwxr-xr-x    2 501      501          4096 Aug 14 14:09 user1


四、vsftpd实现限制客户端的速率和连接数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#####修改配置文件#####################
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file= /var/log/xferlog
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
chroot_local_user=YES
max_clients=20   #允许客户端最大连接数量
max_per_ip=2     #允许同一个IP的客户端同时最多连接2次
local_max_rate=10240   #限定最大的下载速度为10240B/s即10KB/s
#############################################################
[root@jie1 vsftpd] # service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd  for  vsftpd:                                [  OK  ]

验证:

213625380.png214339565.png


五、vsftpd+ssl实现安全的ftps

1)搭建基于本地用户的ftp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
grep  - v  "^#"  /etc/vsftpd/vsftpd .conf |  grep  - v  "^$"
#####修改配置文件#############################
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file= /var/log/xferlog
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
chroot_local_user=YES
max_clients=20
max_per_ip=2
local_max_rate=10240
#######################################################
[root@jie1 vsftpd] # useradd jie
[root@jie1 vsftpd] #echo redhat |  passwd --stdin jie &>/dev/null
[root@jie1 vsftpd] # service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd  for  vsftpd:                                [  OK  ]
[root@jie1 vsftpd] #

2)自建CA服务器

a)生成自己的私钥文件

(umask 077;openssl genrsa -out /etc/vsftpd/ftpkey.pri 2048)

umask 077:用括号括起来,则表示此umsak只对当前子shell有效,如果不用括号,则对当前shell都生效,在此创建文件时属组和其它用户将没有任何权限

        openssl genrsa:生成私钥的命令关键字

        -out:指定文件的路径

        ftpkey.pri:私钥的名称,名字可以随便取,用.pri结尾是为了方便记忆

       2048:指私钥生成的位,默认是512,必须是2的n次方倍数

b)利用私钥文件生成证书签署请求文件

openssl req -new -key /etc/vsftpd/ftpkey.pri -out /etc/vsftpd/ftpreq.csr

          req:证书请求和证书生成工具的命令关键字

           -new:制作证书申请

            -key:指定私钥文件

            -out:输出证书请求文件的路径,以.csr结尾  

You are about to be asked to enter information that will be incorporated

into your certificate request.


What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:HuBei

Locality Name (eg, city) [Default City]:Wuhan

Organization Name (eg, company) [Default Company Ltd]:Jie

Organizational Unit Name (eg, section) []:Tech

Common Name (eg, your name or your server's hostname) []:172.16.22.1  #这里写IP地址,访问时就必须输入IP地址

Email Address []:


Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:


  c)生成CA的私钥文件

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

 生成CA的私钥文件的存放路径一般存放于/etc/pki/CA/private路径下

d)生成自签证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650

        -x509: 此选项输出一个自签名证书,而不是证书请求。这通常是用于生成一个测试     证书或自签名的根CA

          -key:指定CA私钥文件

         -out:输出自签证书文件

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN  

State or Province Name (full name) []:HuBei

Locality Name (eg, city) [Default City]:Wuhan

Organization Name (eg, company) [Default Company Ltd]:Jie

Organizational Unit Name (eg, section) []:Tech

Common Name (eg, your name or your server's hostname) []:172.16.22.1  #这里写IP地址,访问时就必须输入IP地址

Email Address []:

[root@jie1 vsftpd]# touch /etc/pki/CA/index.txt

[root@jie1 vsftpd]# echo "01" >/etc/pki/CA/serial

e)颁发ftp的证书

openssl ca -in /etc/vsftpd/ftpreq.csr -out /etc/vsftpd/certftp.crt -days 3650

      openssl ca :颁发CA证书的命令关键字

      -in:指定证书签署请求文件

      -out:输出颁发证书的文件

      -days:限定证书的有效期,3650天

CA机构实际环境中:由公司提交签署证书的请求文件,ftpreq.csr,CA机构根据此请求文件,颁发签署证书文件certftp.crt

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

       Serial Number: 1 (0x1)

       Validity

           Not Before: Aug 13 02:51:01 2013 GMT

           Not After : Aug 11 02:51:01 2023 GMT

       Subject:

           countryName               = CN

           stateOrProvinceName       = Hubei

           organizationName          = Jie

           organizationalUnitName    = Tech

           commonName                = 172.16.22.1

       X509v3 extensions:

           X509v3 Basic Constraints:

               CA:FALSE

           Netscape Comment:

               OpenSSL Generated Certificate

           X509v3 Subject Key Identifier:

               75:8F:E4:5E:B7:61:EB:70:42:60:BE:CA:E5:F0:AE:61:5B:EB:05:EF

           X509v3 Authority Key Identifier:

               keyid:2A:E6:B1:0D:CA:56:10:33:4B:85:48:28:75:92:41:76:E3:D4:1C:1C


Certificate is to be certified until Aug 11 02:51:01 2023 GMT (3650 days)

Sign the certificate? [y/n]:y  

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated


3)修改vsftpd的配置文件让其支持ssl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#####修改vsftpd的配置文件增加这些########
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
allow_anon_ssl=NO   #不允许匿名用户SSL连接FTP
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file= /etc/vsftpd/certftp .crt   #证书的存放路径
rsa_private_key_file= /etc/vsftpd/ftpkey .pri  #ftp私钥文件的存放路径
######################################################
[root@jie1 vsftpd] # service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd  for  vsftpd:                                [  OK  ]

4)客服端软件用FlashFXP软件测试

224558697.png


095119888.png

095150246.png


     小结:ftp的传输方式是明文的,所以,如果直接用本地用户连接ftp服务,则很容易别恶意攻击人员,利用嗅探工具抓包,获取该用户的密码;这样对服务器是一个很大的安全隐患,企业搭建ftps可以保障ftp的安全隐患,还可以利用ftp的虚拟用户解决ftp服务器的安全隐患,ftp的虚拟用户的搭建期待下一个博客。










本文转自 jie783213507 51CTO博客,原文链接:http://blog.51cto.com/litaotao/1275574,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值