手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:vsftpd

vsftp + mysql的架设文档

上次介绍的vsftpd的配置是官方文档,这次是COPY来的,相对也是比较方便的,而且改动也很少。
只是需要libpam-mysql,mysql-dev等包。如果是基于ubuntu,那就实在是方便多了。都可以apt回来。。
OK,还是来原文吧,内容有点长,慢慢看就OK了:http://www.extmail.org/forum/thread-5427-1-1.html

   VSFTP+MySQL虚拟用户配置

   参考
       [url]http://www.mysql-china.com/bbs/archiver/?tid-114.html[/url]
       [url]http://blog.chinaunix.net/u1/39544/showart_310591.html[/url]
    VSFTPD是一种在UNIX/Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中。VSFTPD称这种形式的用户为虚拟用户。相对于FTP的本地(系统)用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。
    环境:
       操作系统: centos 4
       流程图:   user --> vsftpd-2.0.1 --> pam_mysql-0.71 --> mysql-server-4.1

1,初始化centos升级服务器.
# vi /etc/yum.repos.d/CentOS-Base.repo
=============== 代码 { ================================================
[base]
name=CentOS-4 - Base
baseurl=http://mirror.be10.com/centos/4/os/i386/
gpgcheck=1

#released updates
[update]
name=CentOS-4 - Updates
baseurl=http://mirror.be10.com/centos/4/updates/i386/
gpgcheck=1

#packages used/produced in the build but not released
[addons]
name=CentOS-4 - Addons
baseurl=http://mirror.be10.com/centos/4/addons/i386/
gpgcheck=1

#additional packages that may be useful
[extras]
name=CentOS-4 - Extras
baseurl=http://mirror.be10.com/centos/4/extras/i386/
gpgcheck=1

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-4 - Plus
baseurl=http://mirror.be10.com/centos/4/centosplus/i386/
gpgcheck=1
enabled=0

#contrib - packages by Centos Users
[contrib]
name=CentOS-4 - Contrib
baseurl=http://mirror.be10.com/centos/4/contrib/i386/
gpgcheck=1
enabled=0

#packages in testing
[testing]
name=CentOS-4 - Testing
baseurl=http://mirror.be10.com/centos/4/testing/i386/
gpgcheck=1
enabled=0
=============== 代码 } =================================================

# rpm -import [url]http://mirror.be10.com/centos/RPM-GPG-KEY-CentOS-4[/url]

2.安装所要软件包:
   # yum -y install mysql-server*
   # yum -y install vsftpd
   # yum -y install vim*

3.建立系统用户,用户ftp登录时访问目录权限.但用户不允许登录.
   # useradd vsftpdguest
   # vi /etc/passwd
============= 代码 { =====================================
vsftpdguest:x:501:501::/home/vsftpdguest:/bin/nologin
============= 代码 } =====================================

4.将虚拟用户保存在MySQL数据库服务器中
      建立数据库vsftpdvu,表users,字段name和passwd用于保存虚拟用户的用户名和口令,增加两个虚拟用户q和ftp1。
# service mysqld start
    # mysql
mysql> create database vsftpdvu;
mysql> use vsftpdvu;
mysql> create table users(name char(16) binary,passwd char(16) binary);
mysql> insert into users (name,passwd) values ('q','q');
mysql> insert into users (name,passwd) values ('ftp1','success8');
mysql> quit
   
      授权vsftpdguest可以读vsftpdvu数据库的users表。执行以下命令:
# mysql -u root mysql -p
mysql> grant select on vsftpdvu.users to vsftpdguest@localhost identified by 'i52serial0';
mysql> quit;
      
       验证刚才的操作是否成功可以执行下面命令:
# mysql -u vsftpdguest -pi52serial0 vsftpdvu
mysql> select * from users;

5.设置MySQL的PAM验证(pam_mysql.so)
        利用mysql进行pam验证的开源项目([url]http://sourceforge.net/projects/[/url]),主要目的是生成 pam_mysql.so文件
# tar xvzf pam_mysql-0.5.tar.gz
# cd pam_mysql
# make
# make install
   make install这一步可能会出现错误,那只好手动将该目录下生成的pam_mysql.so复制到/lib/security目录下。
  
       设置vsftpd的PAM验证文件。打开/etc/pam.d/vsftpd文件,修改内容:
    # vi /etc/pam.d/vsftpd
    ======================== 代码 { ======================================
#%PAM-1.0
    #auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
    #auth       required    pam_stack.so service=system-auth
    #auth       required    pam_shells.so
    #account    required    pam_stack.so service=system-auth
    #session    required    pam_stack.so service=system-auth
    auth required pam_mysql.so user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=0
account required pam_mysql.so user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=0
    ======================== 代码 { ======================================  
      上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式:crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过MySQL的password()函数加密后保存,但是使用了crypt=2时会出错,可能是pam_mysql.so文件问题.

6.设置vsftpd 登录模式:
    # vi /etc/vsftpd/vsftpd.conf
    ======================= 代码 { ==============================
    local_enable=yes   <--本地用户登录权限,要开启
    pam_service_name=vsftpd  <--验证文件/etc/pam.d/目录下
    anonymous_enable=NO   <--取消匿名登录
    guest_enable=YES      <--除了匿名用户外的所有用户都是guest
    guest_username=vsftpdguest  <--初了匿名用户外的所有用户使用vsftpdguest
    ======================= 代码 } ==============================
7.重启mysql、vsftpd数据库,进行测试:
    # service mysqld restart
    # service vsftpd restart

8.进一步的虚拟用户设置
      首先,介绍虚拟用户的权限设置。
       新添了virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。
      当virtual_use_local_privs=YES时,只需设置write_enable=YES,虚拟用户就可以就拥有写权限。
         当virtual_use_local_privs=NO时,对虚拟用户权限的设置就更多一些更严格一些。
         控制虚拟用户浏览目录:如果让用户不能浏览目录,但仍可以对文件操作,那么需要执行以下二个步骤:
             第一步骤:配置文件中:
                       anon_world_readable_only=YES
             允许虚拟用户上传文件:  write_enable=YES
                                    anon_upload_enable=YES
             允许虚拟用户修改文件名和删除文件:    anon_other_write_enable=YES
             第二步骤:虚拟用户目录的权限改为只能由vsftpdguest操作:
                # chown vsftpdguest.vsftpdguest /home/vsftpdguest
                # chmod 700 /home/vsftpdguest
         由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限,最好是禁止匿名用户登录。

    其次,由于虚拟用户在系统中是vsftpdguest身份,所以可以访问到系统的其他目录。为了更加安全,我们可以将虚拟用户限制在自家目录下。有两种做法:
          第一种做法:在配置文件中修改
                   chroot_local_user=YES。
            第二种做法:在配置文件中增加以下选项
               chroot_local_user=NO
               chroot_list_enable=YES
              chroot_list_file=/etc/vsftpd.chroot_list
              然后,在/etc/vsftpd.chroot_list文件中加入虚拟用户名q和ftp1。
        经过修改后,虚拟用户登录后其根目录就限制在/home/vsftpdguest下,无法访问其他目录。

9.虚拟用户个人目录(没有测试)
  登录后所在的目录都是/home/vsftpdguest,即都是guest_username用户的自家目录。为每个虚拟用户建立自家目录。
      首先,在主配置文件中加入以下选项:
           # vi /etc/vsftpd/vsftpd.conf
                 user_config_dir=/etc/vsftpd/vsftpd_user_conf
  然后,生成/etc/vsftpd/vsftpd_user_conf目录,并在该目录下建立与特定虚拟用户同名的文件:
       # mkdir /etc/vsftpd/vsftpd_user_conf
       # cd /etc/vsftpd/vsftpd_user_conf
       # touch q
       以上操作为虚拟用户q建立了个人配置文件/etc/vsftpd/vsftpd_user_conf/q.
      接下来,在q的个人配置文件中将 q虚拟用户的自家目录修改为/home/q,配置选项为:
       local_root=/home/q
  最后,新建q目录,并将权限设为vsftpdguest:
      # mkdir /home/q
      # chown vsftpdguest.vsftpdguest /home/q
      # chmod 600 /home/q
    经过以上设置,q登录VSFTPD后,用“pwd”指令就可以发现被自己被定位到自己的“/home/q”目录。
   从文件系统层次来看,由于“/home/q”目录的权限是属于vsftpdguest的,所以其他的虚拟用户同样也可以访问q的自家目录。
   解决这个问题也很简单,只需要让VSFTPD负责将虚拟用户限制在其自家目录,就可以避免虚拟用户的互相访问。具体做法参照前面第8步中所述。经过以上设置后,虚拟用户就可以拥有属于自己的目录了。
   使用user_config_dir参数,在每个用户独立的配置文件里设定不同的权限和local_root参数就可以了

帮助:
在第5步处可以对程序进行调整:
  # vi /etc/vsftpd/vsftpd.conf  查看ftp连接情况
     log_ftp_protocol=YES
     dual_log_enable=YES
     syslog_enable=YES  
  # vi /etc/pam.d/vsftpd 调试pam_mysql连接情况
     auth   required      /usr/local/lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 verbose=1
     account  required    /usr/local/lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 verbose=1

---------
最后,你在上传的时候会发现,文件权限都是600,看vsftpd.conf里,有一个local_umask,上面还有注释,如果要改改成022,大多数Ftpd都是这么配置的。
关于umask为什么是022,可以查看老王的文章:Umask补习班
里面有这么一句:注:权限计算实际上是二进制位的与操作,参考All About the umask and Permissions

Tags: vsftpd

备份:最简单的pure-ftp配置搭建ftp服务器

又是google来的一篇备份性的文章,经测试成功了。所以备份下来:http://hi.baidu.com/sunnynatinc/blog/item/bd50e5ced55ed80e93457e38.html
OK,上原文:

使用pure-ftp最头疼的估计是要使用mysql做数据库和使用web管理了
其实就算没有装或不使用mysql也一样可以顺利且简便的使用pure-ftp搭建ftp服务器
下面介绍一下简单配置的经过


1、当然是取得pure-ftp了,直接在线安装,命令:
$ sudo apt-get install pure-ftpd       即可安装。


2、测试:当安装好以后没有进行配置的时候,ftp指向的默认目录是/home文件夹,如果使用ftp客户端软件链接127.0.0.1:21,提示你输入用户名和密码,则ftp已经安装好了。

3、配置:

1)了解pure-ftpd调用配置文件的方式。pure-ftp不是调用某一个配置文件,而是调用/etc/pure-ftpd/conf/中的一堆文 件进行配置加载,这和samba,apache配置有所区别。每一个配置文件其实只有一行,要么yes,要么no,或者1,0等等,比较方便定义。

2)开始进行基本配置。
进入到/etc/pure-ftpd/conf中,这里记下目录和目录中文件的权限,分别是755和644。
列目录为以下情况,只有   AltLog    MinUID    NoAnonymous     PAMAuthentication    PureDB    UnixAuthentication等文件,这些文件都是配置文件。光有这些还不够,因此自己还要添加其他配置文件。

编辑基本配置,如监听21端口,使用某IP地址:
$ su                         #切换到root
(如果没有设置root账号是没有办法切换的,可以不切换,回到上层菜单将conf/的(包含子目录)权限设置为777,$ sudo chmod -R 777 conf/ 即可使用nano编写,编写完毕之后恢复目录755及文件644的属性),或者对shell脚本熟悉的可以使用sudo sh -c “echo 'xxx' > XXX" 来编写添加配置文件。以下均使用root权限编写。

监听端口
# echo ,21 > Bind                ****添加bind 21端口监听     如果没有root权限则可以这样 $ sudo nano Bind    然后在其中编辑,21后保存退出,或 $ sudo sh -c "echo ',21' > Bind"   来添加
# echo 192.xx.xx.22 > ForcePassiveIP         ****添加IP
# echo 4500 4600 > PassivePortRange       ****添加端口范围

字符编码及文件设置
文件FSCharset中设定为UTF-8,这样有的在使用浏览器ftp的时候会出现中文乱码,增加一个客户端字符编码文件就可以解决
# echo gbk > ClientCharset                   ****(或gbk2132) 都可以
# echo yes > KeepAllFiles                     ****保留所有文件,用户不能删除文件
# echo yes > AutoRename                    ****自动更名,防止文件被覆盖

推荐的安全配置
#
echo yes > ChrootEveryone                        ****限制用户root权限
# echo yes > ProhibitDotFilesRead                ****可以读取以.开头的文件
# echo yes > ProhibitDotFilesWrite               
****可以写以.开头的文件
# echo yes > NoChmod                                 ****不允许更改权限
# echo yes > BrokenClients
Compatibility       ****多种兼容性客户端

网络设置
# echo 4 > MaxClientsPerIP                          ****每个IP最大连接数
# echo 20 > MaxClientsNumber                    ****客户端同时链接最大数

3)设置认证方式,将unix和PAM认证都设置为“no“,这一步中本身目录中就有这两个文件,只要修改其字符就可以了,unix原来就是no,用nano将PAM中的yes改为no就可以。如果没有这两个文件,则自己添加。
# echo no > PAMAuthentication
# echo no > UnixAuthentication
# echo /etc/pure-ftpd/pureftpd.pdb > PureDB        ****建立pure-ftp的认证文件   这句可以使用nano建立PureDB文件,其内容为
/etc/pure-ftpd/pureftpd.pdb
# ln -s /etc/pure-ftpd/conf/PureDB   ../auth/50pure      ****建立认证链接文件

创建用户和指定ftp目录
# groupadd -g 2001 ftpgroup           ****增加GID为2001的ftpgroup组
# useradd -u 2001 -s /bin/false -d /dev/null -c "pureftpd user" -g ftpgroup ftpuser         ****增加ftpuser用户,切没有/bin的shell操作与/dev的设备操作权
使用pure-pw命令添加虚拟用户
# pure-pw useradd yourname -u ftpuser -d /yourname/ftp/              ****增加(yourname)用户并指定ftp目录为
/yourname/ftp/   这里根据实际情况自行修改
回车后就提示输入密码(输入2次)
# pure-pw mkdb                ****添加进认证数据文件

最后重启pure-ftpd
# /etc/init.d/pure-ftpd restart

如果仅仅是单位或定向ftp,则只添加一个账户就可以了,便于管理。如果使用所账户或可以匿名登录的,那就需要使用mysql的数据库来管理,配置也不繁 琐。 如果觉得还不够安全可以使用openssl来添加TLS/SSL支持,激活一个私有证书,这样传输内容经过加密,就更安全。

4)“关于ssl“
安装: # apt-get install openssl
# echo 1 > TLS                      ****打开TLS加密
# openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out
/etc/ssl/private/pure-ftpd.pem                      ****生成加密文件
# chmod 600 /etc/ssl/private/pure-ftpd.pem                          ****更改加密文件权限
重启pure-ftpd生效

5)“关于FXP协议“
如果只是内网或认证用户使用ftp,则可以打开FXP协议。由于FXP协议很不安全,不建议外网或允许匿名访问的ftp服务器打开FXP协议支持。

4、至此一个完整的ftp服务器就架构好了,可以使用任何一种ftp客户端登录使用。多用户还可以分别指定其目录或自动生成目录,设置目录UMASK等等,总体来说 功能还是很强大的。

------------
果然是超级简单的FTP服务器

Tags: pure-ftpd, vsftpd

Vsftpd虚拟用户设置

来自官方的wiki:http://wiki.ubuntu.org.cn/Vsftpd%E8%99%9A%E6%8B%9F%E7%94%A8%E6%88%B7%E8%AE%BE%E7%BD%AE
做个备份。简单配置vsftpd

目标

首先我们假定你已经安装了vsftpd,并在/home/vsftpd 目录下建立了以下3个子目录

  • dbzh1
  • dbzh2
  • dbzh3

下面,我们要建3个虚拟用户,密码分别是用户名后加"00"

  • db1
  • db2
  • db3

使得

  • 用户db1 的主目录为 dbzh1 ,在该目录下只有只读权限
  • 用户db2 的主目录为 dbzh2,在该目录下只有只读权限
  • 用户db3 的主目录为 dbzh3 ,在该目录下拥有所有权限

创建虚拟用户数据库

创建文本文件loguser.txt

格式如下:

XML/HTML代码
  1. user_id  
  2. password  

 

于是,我们/home/loguser.txt文件的内容为

XML/HTML代码
  1. db1  
  2. db100   
  3. db2   
  4. db200   
  5. db3   
  6. db300 

生成数据库

如果你以前没装过libdb4.6-util 或者你不清楚装没装,需先执行下面的命令

sudo apt-get install db4.6-util

然后,我们执行

sudo db4.6_load -T -t hash -f /home/loguser.txt /etc/vsftpd_login.db


最后设置一下数据库文件的访问权限

sudo chmod 600 /etc/vsftpd_login.db

配置PAM文件

编辑文件/etc/pam.d/vsftpd.vu 将以下内容增加的原文件前面两行:

XML/HTML代码
  1. auth required pam_userdb.so db=/etc/vsftpd_login  
  2. account required pam_userdb.so db=/etc/vsftpd_login 
  • 我们上一步建立的数据库 vsftpd_login 在此处被使用
  • 我们建立的虚拟用户将采用PAM进行验证,这是通过/etc/vsftpd.conf文件中的 语句pam_service_name=vsftpd.vu来启用的,稍后你将发现。

为虚拟用户创建本地系统用户

新建一个系统用户vsftpd,用户家目录为/home/vsftpd, 用户登录终端设为/bin/false(即使之不能登录系统)

XML/HTML代码
  1. sudo useradd vsftpd -d /home/vsftpd -s /bin/false  
  2. sudo chown vsftpd:vsftpd /home/vsftpd  

/etc/vsftpd.conf

根据需要创建/etc/vsftpd.conf,一般要确保含有以下设置:

XML/HTML代码
  1. listen=YES  
  2. anonymous_enable=NO   
  3. dirmessage_enable=YES   
  4. xferlog_enable=YES   
  5. xferlog_file=/var/log/vsftpd.log   
  6. xferlog_std_format=YES   
  7. chroot_local_user=YES   
  8. guest_enable=YES   
  9. guest_username=vsftpd  
  10. user_config_dir=/etc/vsftpd_user_conf   
  11. pam_service_name=vsftpd.vu   
  12. local_enable=YES   
  13. secure_chroot_dir=/var/run/vsftpd  

现在为止,我们的3个用户都可以工作了,可是它们的根目录现在都是/home/vsftpd,权限也都一样。 那么怎么才能完成我们预定的目标呢?

/etc/vsftpd_user_conf

在上面的配置中,有这么一行

user_config_dir=/etc/vsftpd_user_conf

现在,我们要把各个用户的配置文件放到目录/etc/vsftpd_user_conf中

XML/HTML代码
  1. sudo mkdir /etc/vsftpd_user_conf  
  2. cd /etc/vsftpd_user_conf   
  3. sudo touch db1 db2 db3  

db1文件中的内容如下

local_root=/home/vsftpd/dbzh1

同样,db2文件中的内容

local_root=/home/vsftpd/dbzh2

那么,db3的内容呢? 其实也很简单

write_enable=YES anon_world_readable_only=NO  anon_upload_enable=YES  anon_mkdir_write_enable=YES  anon_other_write_enable=YES  local_root=/home/vsftpd/dbzh3

这里要注意不能有空格,不然登录的时候会提示出错。 我的这里面也有问题,

能成?

重启vsftpd我们就可以看到效果了^_^

/etc/init.d/vsftpd start|restart

 

500 OOPS: cannot change directory:

linux打开ftp遇到的问题 500 OOPS: cannot change directory:

google好多都是 执行这个就OK setsebool ftpd_disable_trans 1 service vsftpd restart

但是执行的时候遇到这个问题  Could not change active booleans: Invalid boolean

搜了好久终于解决

setsebool -P ftp_home_dir=1

Tags: vsftpd