vsftp本地用户,虚拟用户,匿名用户同时工作

vsftpd+mysql  实现本地用户,匿名用户,虚拟用户同时工作



大纲

1.安装vsftpd mysql  pam-mysql

2.添加虚拟用户(使用本地数据库和数据库服务器)

3.实现本地用户,匿名用户,虚拟用户同时工作

4.说下vsftpd.conf文件的内容

vsftp本地用户,虚拟用户,匿名用户同时工作_第1张图片

一、安装

先说下环境我是在centos 5.6下做的  安装vsftpd mysql

vsftpdmysql是使用yum源安装的,pam_mysql使用编译安装的是因为我没找到rpm软件包!!!

首先安装vsftpd+mysql  以及必要软件(pam_mysql db4*

yum install vsftpdmysql  db4* -y

编译安装需要用以下软件:

yum install gcc gcc-c++ pam-devel mysql-devel    也还需要更多的开发工具,到时只需使用

使用下面的命令与地址下载pam_mysql

wget http://downloads.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz?use_mirror=nchc


解压和安装

tar zxf pam_mysql-0.7RC1.tar.gz -C /tmp/

cd /tmp/pam_mysql-0.7RC1/

./configure --with-openssl

make

make install

当使用find / -name pam_mysql.so命令找到pam_mysql.so时就是代表安装成功了。

ls /usr/lib/security/pam_mysql.so  #查看下是否有这个文件存在


pam_mysql的安装可以参考下面的内容:

http://bbs.51cto.com/thread-825165-1.html


二、添加虚拟用户

虚拟用户可以使用两种方式添加 mysql数据和db4工具生成的数据文件。


建立虚拟用户使用的系统帐户virtual

这个帐户不需要登录所以将他的home设为/var/ftp/   或者不指定

useradd -d /var/ftp/ -s /sbn/nologin virtual

chown virtual.virtual /var/ftp   #ftp目录的属主和属组改为virtual


1.使用mysql添加虚拟用户
建立vsftpd使用的mysql数据库和表,并插入用户名和密码到表中:

mysqladmin -u root password 'your_Passw0rd'

mysql �Cu root �Cp

mysql>create database vsftpd

mysql>use vsftpd

mysql>create table users(name char(20),password char(20))

mysql> insert into users(name,password) values ('pei','pei')

mysql> insert into ftpusers(name,password) values ('admin','12345')

mysql>grant allon vsftpd.users to virtual@localhost identified by 'passwd'

mysql>quit


编辑pam文件加入以下内容:

vim /etc/pam.d/vsftpd

auth        sufficient   /usr/lib/security/pam_mysql.so user=virtual passwd=majinlong host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0

account     sufficient  /usr/lib/security/pam_mysql.so  user=virtual passwd=majinlong host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0


除以上内容外的其他内容全部使用#号注释掉

注意:

crypt= n

crypt=0:明文密码

crypt=1:使用crpyt()函数(对应SQL数据里的encrypt()encrypt()随机产生salt)

crypt=2:使用MYSQL中的password()函数加密

crypt=3:表示使用md5的散列方式


虚拟用户的vsftpd.conf配置文件内容

#virtual users

guest_enable=YES         启用虚拟用户

guest_username=virtual        虚拟用户使用的系统账户

virtual_use_local_privs=NO    虚拟用户和本地用户是否有相同的权限

user_config_dir=/etc/etc/vsftpd_user_config  单独的用户配置文件位置


2.使用本地数据添加虚拟用户

添加虚拟用户口令文件格式如下:

user

passwd

例如:

vi user.txt

admin

12345


生虚拟用户口令认证数据库文件,需要使用db4-utils软件

db_load -T -t hash -f 口令文件的路径 生成后的数据认证文件

db_load -T -t hash -f user.txt /etc/vsftpd/vuser.db


编辑pam文件  加入下面两行:

auth    sufficient     pam_userdb.so db=/etc/vsftpd/vuser
account sufficient      pam_userdb.so db=/etc/vsftpd/vuser

其他的内容全部使用#号注释掉


虚拟用户的vsftpd.conf配置文件内容

#virtual users

guest_enable=YES               启用虚拟用户

guest_username=virtual            虚拟用户使用的系统账户

virtual_use_local_privs=NO          虚拟用户和本地用户是否有相同的权限

user_config_dir=/etc/etc/vsftpd_user_config   //单独的用户配置文件位置


注意:从头到尾pam_service_name=vsftpd这个选项都没有动过,因为我们一直在修改/etc/pam.d/vsftpd这个文件,没有建立新的pam文件所以不需要改变这一项。


至此虚拟用户的内容就完了下面可以使用虚拟用户测试下



三、实现本地用户,匿名用户,虚拟用户同时工作

实现本地用户,匿名用户,虚拟用户同时工作的方法有两种:

一个是添加多个vsftpd.conf配置文件,修改监听端口使其工作在21端口以外的端口上

一个是修改pam文件使vsftpd直接支持本地,匿名和虚拟用户同时登录


上面第一种方法不是很难,网上有许多教程,我使用的是第二种方法下面就说下怎么实现的:


修改后完整的pam文件/etc/pam.d/vsftpd的内容如下:
auth        sufficient   /usr/lib/security/pam_mysql.so user=virtual passwd=majinlong host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
account     sufficient  /usr/lib/security/pam_mysql.so  user=virtual passwd=majinlong host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
#auth       required    pam_listfiles.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed不允许ftpusers文件中的用户登录
#auth       required    pam_shell.so这个还不太清楚
auth        include     system-auth认证本地用户的默认选项
account     include     system-auth认证本地用户的默认选项
session     include     system-auth认证本地用户的默认选项
session     required    pam_loginuid.so认证系统用户的默认选项
#session            optional    pam_keyinit.so force revoke可有可无
如果想弄清楚上面的内容具体是什么意思建议参考下‘pam百度百科’


大家可以参考下
http://spazzzz.blog.51cto.com/2707720/677799


一般第一列指定的内容是:module-type,一共就只有4种,分别是:

1 auth:对用户身份进行识别,如提示输入密码,判断是root否;

2 account:对账号各项属性进行检查,如是否允许登录,是否达到最大用户数;

3 session:定义登录前,及退出后所要进行的操作,如登录连接信息,用户数据的打开和关闭,挂载fs

4 password:使用用户信息来更新数据,如修改用户密码。

第二列内容是:control-flag,有很多,不过一般常用的是4种,分别是:

5 optional:不进行成功与否的返回,一般返回一个pam_ignore

6 required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败;

7 requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败;

8 sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。

第三列内容是PAM模块的存放路径,默认是在/lib/security/目录下,如果在此默认路径下,要填写绝对路径。

第四列内容是PAM模块参数,这个需要根据所使用的模块来添加。


四、详解vsftpd.conf文件的内容

1. 匿名及本地用户共同参数

listen=yes  //vsftpd工作在standalone 模式下

write_enable=yes/no //是否允许全局可写

download_enable=yes/no //是否允许所有用户可以下载

dirlist_enable=yes/no //是否允许所有用户可以浏览(列出文件列表)

pam_service_name=vsftpd  


ftpd_banner=欢迎语字符串

banner_file=文件

dirmessage_enable=yes/no

message_file=文件


参数ftpd_banner设置的欢迎语字符串将在登录时看到,如果想做出多行欢迎语,就要把内容单独存为banner_file参数指定的文件,应用中 这两个参数二选一即可。dirmessage_enablemessage_file参数是进入某个目录后显示的欢迎信息,用法与前两个参数一样。


2.本地用户

local_root=/path //本地用户登陆服务器后直接进入的目录  

local_umask=八进制数 //本地用户上传档案权限的 umask值  

local_max_rate=数字 //本地用户传输速率单位为 bps  

chmod_enable=yes/no // 是否允许本地用户改变ftp 服务器上档案的权限  

user_config_dir=/path //用户单独配置文件所在目录

userlist_enable=yes/no //是否启用 userlist 功能模块  

userlist_deny=yes/no //是否拒绝 userlist 文件中用户登陆 ftp 服务  

userlist_file=/path/to/file //指定的 userlist 文件名  

chroot_list_enable=yes/no //是否启用 chroot_list 文件  

chroot_local_user=yes/no //是否限制本地用户的根目录为自己的主目录  

chroot_list_file=/path/to/file //设置 chrootlist 文件名


3.匿名用户

anonymous_enable=YES /NO    //是否允许匿名访问

no_anon_password=YES  //匿名用户不需要输入密码

anon_root=/var/ftp    //设置匿名用户的FTP根目录(缺省为/var/ftp)

anon_upload_enable=YES/NO   //匿名用户是否可以上传

anon_umask=022    //设置匿名用户所上传文件的默认权限掩码值

anon_other_write_enable=YES/NO //是否允许匿名用户可以使用除了建立文件夹和上传文件以外其他的ftp写操作命令。例如:deleterename 等等  

anon_world_readable_only=YES/NO      //匿名用户是否可以浏览

anon_mkdir_write_enbale=YES/NO    //是否允许匿名用户有创建目录的写入权限

anon_max_rate=0    //限制匿名用户最的最大传输速率(0为无限制,单位为字节)






4.虚拟用户

guest_enable=YES  //启用虚拟用户

guest_username=virtual   //虚拟用户使用的系统账户

user_config_dir=/etc/etc/vsftpd_user_config    //单独的用户配置文件位置

virtual_use_local_privs=NO  

virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;

virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO


用户单独的配置文件可以使用匿名用户配置文件的全部内容,

local_root=/var/ftp/123    //用户的主目录

#anon_world_readable_only=NO   //匿名用户是否可以浏览

anon_upload_enable=YES   //匿名用户是否可以上传

anon_mkdir_write_enable=YES   //是否允许匿名用户有创建目录的写入权限

anon_other_write_enable=YES//是否允许匿名用户可以使用除了建立文件夹和上传文件以外其他的ftp写操作命令。例如:deleterename 等等

anon_max_rate=512000    //限制匿名用户最的最大传输速率(0为无限制,单位为字节)





5.其他设置

日志文件

xferlog_enable=yes/no            //是否启用 xferlog 日志格式
xferlog_std_format=yes/no     //是否采用标准格式记录日

xferlog_file=/path/to/logfile            //xferlog 日志文件所在位置,默认为/var/log/xferlog

dual_log_enable=yes/no         //是否采用Vsftpd自己的日志记录方式
log_ftp_protocol=yes/no          //是否记录所有的ftp命令日志
vsftpd_log_file=/path/to/logfile     //指定vsftpd 日志文件位置,默认为/var/log/vsftpd.log


主动模式
port_enable=YES               //开启主动模式
connect_from_port_20=YES      //当主动模式开启的时候 是否启用默认的20端口监听
ftp_date_port=%portnumber%    //上一选项使用NO参数是 指定数据传输端口


被动模式
pasv_enable=YES   //开启被动模式
pasv_min_port=%number% //被动模式最低端口
pasv_max_port=%number% //被动模式最高端口


连接限制
max_client=%number%   //最大连接数
max_per_ip=%number%   //ip最大连接数
anon_max_rate=%number%    //匿名用户最大速率 单位kbps
local_max_rate=%number%   //本地用户最大速率 单位kbps


超时限制

idle_session_timeout=600 //空闲连接超时
data_connection_timeout=120 //数据传输超时
accept_timeout=60 //PAVS请求超时
connect_timeout=60 //PROT模式连接超时



更多vsftpd.conf详细配置:

http://tzsky.blog.51cto.com/1062094/237322

http://www.linux.gov.cn/  linux学园

http://redking.blog.51cto.com/27212/136218

你可能感兴趣的:(mysql,匿名,vsftpd,虚拟,同时生效)