1.FTP:File Transfer Protocol

 FTP是很古来的传输协议之一,他最主要是在服务器端和客户端之间进行档案的传输,这个古老的协议使用的是明码传输方式,所以很不安全,为了更安全的使用FTP协议,我们主要介绍较为安全但功能较少的vsftp这个软件.FTP这个协议工作的模式非常特殊,他监听在tcp的两个端口上,分别是命令连接21/TCP和数据连接20/TCP,命令连接一旦建立,只要不断开就一直存在,数据连接,主要数据传送完毕就断开.对于服务器端的数据连接而言,其中又分为主动模式和被动模式两种.


·主动模式

1.建立命令连接

 客户端会随机取一个大于1024以上的端口来与FTP服务器的21号端口首先建立命令连接,三次握手,当联机完成后,客户端就可以想服务器端下达命令了.

2.数据连接

 客户端和服务器端已经建立命令连接后,客户端下达的命令涉及到数据传输时会先告诉服务器端使用主动模式进行数据传输,服务器端会主动通过20/TCP向客户端发起数据传输,客户端会启动一个比之前命令连接的端口大1(如果被占用就依次加1)的端口号接受服务器端的数

注:如果客户端在防火墙后面,主动模式就比较麻烦


·被动模式

1.建立命令连接

 客户端会随机取一个大于1024以上的端口来与FTP服务器的21号端口首先建立命令连接,当联机完成后,客户端就可以想服务器端下达命令了.

2.数据连接

 客户端和服务器端已经建立命令连接后,客户端下达的命令涉及到数据传输时会先告诉服务器端使用被动模式进行数据传输,服务器端会告诉客户端,我已经启动好一个端口等你来拿数据了,于是客户端会使用比之前命令连接的端口大1的端口开始接受数据


·FTP用户认证

·系统用户

就是Linux系统中的用户,他可以登录FTP,在vsftp中,默认就是这种用户,并且这种用户在登录ftp时,可以切换到任意目录去浏览

·虚拟用户

不能用来登录系统,只能用来登录服务的用户,帐号和密码不是在 /etc/passwd中的用户,他的帐号和密码可以在文件中,也可以在数据库中,所有的虚拟用户都会被映射成一个系统用户,访问时的文件目录是此系统用户的家目录

·匿名用户

匿名用户并不是不需要输入用户密码就能登录的用户,而是需要输入anonymous帐号,空密码,匿名用户在登录ftp的,由于被chroot到 /var/ftp下,所以匿名用户看到的根就是 /var/ftp,并且匿名用户的权限很低,默认只能下载文件.


·vsftp配置文件

·概要

[root@www www1]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/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
/usr/sbin/vsftpd                    #主程序文件
...
/var/ftp                            #共享目录
/var/ftp/pub                        #同上

·/etc/pam.d/vsftpd

[root@www www1]# vim /etc/pam.d/vsftpd   #vsftp的pam模块
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed  #去看看这个文件
[root@www www1]# vim /etc/vsftpd/ftpusers
#不允许登录ftp的用户名单
root
bin
daemon
...

·/etc/vsftpd/chroot_list

这个文件预设是不存在的,所以要自己手动建立.这个文件的主要功能是chroot用户的根目录在自己的家目录下,这个文件是否生效与vsftpd.conf中的「chroot_list_enable和chroot_list_file」这两个参数有关.如果要禁锢多个用户的话,需要在这个配置文件中每行写一个


·/etc/vsftpd/vsftpd.conf 注:配置文件中的开头和等号两边都不能有空白字符

[root@www www1]# vim /etc/vsftpd/vsftpd.conf    #查看配置文件
anonymous_enable=YES                            #是否允许匿名用户登录
local_enable=YES                                #是否允许本地用户登录
write_enable=YES                    #是否允许本地用户上传文件
local_umask=022                    #
chroot_local_user=YES                           #禁锢系统用户在其家目录
chroot_list_enable=YES                          #禁锢列表中的用户
chroot_list_file=/etc/vsftpd/chroot_list        #上面配置的列表文件
anon_upload_enable=YES                          #是否允许匿名用户上传文件的
anon_mkdir_write_enable=YES                      #是否允许匿名用户删除文件和创建目录的
ftpd_banner=Welcome to blah FTP service.         #用户登录时的欢迎信息

系统用户相关设定

·local_enables=YES(NO)

这个值只有设置为YES时,在 /etc/passwd中内的帐号才能登录vsftp,但是 /etc/vsftpd/ftpusers中的帐号除外,默认是YES

·write_enables=YES(NO)

是否允许本地用户上传文件,默认是YES

·chroot_local_user=YES(NO)

是否在本地用户登录时,把预设的登录目录禁锢在该用户的家目录下,预设是未启用的,如果想让本地用户登录的时候自己的家目录就是根目录就启用此项

·chroot_list_enable=YES(NO)

·hroot_list_file=/etc/vsftpd/chroot_list

 在用户登录ftp的时候,把哪些用户禁锢在其家目录下,如果要禁锢某些用户在其家目录下,以上两项要同时启用,默认是未启用的

·local_max_rate

本地所有用户的最大传输速率,默认是未设定的,需自行添加,速率是字节每秒.

·local_umask=num

本地用户上传的文件权限,目录为755,文件为644


匿名用户相关的设定

· anonymous_enable=YES(NO)

是否允许匿名用户登录的,默认是允许的,下面和匿名用户相关的设定都需要这个设定为YES才能生效

· anon_upload_enable=YES(NO)

是否允许匿名用户上传文件的,默认是未启用,如果需要允许匿名用户上传文件,要启用此项.在vsftp中,为了安全,所以ftp的目录是属于root:root的,所以要允许匿名用户上传还需要修改ftp的文件属性,一般我们是在 /var/ftp/pub下创建一个目录,并且使用setfacl来增加ftp用户的权限,下面的创建和删除也是一样

·anon_mkdir_write_enable=YES(NO)

是否允许匿名用户创建目录,默认是关闭的,如果想让匿名用户创建目录,需要启用此项

·anon_other_write_enable=YES(NO)

是否允许匿名用户删除文件,此项默认是不存在的,如果想让匿名用户可以删除文件,需要自行添加此项.

·anon_max_rate

所有匿名用户的最大传输速率,系统默认未设定,需自行添加,单位是字节每秒.

·anno_umask=022

匿名用户上传的文件默认权限,目录为755,文件为644,用户的属主和属组默认是ftp

·chown_username=someuser

匿名用户上传的文件属组和属主为someuser


其他设定

·ftpd_banner=filename

用户登录登录时显示的欢迎信息,默认是未启用的

·banner_file=/path/to/somewhere

同上,不过是加载文件的方式,预设是不存在的,如果需要启用需自行添加

·dirmessage_enable=YES(NO)

如果切换的目录下有.message文件,则会显示该文件的内容.

·userlist_enable=YES(NO)

·userlist_deny=YES(NO)

是否启用userlist_enable,默认是启用的,禁止 /etc/vsftpd/user_list,他                   与 /etc/vsftpd/ftpusers中的文件的一样的,不过一个是vsftpd自行控制的,一个是pam控制的.

·userlist_enable=YES(NO)

·userlist_deny=NO(YES)

第二项默认是没有的,需自行添加,他能和第一项组成白名单机制,只有在user_list的中的用户才能访问.

·


连接设定

·max_clients=numftp

最大的连接并发数,系统默认是没有这项的,需自行添加

·max_per_ip=num

每个IP可以同事发起的请求数,系统默认没有此项,需自行添加


实例:虚拟用户:基于pam_mysql实现虚拟用户认证.需求:两个虚拟用户ftpuser1和ftpuser2,ftpuser1可以上传文件、创建目录、删除文件和下载文件,但ftpuser2只能下载文件

·安装数据库这里就不演示了

 在数据库中添加一个库,两个用户

mysql> CREATE DATABASE vsftpddb;     #创建一个vsftpddb的数据库
mysql> create table users (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,name VARCHAR(50) NOT NULL,password CHAR(48) NOT NULL);  #创建数据表
mysql> INSERT INTO users(name,password) VALUES ('ftpuser1','redhat'),('ftpuser2','redhat');     #添加两个用户
mysql> GRANT ALL ON vsftpddb.* TO 'vsftpd'@'192.168.%.%' IDENTIFIED BY 'redhat';             #授权给192.168网段的用户登录数据库

·安装pam_mysql

[root@station142 ftp1]# yum install pam_mysql

·新建一个系统账户

[root@station142 ftp1]# useradd -s /sbin/nologin -d /var/ftp1 ftp1    #新建系统用户
[root@station142 ftp1]# chmod go+rx /var/ftp1                         #给该文件夹设置权限,因为虚拟用户也是匿名用户的一种
#需要把数据库中的用户映射成该系统用户

·创建基于pam的认证的配置文件

[root@station142 ftp1]# vim /etc/pam.d/vsftpd.mysql  #添加如下两句
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=redhat host=192.168.1.113 db=vsftpddb table=users usercolumn=name passwdcolumn=password crypt=0         #
account required /lib64/security/pam_mysql.so user=vsftpd passwd=redhat host=192.168.1.113 db=vsftpddb table=users usercolumn=name passwdcolumn=password crypt=0      #
auth:                   #认证
required:
pam模块路径:             #/lib64/security/pam_mysql.so
user=vsftpd:            #数据库账户
passwd=redhat:          #数据库密码
host=192.168.1.113:     #数据库主机
db=vsftpddb:            #数据库名称
table=users:            #数据库表名
usercolumn=name:        #用户名列字段
passwdcolumn=password:  #密码列字段
crypt=0:                #密码加密方式为不加密

·配置主配置文件 /etc/vsftpd/vsftpd.conf

请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES    #因为所有的虚拟用户也是匿名用户,所以得启用
local_enable=YES        #匿名用户需要映射为本地用户,所以需启用
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而后添加以下选项
guest_enable=YES        #启用虚拟用户
guest_username=ftp1     #虚拟用户映射的系统用户
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql    #这个要注意,pam的配置文件

·尝试使用匿名用户访问

wKiom1M8LTPhoMKpAACZovecxIU871.jpg

·配置ftpuser1和ftpuser2的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可

·配置vsftp为虚拟用户使用配置文件目录

[root@station142 ftp1]# vim /etc/vsftpd/vsftpd.conf   #编辑主配置文件
user_config_dir=/etc/vsftpd/vusers                    #为每个虚拟用户单独设置权限的目录
[root@station142 ftp1]# mkdir /etc/vsftpd/vusers      #创建该目录
[root@station142 ftp1]# cd /etc/vsftpd/vusers         #进入该目录
[root@station142 vusers]# vim ftpuser1                #分别创建与虚拟用户同名的文件
[root@station142 vusers]# vim ftpuser2                #分别创建与虚拟用户同名的文件
在ftpuser2的文件中创建如下内容
non_upload_enable=NO                                  #禁止上传
anon_mkdir_write_enable=NO                            #禁止创建目录                       
anon_other_write_enable=NO                            #禁止删除
##如上就完成了

目前写完了..又累死了....