设为首页 收藏本站
查看: 1868|回复: 0

[经验分享] Vsftpd+MySQL实现虚拟用户验证登录

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-8 09:19:27 | 显示全部楼层 |阅读模式
什么是vsftpd?

      vsftpd是一个类UNIX操作系统上的一个FTP服务器,包括linux。vsftpd全称是very secure FTP daemon(非常安全的FTP进程),顾名思义,安全是它的一大特性。
        比如说vsftpd是在chroot模式下工作的,通俗chroot模式就是把它禁锢在一个目录中,禁止它访问别的目录。如果你不是用chroot模式,使用系统用户账号登陆FTP时,那么便有了这个用户的所有权力,这样岂不是很不安全?

理解FTP协议
        在配置vsftp之前,先说一下什么是FTP,FTP(File Transfer Protocol)是文件传输协议的简称。工作于应用层,用于上传或下载文件,能够将一个主机的文件共享给其他主机。
        FTP有两种连接方式,命令连接和数据连接。命令连接也叫控制连接,是一直在线,21/tcp,和服务器进行沟通。数据连接是按需打开,按需关闭的,请求下载文件时打开,传输完毕后关闭。
        FTP有两种模式,主动FTP和被动FTP。
         wKioL1UjYNCDz7acAACjrXlVEn8845.jpg
       主动FTP有两次TCP三次握手,最终在20号端口建立连接。一次是客户端发起,另一次由服务器端发起。首先客户端以大于1024的源端口向FTP的服务器端21号目标端口发起连接请求。另一次是FTP服务器端主动发起到客户端的连接,使用20号源端口,主动向客户端的1025号端口发起连接请求。但是防火墙可能会阻止,因此有了被动FTP。
        被动FTP服务器端只是用21号端口,也有两次TCP的三次握手,只不过三次握手都是由客户端发起的。第一次客户端以1024为源端口向FTP服务器的21号端口发起连接请求,FTP服务器告诉客户端使用1024--5000的端口进行数据传输,这个消息帧属于第一次三次握手的一部分。而后第二次三次握手开始,客户端使用1025号源端口主动连接服务器端的发来的端口号。这样都是客户端发起的连接请求,防火墙便不会阻止。


FTP用户
    FTP有三类用户,无论那种用户都要映射为一个系统用户。

    匿名用户:anonymous用户
    系统用户:/etc/passwd中记录的用户

    虚拟用户:建立一个系统账号,将所有账号映射到此用户访问,使用的不是系统用户账号,提高安全性


简单配置vsftpd
    rpm包安装     
1
2
3
# yum install vsftpd
        # service vsftpd on
        # chkconfig vsftpd on




vsftp配置文件调整及说明   

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
anonymous_enable=YES            #允许匿名用户登录
local_enable=YES                #是否开启系统用户
write_enable=YES                # 是否允许系统用户上传文件
anon_upload_enable=NO           #  匿名用户不可上传文件
local_umask=022                 #  上传文件的权限设定
anon_mkdir_write_enable=NO      #匿名用户不能创建目录
anon_other_write_enable=NO      #匿名用户不能删除文件
dirmessage_enable=YES           #显示用户欢迎信息,比如在/var/ftp/.message文件中写一句‘Welcome',则用户进入/var/ftp目录时,会显示此信息。                               xferlog_enable=YES              #开启日志传输
xferlog_file=/var/log/vsftpd.log   #定义日志传输文件,若不存在,请事先创建
#chown_upload                  #上传文件后将属主改为其他用户
#chown_username                #改为哪个用户,不建议root用户
connect_from_port_20=YES       #20号端口进行数据连接
idle_session_timeout =600      #控制连接超时时间
data_connection_timeout =120   #单次数据连接时间
#ascii_upload_enable=YES
#ascii_download_enable=YES     #以纯文本格式实现上传下载,有两种数据传输模式,文本和二进制,建议不要打开此项。
         
chroot_local_user=YES          #每一个用户都禁锢在家母录中
#chroot_list_file_enable=YES   #用一个文件将用户锁在家目录下
#chroot_list_file=/etc/vsftpd/chroot_list       #哪一个文件中创建一个用户列表,所有在此列表中的用户都禁锢在家目录当中。
         
listen=YES     #vsftpd是否工作为一个独立的守护进程
pam_service_name=vsftpd        #所有写在ftpuser都禁止登录ftp服务器
userlist_enable=YES            #拒绝user_list中用户登录
userlist_deny=YES              #拒绝user_list中用户登录,若改为NO则仅允许user_list 中用户登录
#max_clients                   #最大登录FTP服务器客户端的个数
#max_per_ip                    #每一个单独IP允许发起几个连接请求




基于mysql的虚拟用户
安装mysql  
1
# yum  install mysql-server mysql-devel




启动mysql  
1
2
# service mysqld start
    # chkconfig mysqld on



创建mysql数据库根用户密码
1
# mysqladmin -uroot password  'your_root_sql_password'



1
# mysql -uroot -p



输入密码进入mysql shell后,位vsftpd虚拟用户创建一个新的数据库,并赋予查询权限。
1
2
3
4
mysql> CREATE DATABASE vsftpd;
    mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'vsftpd';
    mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY 'vsftpd';
    mysql> FLUSH PRIVILEGES;




在vsftpd数据库创建表  
1
2
3
4
5
6
7
mysql>USE vsftpd;
    mysql> CREATE TABLE users (
        -> id INT AUTO_INCREMENT NOT NULL,
        -> name CHAR(30) BINARY NOT NULL,
        -> password CHAR(48) BINARY NOT NULL,
        -> PRIMARY KEY (id)
        -> );




插入连个用户,这里使用md5加密。  
1
2
mysql> INSERT INTO users (name,password) VALUES ('tom',md5('xiaoming'));
    mysql> INSERT INTO users (name,password) VALUES ('cat',md5('xiaoming'));



vsftpd.conf配置文件设置:
1
2
3
guest_enable=YES
    guest_username=viruser
    pam_service_name=vsftpd.mysql



创建一个用户viruser作为映射的用户。

注意,ftp中的匿名用户,系统用户,和虚拟用户都要映射为一个系统用户来访问。
1
2
# useradd -s /sbin/nologin -d /var/ftp_root viruser
# chmod go+rx /var/ftp_root



安装pam_mysql认证模块  

1
# yum install pam_mydql



编辑/etc/pam.d/vsftpd.mysql,添以下内容:

1
2
auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd                   table=users usercolumn=name passwdcolumn=password crypt=3
    account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd            table=users usercolumn=name passwdcolumn=password crypt=3



1
# service vsfptd restart



即可实现基于mysql的虚拟用户。

如何使不同虚拟用户具有不同的权限,例如实现创建的两个用户tom和cat,如何让tom没有上传文件的权限,而cat具有上传文件的权限呢?很简单,只需在配置文件中稍微改动即可:
vsftpd.conf配置文件设置  
1
user_config_dir=/etc/vsftpd/viruser




1
2
3
# mkdir /etc/vsftpd/viruser
# cd /etc/vsftpd/viruser
# touch tom cat



编辑tom文件,添以下内容
1
anon_upload_enable=NO



编辑cat文件,添以下内容:  
1
anon_upload_enable=YES



这样配置,便可以实现tom用户不能上传文件,而cat用户可以上传文件。是不是很简单呢?


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-54893-1-1.html 上篇帖子: linux一键下搭建vsftp脚本 下篇帖子: Centos6下vsftpd基于mysql认证创建虚拟用户 用户
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表