Linux下FTP服务与虚拟用户及SSL加密

FTP的客户端有不少种,较为常见的是网页浏览器,如:firefox等。node

通常操做系统都提供了基础的命令行方式的FTP客户端。输入“ftp”或者“ftp服务器地址”就可使用命令行方式。下面列举了一些经常使用的FTP命令。数据库

远程命令:vim

cd                改变所在目录浏览器

ls                 查看当前目录下文件列表安全

get               从服务器下载当个文件服务器

mget            从服务器下载多个文件session

put               向服务器上传单个文件app

mput            向服务器上传多个文件tcp

pwd             显示服务器当前目录ide

quit              退出ftp程序

 

本地命令:

!ls                显示客户端当前目录下的文件列表

!cd               改变客户端当前所在目录

!pwd            显示客户端当前目录

 

 

VSFTPD服务器

VSFTPD的安装

咱们为了安装安装包的简单,首先先架设一个本地的YUM仓库,配置本地YUM源。后期会介绍YUM的配置。使用yum 安装vsftpd

 

[root@xingzheson /]# yum install vsftpd -y

若是系统中开启了SELinux,那么须要执行下面的命令,使得VSFTPD能够被正常访问

[root@xingzheson /]# setsebool -P ftpd_disable_trans 1

 

VSFTPD安装完成后,默认的主配置文件是 /etc/vsftpd/vsftpd.conf 。下面按自上而下的顺序介绍此文件的参数设定。

anonymous_enable=YES

容许匿名访问,即容许anonymous帐号访问FTP服务。

local_enable=YES

容许使用本机账号登陆

write_enable=YES

用户能够读写

local_umask=022

默认掩码为022,即默认建立的文件权限是755

#anon_upload_enable=YES

是否容许匿名用户上传文件夹,默认是注释掉的

#anon_mkdir_write_enable=YES

是否容许匿名用户建立新文件夹。默认注释掉的

dirmessage_enable=YES

若目录下存在.message文件,则显示该文件内容

xferlog_enable=YES

默认上传/下载的日志文件被记录在/var/log/vsftpd.log中

connect_from_port_20=YES

从20端口链接。默认情况下,20为FTP的数据传输端口

#chown_uploads=YES
#chown_username=whoever

容许新上传文件的拥有者为whoever.两行同时出现的,默认注释掉

#xferlog_file=/var/log/vsftpd.log

日至位置设定

xferlog_std_format=YES

使用标准格式登记上传/下载记录

#data_connection_timeout=120

传输延时时间,单位为秒

#nopriv_user=ftpsecure

使用特殊用户ftpsecure。这里能够把ftpsecure帐户做为通常访问用户,即全部链接FTP服务器的用户都具备ftpsecure用户名。为了安全起见,能够在/etc/passwd中将ftpsecure的用户的SHELL设定为/sbin/nologin。

#ftpd_banner=Welcome to blah FTP service.

登陆提示信息

#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails

若启用上述两项设定,则能够在/etc/vsftpd/banned_emails中创建黑名单

pam_service_name=vsftpd

列出与VSFTPD相关的PAM文件

userlist_enable=YES

当此项设置为yes的时候,启用配置文件/etc/vsftpd.user_list。此时有两种状况

a.此时若没有userlist_deny=NO,则/etc/vsftpd.user_list中存在的用户不能够访问VSFTPD服务器

b.此时若存在userlist_deny=NO,则仅接受/etc/vsftpd.user_list中存在的用户的登陆请求

当此项设定为NO是,不会启用配置文件/etc/vsftpd.user_list

tcp_wrappers=YES

启用TCP Wrapper支持

 

以上是默认安装后,VSFTPD主配置文件出现的设定选项。除此以外,还有一些经常使用选项

 

guest_enable=YES

guest_username=ftp

guest用户名,即全部非匿名用户将具备guest用户身份

local_root=/var/ftp

anon_root=/var/ftp

设定本机用户和匿名用户的FTP根目录

use_localtime=YES

是否使用本机时间,若设定为NO,则使用格林尼治时间

#idle_session_timeout=600

客户端在600秒内没有任何动做,则服务器自动断开与客户端链接

max_clients=0

最大客户链接数

max_per_ip=0

每一个客户端的最大链接数

local_max_rate=0

本地帐户的最大传输速率,单位为秒,0为不限制

anon_max_rate=0

匿名用户的最大传输速率

 

 

前面已经介绍了VSFTPD的安装,安装后须要启动服务

[root@xingzheson /]# service vsftpd start

设置开机启动

[root@xingzheson /]# chkconfig vsftpd on

 

VSFTPD虚拟用户

 

设置虚拟用户使其仅能访问VSFTPD,而不能够登陆系统

首先,咱们须要确认安装盘上的db4软件包已经装上,若是没有,就要手动安装

[root@xingzheson /]# rpm -qa |grep db4
db4-utils-4.7.25-16.el6.x86_64
db4-4.7.25-16.el6.x86_64

 

[root@xingzheson Packages]# rpm -ivh db4-utils-4.7.25-16.el6.x86_64.rpm

 

[root@xingzheson Packages]# rpm -ivh db4-4.7.25-16.el6.x86_64.rpm

 

当咱们用yum 安装时,就已经默认安装好了。因此不用手动安装的了

接下来,须要建立虚拟用户的用户名和密码,建立一个文档,假定这个文件为/tmp/id.txt 内容以下

xingzheson

123456

zhulaoshi

654321

这里的单数行为用户名,而双数行为用户名对应的密码。生产用户帐号的数据库文件并设定数据文件权限,最后删除/tmp/id.txt

[root@xingzheson tmp]# db_load -T -t hash -f /tmp/id.txt /etc/vsftpd/vsftpd_id.db
[root@xingzheson tmp]# chmod 600 /etc/vsftpd/vsftpd_id.db
[root@xingzheson tmp]# rm -f /tmp/id.txt

 

下面设定vsftpd.conf 文件

 

wKiom1O2UoSS955xAAMZWAjv1zc401.jpg

wKioL1O2VQyihL_9AAIWF_73_Vs141.jpg

 

 

接着创建PAM文件/etc/pam.d/vsftpd.virtual,

[root@xingzheson tmp]# vi /etc/pam.d/vsftpd.virtual

内容以下:


#%PAM-1.0
auth                    required        pam_userdb.so   db=/etc/vsftpd/vsftpd_id
account                 required        pam_userdb.so   db=/etc/vsftpd/vsftpd_id
session                 reiuired        pam_loginuid.so

 

下面创建相关的目录:

[root@xingzheson tmp]# mkdir /home/vsftpd
[root@xingzheson tmp]# mkdir -p /home/vsftpd/{xingzheson,zhulaoshi}
[root@xingzheson tmp]# chown -R ftp:ftp /home/vsftpd/

重启服务,若是系统中开启了SELinux,那么须要执行如下命令,容许虚拟用户存取其家目录

[root@xingzheson tmp]# setsebool -p allow_ftpd_full_access 1

 

若是设置正确,则虚拟用户能够登陆服务器。输出以下:

wKioL1O2VtOCkpSzAANvBJt6gvI211.jpg

 

虚拟用户的配置部分彻底正常,可是会发现一个问题,那就是本地用户没法正常登陆VSFTPD服务器了。接下来咱们找找缘由

a.用户的FTP根目录变为了/home/vsftpd/$USER.也就是说,若是一个本地用户zhu尝试登陆VSFTPD,那么服务器会试图寻找/home/vsftpd/zhu这个目录。可是zhu的家目录应该是/home/zhu,而/home/vsftpd/zhu 并不存在,因此登陆失败

b.即便咱们能够用一些方法让zhu的家目录能够被从新定位到/home/zhu(能够用连接的方法),可是因为zhu登陆VSFTPD时的身份其实是ftp(由于启用了guest_enable=YES),因此仍是无权访问本身的家目录

c.及时上述两个问题解决了,仍是没法登陆。哎。由于在PAM文件/etc/pam.d/vsftpd.virtual中,只设定了虚拟用户的验证。zhu是本地用户,该用户的身份验证并不在虚拟用户的数据库中,因此没法登陆。

 

解决办法:

wKiom1O2XmTAAM7RAAIpSjScEEM815.jpg

 

接下来,修改/etc/vsftpd/vsftpd.conf文件,在其中加入 user_config_dir=/etc/vsftpd/virtua

重启服务,创建/etc/vsftpd/virtua文件夹,并在其中创建文本文件/etc/vsftpd/virtua/zhu

[root@xingzheson vsftpd]# mkdir /etc/vsftpd/virtua
[root@xingzheson vsftpd]# vim /etc/vsftpd/virtua/zhu

内容以下:

local_root=/home/zhu           (指定zhu真正的家目录)
guest_username=zhu         (修改zhu的身份。这里的zhu的身份就不是ftp了)

 

通过这样的修改以后,本地用户和虚拟用户就均可以登陆VSFTPD了,而且在增长了user_config_dir以后,就能够给每一个用户单独添加不一样的访问规则和权限,不管该用户是本地用户仍是虚拟用户。

 

 

配置具备SSL的VSFTPD

为了提高VSFTPD的传输安全性,这里可使用SSL加密。

首先用OpenSSL为VSFTPD生成安全证书。这里生成的证书有效期为365天

[root@xingzheson virtua]# cd /etc/vsftpd/
[root@xingzheson vsftpd]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

生成证书的时候须要填写一些信息,任意写均可以,输出以下
Generating a 1024 bit RSA private key
.............................++++++
.........................++++++
writing new private key to 'vsftpd.pem'
-----
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) []:JiangSu
Locality Name (eg, city) [Default City]:NanH^H^H^H^H^H^Hj
Organization Name (eg, company) [Default Company Ltd]:ITD^H^H
Organizational Unit Name (eg, section) []:whatever
Common Name (eg, your name or your server's hostname) []:Martian
Email Address []:abc@xyz.com

接下来编辑/etc/vsftpd/vsftpd.conf,加入如下内容

ssl_enable=YES
allow_anon_ssl=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem

重启服务,这样带有SSL加密的·VSFTPD服务器就假设好了。

相关文章
相关标签/搜索