学术堂首页 | 文献求助论文范文 | 论文题目 | 参考文献 | 开题报告 | 论文格式 | 摘要提纲 | 论文致谢 | 论文查重 | 论文答辩 | 论文发表 | 期刊杂志 | 论文写作 | 论文PPT
学术堂专业论文学习平台您当前的位置:学术堂 > 计算机论文 > 计算机应用技术论文

基于Linux系统的vsFTP传输安全认证

来源:网络安全和信息化 作者:刘景云
发布于:2018-09-26 共4972字

  摘    要: FTP服务在实际网络运维中使用的极为广泛, 在Linux中也可以架设和管理FTP服务器。提起Linux下最常用的FTP服务器工具, 恐怕非vs FTP莫属。vsFTP是一款体积小巧功能强大的FTP服务器软件, 使用和配置起来都非常快捷。在管理FTP服务器时, 最核心的内容莫过于对用户行为的管控, 在vsFTP中对用户进行安全认证, 对于保护其顺畅运行是极为必要的。这里就从不同的角度, 来深入分析了具体的策略。
 

基于Linux系统的vsFTP传输安全认证
 

  一、 基本的用户安全管理功能

  vs FTP是基于PAM进行用户的安全认证的, 如果让其支持虚拟用户, 就必须修改PAM配置文件。PAM本身其实是一个框架, 支持的认证机制很丰富, 对应的认证模块也很多, 允许用户灵活的定制所需的认证机制。

  PAM需要依靠“/etc/pam.d”目录下的各种配置文件, 以及在“/lib/security”或“/lib64/security”目录下的认证模块信息。vs FTP是安全性很高的FTP, 对文件权限的检测很严格。在默认情况下, 使用“/var/ftp”目录作为FTP根目录。该目录只允许Root账户有写权限, 而对于“vsftpd”进程来说, 对应的是“FTP”账户不具有写权限。

  为了满足文件上传要求, 只能在该目录中创建子目录, 用来让用户上传文件。例如在“/var/ftp/pub”目录中存储公开的文件。vs FTP的安装很简单, 执行“yum install vsftpd”命令安装。执行“service vsftpd start”、“chkconfig vsftpd on”命令启动vs FTP服务。vs FTP的用户类型包括anonyous匿名用户、系统用户和虚拟用户三类, 实际上不管哪一类, 都需要映射为与之对应的系统用户。例如匿名用户会被映射为“FTP”用户。每个用户都对应各自的家目录, 例如执行“finger ftp”命令, 可以看到FTP用户对应的是“/var/ftp”目录。进入“/etc/vsftpd”目录, 执行“vim vsftpd.conf”命令, 打开vs FTP配置文件。

  在“anonymous=”和“local_enable=”栏中可以设置是否开启匿名和系统用户。为保证可以执行写操作, 需要事先执行“setenforce 0”命令将Selinux关闭。在“write_enable=”栏中设置是否允许利用系统账户上传文件。在“anon_upload_enable=”栏中设置是否允许匿名用户上传文件。

  注意, 执行“ps aux|grep vsftpd”命令, 可以看到vs FTPS进程是以FTP用户身份运行。

  执行“ls–ld/var/ftp/”命令, 显示该目录属主为Root账户。对于匿名用户来说, 虽然允许其上传文件, 但是还必须开放文件写权限。执行“mkdir/var/ftp/uploadfile”、“setfacl-m u:ftp:rwx/var/ftp/uploadfile/”命令, 为FTP用户创建名为“uploadfile”的目录, 并开放写权限。这样, 匿名用户就可以向该目录上传文件了。

  注意, 对于匿名用户来说, 无法删除文件和创建目录操作, 除非将“anon_mkdir_write_enable=”和“anon_other_write_enable=”的值均设置为“Yes”。

  为防止以系统用户身份登录FTP后, 在系统中随意切换目录, 必须禁锢在其家目录中。需要删除“chroot_list_enable=Yes”和“chroot_list_file=/etc/vsftpd/chroot_list”两行前面的“#”号激活。在“/etc/vsftpd”目录下执行“touch chroot_list”命令, 创建“chroot_list”文件。执行“vim chroot_list”命令进行编辑, 在其中添加需要禁锢的所有用户名 (例如“ftpuser”等) , 执行“service vsftpd restart”命令重启vs FTP, 这样当使用预设的用户登录FTP后, 就只能在其家目录中活动。如果希望禁锢所有的用户, 可以编辑“vsftpd.conf”文件, 将上述指令前面恢复“#”号禁用, 之后添加“chroot_local_user=Yes”行即可。

  默认情况下在“/etc/vsftpd”目录下执行“cat ftpusers”命令打开该文件, 存储在其中的所有用户 (例如root、daemon、operator等) 均禁止访问vs FTP服务。这是因为vs FTP的用户认证机制受到PAM控制, 执行“cat/etc/pam.d/vsftpd”命令, 打开对应的PAM认证文件, 可以看到其中包含“auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed”行, 表示对于“ftpusers”文件中的所有账户的敏感度为拒绝状态, 自然无法正常访问FTP服务了。在vs FTP配置文件中的“userlist_enable=”的值为“Yes”, 意味着当在“/etc/vsftpd”目录下打开“user_list”文件, 其中的用户也是无法访问vs FTP的。只有将该文件中的所有用户名清空, 上述“ftpusers”文件才真正拥有控制vs FTP的用户访问功能。

  如果在vs FTP配置文件中添加“userlist_deny=No”行, 则刚好相反, 表示仅仅允许“user_list”文件中的用户访问vd FTP服务, 如果修改为“userlist_deny=yes”行, 则禁止该文件中的用户访问, 这就实现了黑白名单功能。为了控制vs FTP的资源访问机制, 可以在配置文件中的“max_clients=”和“max_per_ip=”栏分别定制许可的客户端连接数及每个客户IP运行连接的最大值。

  二、 使用证书加密FTP数据传输

  因为FTP协议是以明文传输的, 因此使用抓包命令可以很容易捕获密码等敏感信息。

  为了保护vsF TP的数据传输安全, 就需要进行加密处理。vsF TP支持两种安全通讯方式, 包括FTPS和SFTP。前一种采用FTP加SSL或TLS的机制。后一种是基于SSH来实现安全的FTP传输功能。在OPenS SH中提供了名为SubS ystem的子模块, 可以实现SFTP功能。

  要想让vs FTP支持基于FTPS的安全通信方式, 首先需要创建一张证书, 即私有CA, 让其给vs FTP颁发一张证书, 之后在vs FTP配置文件中启用相关指令即可。

  执行“cd/etc/pki/CA”命令, 进入目标路径。执行“mkdir certs newscerts crl”, “touch index.txt”、“echo 01>serial”、“ (umask 077;openssl genrsa-out private/cakey.pem 2048>) ”命令, 创建基于RAS的长度为2048的密钥。执行“openssl req-new-x509-key private/cakey.pem-out cacert.pem-days 3650”命令, 创建自签名证书, 依次输入国家名称、州或省份名称、城市名、组织名等内容。

  执行“mkdir/etc/vsftpd/ssl”、“cd/etc/vsftpd/ssl”、“ (umask077;openssl genrsa-out vsftpd.key 2048;) ”命令, 在目标路径下创建私钥。执行“openssl req-new-key vsftpd.key-out vsftpd.csr”命令, 生成证书颁发申请文件, 根据提示信息依次输入国家名称、州或省份名称、城市名、组织名、组织单元名称等信息。执行“vim/etc/pki/tls/openssl.cnf/”命令, 将该配置文件中的“dir=../../CA”修改为“dir=/etc/pki/CA”。执行“openssl ca-in vsftpd.csr-out vsftpd.crt”命令, 在提示栏中依次输入“Y”完成证书签署操作。

  进入“/etc/vsftpd”目录, 执行“vim vsftpd.conf”文件, 在其中添加“ssl_enable=Yes”行, 启动SSL加密功能。添加“ssl_tlsv1=Yes”和“ssl_sslv3=Yes”行, 使其支持TLS V1和SSL V3协议。添加“allow_anno_ssl=No”行, 禁止匿名用户使用加密传输。添加“force_local_data_ssl_=Yes”和“force_local_logins_ssl=Yes”行, 强制本地用户在登录和传输数据时, 必须使用SSL加密协议。添加“rsa_cert_file=/etc/vsftpd/ssl/vsftpd_cert.crt”, “rsa_private_key_file=/etc/vsftpd/ssl/vsftpd_key.key”行, 分别指定RSA格式的证书和密钥文件路径。保存该文件, 并重启vs FTP服务使上述配置生效。

  这样, 使用非匿名账户无法使用“FTP”命令进行登录, 这就需要使用特定的FTP客户端来实现安全传输。例如使用Cute FTP、File Zilla、Flash FXP等。

  三、 使用MyS QL实现安全认证

  前面谈到, vsF TP支持匿名、本地和虚拟用户。对于虚拟用户来说, 最重要的是存储用户账户信息的方法。当然, 其存储格式必须能够被认证功能支持。

  例如, 在MyS QL中创建名为vsF TP的数据库, 其中包含名为“nmyh”的表, 在该表中包含名为“Name”和“Mima”的字段。之后将匿名用户信息存储在该表中, 当进行vsF TP认证时, 只要能让其去查询该表中的信息, 如果客户端输入的账户名和密码域该表中的对应行匹配, 即可完成认证操作。当然, 也可以采取其他合适的用户信息存储方式。

  例如, 在“/etc/vsftp/目录中创建名为“nmuser”的文本文件, 在其中一行存储用户名, 一行存储对应的密码。这样, 可以将所有的匿名用户信息存储在该文件中。之后使用“db4_utils”工具中的“db_load”之类的命令, 将该文件转换为二进制格式。使用该文件也可以实现vs FTP认证功能, 当然, vs FTP的认证其实是基于PAM来实现的, 这样就必须修改对应的PAM文件才可以实现上述虚拟用户认证功能。

  这里就以使用My SQL数据库实现认证为例进行说明, 首先需要安装My SQL数据库和开发环境, 具体操作起来并不复杂, 执行“yum-y install mysql-server mysql-devel”、“yum-y groupinstall"Development Libraries"”命令即可, 这里就不再赘述。

  之后需要安装名为“PAM_My SQL”模块。执行“tar zxvf pam_mysql-0.7rc1.tar.gz”、“cd pam_mysql-0.7rc1”、“./configure-with-mysql=/usrl--withopenssl”、“make”、“make install”、“cp/usr/lib/security/pam_mysql.so/lib/security/”等命令, 来安装该模块。接下来需要手动编译安装vs FTP, 执行“mkdir-pv/usr/share/empty/var/ftp”、“useradd-s/bin/false-d/var/f t p f t p”、“t a r x z v f vsftpd-x.x.x.tar.gz”、“cd vsftp-x.x.x”、“make”、“make install”等命令, 执行vs FTP的手动编译安装。执行“cp vsftp.conf/etc”、“vim/etc/vsftpd.conf”命令, 在vs FTP配置文件中添加“listen=yes”项, 使vs FTP进程处于独立运行状态。

  执行“/usr/local/sbin/vsftpd&”、“chmod og-w/var/ftp”命令, 来启动vs FTP服务。连接到My SQL操作环境, 执行“create database vsftp;”命令, 创建名为“vsftp”的数据库, 执行“grant select on vsftp.*to vsftpd@localhost identified by'vsftpd';”、“grant select on vsftp.*to vsftpd@127.0.0.1identified by'vsftpd';”命令, 授权给名为“vsftpd”的用户进行访问, 该用密码为“vsftpd”, 该账户可以在Linux中手动建立。执行“use vsftp;”、“create table nmyh (id SAMLLINT AUTO_INCREMENT NOT NULL, name CHAR (20) BINARY NOT NULL, mima CHAR (50) BINARY NOT NULL, PRIMARY key (id) ) ”命令, 创建名为“nmyh”的表, 其中存在名为“name”和“mima”的字段, 用来存储匿名用户信息。

  执行“insert into nmyh (name, mima) v alues ('ftpuser 1', '123456') ;”、“insert into nmyh (name, mima) v a l ues ('ftpuser 2', '123456') ;”命令插入两个用户信息, 名称分别为“ftpuser1”和“ftpuser2”。密码均为“123456”。执行“select*from nmyh;”命令, 来查看该表中的内容。执行“mysql-uvsftpd-p”命令, 以“vsftpd”账户连接My SQL, 输入密码后可以正常查看上述数据库。因为上面只为其设置了Select权限。仅仅有匿名用户信息还不够, 必须修改用来进行PAM认证的文件。

  执行“vim/etc/pam.d/vsftp.mysql”命令, 在该配置文件中添加“auth require/lib/security/pam_mysql.so user=vsftpd p a s s w o r d=v s f t p d usercolume=name pass w o r d c o l u m e=m i m a crypt=0”、“account require/lib/s e c u r i t y/p a m_mysql.so user=vsftpd password=vsftpd host=localhost db=vsftp table=nmyh usercolumn=name pass wordcolumn=mima crypt=0”等行内容。表示当登录vs FTP服务器时必须满足“pam_mysql.so”模块的检查, 即从上述My SQL数据表中匹配客户端输入的用户名和密码。在Linux提示符下执行“useradd-s/sbin/nologin-d/var/ftp2 vuser”、“chmod go+rx/var/ftp2”命令, 创建名为“vuser”的账户, 并设定该账户对应的家目录, 并允许其他用户读取和执行其家目录的权限。当然该账户无法正常登录系统。

  对vs FTP的配置文件“/etc/vsftpd.conf”进行修改, 设置“anonyous_enable=Yes”、“local_enable=Yes”、“write_e n a b l e=Y e s”、“a n o n_upload_enable=Yes”、“anon_mkdir_write_enable=Yes”、“anon_other_mkdir_wri te_e nab le=Ye s”、“chroot_local_user=Yes”、“gu es t_e na ble=Y es”、“guest_username=vuser”、“listen=Yes”, “pam_service_name=vsftpd.mysql”等行, 允许来宾账户进行访问。并将来宾账户映射为“vuser”用户, 使PAM认证服务使用自定义的“vsftpd.mysql”文件。之后执行“service vsftpd restart”命令重启vs FTP。客户端执行“ftp xxx.xxx.xxx.xxx”命令, 即可用上述“nmyh”表中的用户进行登录了。在上述配置文件中允许用户对FTP路径具有读写操作, 所以当使用虚拟账户登录后, 执行的指令均被匿名用户进行匹配, 可以上传下载文件。

  四、 控制匿名用户访问权限

  当然, 针对不同的虚拟账户可设置不同的权限。打开vsF TP的配置文件“/etc/vsftpd/vsftpd.conf”, 添加“user_config_dir=/etc/vsftpd/vusers”行设置用户配置目录。执行“mkdir/etc/vsftpd/vusers”命令创建该目录。执行“cd/etc/vsftpd/vusers”命令进入该目录, 为每一个匿名用户创建同名文件。

  执行“vi ftpuser1”命令, 在该文件中设置“anon_upload_enable=Yes”、“anon_mkdir_write_enable=Yes”和“anon_other_write_enable=Yes”项, 允许上传、下载和删除文件, 如果设置为“anon_upload_enable=No”、“anon_mkdir_write_enable=No”和“anon_other_write_enable=No”项, 则禁止该用户上传、下载和删除文件。

原文出处:[1]刘景云.解析Linux下vsFTP安全认证[J].网络安全和信息化,2018(09):132-136.
  • 报警平台
  • 网络监察
  • 备案信息
  • 举报中心
  • 传播文明
  • 诚信网站