关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » MySQL »Debian+vsftpd+MySQL实现虚拟用户zz详解

    Debian+vsftpd+MySQL实现虚拟用户zz详解

    2011-08-23 17:26:00 出处:ITJS
    分享

    Debian+vsftpd+MySQL实现虚拟用户zz的实现方法是该篇文章我们主要要介绍的内容,接下来我们就开始一一介绍这一过程。

    一、需求

    1.虚拟用户登录

    由于之前配置成功了postfix+MySQL虚拟用户登录,体会到了使用虚拟用户的好处和灵活性,所以这次也考虑采用虚拟用户,并且将FTP虚拟用户的信息也存储在MySQL中,这样以后用PHP等写一些WEB GUI的管理程序,统一管理用户,还是蛮方便的.

    2.限制IP的匿名登录

    开放匿名登录,但是只允许特定的IP可以匿名登录

    3.不同用户,不同目录,不同权限

    听起来有点像绕口令吧,举例来说,有2个用户,分别是普通用户 (normal)和管理员(admin),FTP有2个目录,分别是incoming和pub,要实现如下权限设置:

    代码: incoming pub

    normal 读/写 只读

    admin  读/写 读/写

    4.通过FTP管理Web站点

    服务器上还架设了Apache,而网站管理员对Linux又不是很熟悉,而且也不想开放一个帐号给网站管理员,以免他登录到系统上去,把系统搞的乱78糟,所以参考Internet上提供虚拟主机的流行做法,就是通过FTP来管理网站,所以需要提供一个可供网站管理员登录FTP进行网站管理的帐号.

    二、选择FTP服务器软件

    Linux下架设FTP站点,有很多优秀的FTP服务器软件可供选择,例如Wu-FTPD,Pure-FTPD,ProFTPD以及vsFTPD等等, 要想选择一个适合自己需求的FTP服务器软件,也需要费点脑筋才行,对于我来说,选择 vsftpd(very secure FTP daemon),主要有以下两点原因:

    1.选择原则一

    有人说,哪个FTPD是你最熟悉的就用哪个,不过由于我之前没有在Linux下架设FTP站点的经验,所以,对我来说,一切都是新的起点.在vsftpd的官方主页上看到了Debian官方FTP,RH官方FTP等都使用了vsftpd。

    2.选择原则二

    第二点很大程度取决于vsftpd(very secure FTP daemon)的名字,因为它是很安全的FTP软件嘛,哈哈,再说Debian官方等FTP都使用了vsftpd,选择它应该没错的。

    PS:FTP服务器软件的选择可以参考"鸟哥的Linux私房菜中的简易vsftpd服务器架设"一文.

    三、实现方法

    基于Debian GNU/Linux 3.1 Sarge 和 vsftpd-2.0.3

    1.需要的软件包

    1).vsftpd:very secure FTP daemon

    2).mysql-server,mysql-client

    前者是MySQL数据库服务器,用于存储虚拟用户信息,后者提供一个命令行的MySQL Client. 由于我之前配置postfix时,已经安装过了MySQL,所以我不必安装这个包了^_^

    3).libpam-mysql:vsftpd是通过PAM验证用户信息的,这个包可以让PAM去读取MySQL完成验证.

    2.安装

    以root登录Debian,输入以下命令:代码:#apt-get install vsftpd,libpam-mysql。

    3.创建一个必要的本地用户

    虽说是虚拟用户,不过,由于虚拟用户的信息存储在MySQL数据库中,所以还是需要一个能够读取MySQL数据库的本地用户.

    1),创建本地用户的家目录,此目录也是FTP的家目录:代码:#mkdir /home/ftp

    2),创建名为 ftpguest的本地用户:代码:#useradd ftpguest -d /home/ftp

    3),修改FTP家目录的所有者和组:代码:#chown ftpguest.nogroup /home/ftp

    4,配置MySQL数据库

    1),创建用于存储虚拟用户信息的数据库ftpvuser:代码:#mysqladmin -u root -p create ftpvuser

    2),连接数据库:代码:#mysql -u root -p

    3)创建用于存储虚拟用户信息的表users:代码:mysql>use ftpvuser;

    mysql>CREATE TABLE users (username varchar(20) NOT NULL,password varchar(40) NOT NULL,PRIMARY KEY (username)) TYPE=MyISAM;

    4)让本地用户ftpguest 能读取ftpvuser数据库的users表的内容。注:YourPassword用于设定ftpguest访问数据库的密码.

    代码:

    mysql>grant select on ftpvuser.users to ftpguest@localhost identified by 'YourPassword';  mysql>flush privileges; 

    5),建立虚拟用户

    代码:

    mysql>insert into users (username,password) values ('normal','555555');  mysql>insert into users (username,password) values ('admin','666666');  mysql>insert into users (username,password) values ('webmaster','777777'); 

    6),完成MySQL的配置:代码:mysql>quit;

    5,配置vsftpd 的PAM验证

    1),打开PAM配置文件:代码:#nano /etc/pam.d/vsftpd

    2),将以前的内容注释掉,然后添加下面2行内容。

    注:YourPassword就是刚才在前面设定的ftpguest访问数据库的密码.

    代码:

    auth required pam_mysql.so user=ftpguest passwd=YourPassword host=localhost   db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0 account required pam_mysql.so user=ftpguest passwd=YourPassword host=localhost db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0 

    6,配置vsftpd

    1),打开vsftpd的配置文件

    代码:#nano /etc/vsftpd.conf注意:一旦修改了/etc/vsftpd.conf文件的内容,必须重启vsftpd才能使新的设置生效,方法是:代码:#/etc/init.d/vsftpd stop

    #/etc/init.d/vsftpd start直接#/etc/init.d/vsftpd restart,好像不起作用

    2),修改vsftpd.conf文件如下:

    代码:#关闭匿名用户访问

    #anonymous_enable=YES

    # 开启本地用户访问

    local_enable=YES

    #开启虚拟用户访问

    guest_enable=YES

    guest_username=ftpguest

    #将本地用户限制在自己的家目录,这样可避免FTP用户访问到其他的系统目录

    chroot_local_user=YES

    3),500 OOPS: cap_set_proc

    赶快登录FTP试一下吧,不过为什么无法登录呢 服务器返回错误:500 OOPS: cap_set_proc

    Google之,这个错误似乎与SELinux有关,解决办法是加载capability模块:

    代码:#modprobe capability为了让Linux在启动时自动加载此模块,把这个模块放到/etc /modules中即可.

    4),限制IP的匿名登录

    要想限制登录vsftpd的客户端的IP地址,要用到一个叫 TCP Wrappers的东东,对于TCP Wrappers,我的理解是,如果在vsftpd中启用了TCP Wrappers的话,每次客户端向vsftpd发起一个连接请求的时候,vsftpd首先会把这个连接请求交给TCP Wrappers处理,如果客户端的IP被TCP Wrappers放行的话,才能继续与vsftpd继续会话,否则,直接就被拒绝服务了,不知道对不对

    a,修改/etc /vsftpd.conf

    代码:#启用TCP Wrappers

    tcp_wrappers=YES

    b,修改/etc/hosts.deny

    拒绝所有向vsftpd发起连接请求的IP,不过,如果hosts.deny与 hosts.allow冲突的话,以hosts.allow优先处理,这好像就是,先deny所有,然后在hosts.allow开放特权,呵呵

    代码:#拒绝所有连入vsftpd的IP先.

    vsftpd: ALL

    c,修改 /etc/hosts.allow

    在这里开放允许登录vsftpd的IP地址关于VSFTPD_LOAD_CONF环境变量,vsftpd的man是这么说的:

    "If tcp_wrappers sets the VSFTPD_LOAD_CONF environment variable, then the vsftpd session will try and load the vsftpd configuration file specified in this variable. "

    代码:# 限制可以匿名登录vsftpd的IP地址

    vsftpd: 192.168.0.,210.83.200.200 : setenv VSFTPD_LOAD_CONF /etc/vsftpd/vsftpd.anonymous

    #允许vsftpd的虚拟用户以任何IP连接 FTP

    vsftpd: ALL : setenv VSFTPD_LOAD_CONF /etc/vsftpd/vsftpd.virtual

    d,修改/etc/vsftpd/vsftpd.anonymous

    代码:#mkdir /etc/vsftpd/

    #nano /etc/vsftpd/vsftpd.anonymous

    #允许匿名登录

    anonymous_enable=YES

    e,修改/etc/vsftpd/vsftpd.virtual

    代码:#nano /etc/vsftpd/vsftpd.virtual

    #不允许匿名登录

    anonymous_enable=NO

    5),为不同的用户设置不同的访问权限

    a,激活单个用户配置功能,增加以下配置行到vsftpd的配置文件:

    代码:#nano /etc/vsftpd.conf

    #指定不同用户配置文件的存放路径

    user_config_dir=/etc/vsftpd/vsftpd_user_conf

    b,普通用户:下载/上传

    编辑/etc/vsftpd/vsftpd_user_conf/normal

    注意:用户的配置文件名与用户名一致,不过匿名用户的配置文件名为ftp,而不是anonymous

    代码:#mkdir /etc/vsftpd/vsftpd_user_conf

    #nano /etc/vsftpd/vsftpd_user_conf/normal加入以下内容:

    #允许下载

    代码:anon_world_readable_only=NO

    #允许写入,上传以及建立目录

    write_enable=YES

    anon_upload_enable=YES

    anon_mkdir_write_enable=YES

    c,管理员用户:下载/上传/删除等.

    代码:#cp /etc/vsftpd/vsftpd_user_conf/normal /etc/vsftpd/vsftpd_user_conf/admin编辑admin的配置文件:

    代码:#nano /etc/vsftpd/vsftpd_user_conf/admin管理员除了拥有普通用户的权限以外,还拥有删除/重命名/改变文件属性的权限

    加入以下内容:

    代码:#允许重命名和删除文件

    anon_other_write_enable=YES

    #虚拟用户拥有与本地用户相同的权限(由于chmod仅仅对本地用户有效,所以如果想要虚拟用户拥有chmod的权限,这一项必须激活)

    virtual_use_local_privs=YES

    #允许修改文件属性

    chmod_enable=YES

    d,网站管理员

    代码:#cp /etc/vsftpd/vsftpd_user_conf/admin /etc/vsftpd/vsftpd_user_conf/webmaster编辑webmaster的配置文件:

    代码:#nano /etc/vsftpd/vsftpd_user_conf/webmaster

    加入以下内容:

    代码:#将FTP家目录指向网站的家目录(我的www目录使用Apache默认的目录)

    local_root=/var/www

    # 默认情况下,上传到FTP站点的文件的拥有者都是ftpguest,其他用户是没有访问权限的

    #所以,当访问网站的时候,会出现"没有权限访问该文件的错误",这是由于Apache的用户

    #www-data无法访问/var/www下的文件造成的,把umask设置成033甚至000即可解决这个问题.

    local_umask=033

    e,为normal,admin用户设置对 incoming,pub目录不同的权限

    阅读了一遍vsftpd man中关于权限的相关设置,似乎没有单独设置每个目录权限的地方 后来想到是不是可以利用Linux文件系统的文件权限设置来达到此目的,以前在 Windows下利用IIS来架设站点时,我就是利用NTFS权限设置来达到控制不同用户对目录的访问权限.不过试了一下,还是无法完美的实现以下的权限控制:

    代码: incoming pub

    normal 读/写 只读

    admin  读/写 读/写举例来说,可以通过把pub设置成只读来控制normal用户只读pub的权限,不过admin对pub也是只读了不过,还好,因为admin拥有修改目录属性的权限,如果admin用户想要通过FTP来完成管理pub目录的话,可以临时把pub目录修改成读/写属性.

    四、小结

    1.vsftpd的目标是完成一个简易而且安全性不低的FTPD,功能嘛,似乎还是有点不足,特别是目录权限这方面的设置如果是对目录权限有比较复杂的需求的话,可以考虑一下Proftpd .

    2.在测试的时候,除了使用FTP Client工具以外,最好再使用Sniffer类的软件作为辅助,因为有时候FTP Client并不会完全把FTPD返回信息呈现在你面前,而有时候,这些信息对排除FTPD故障会有很大帮助的,而一旦使用Sniffer类的软件,所有的客户端与服务器端交互的信息都不会漏掉的。

    关于Debian+vsftpd+MySQL实现虚拟用户zz的实现方法就介绍到这里了,希望本次的介绍能够对您有所收获!

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。