vsftpd+mysql 实现本地用户,匿名用户,虚拟用户同时工作
大纲
1.安装vsftpd mysql pam-mysql
2.添加虚拟用户(使用本地数据库和数据库服务器)
3.实现本地用户,匿名用户,虚拟用户同时工作
4.说下vsftpd.conf文件的内容
一、安装
先说下环境我是在centos 5.6下做的 安装vsftpd mysql
vsftpd和mysql是使用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_enable和message_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写操作命令。例如:delete、rename 等等
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写操作命令。例如:delete、rename 等等
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