手记

vsftp添加虚拟用户


       之前配置的vsftp,为了省事和方便,都是用系统用户。今天有人找我配置一个采用虚拟用户的系统

CU看了看精华帖子,然后照做之,很容易就成功了

需要说明的是,如果系统已经安装了rpm,可以直接修改rpm的配置文件

rpm的配置文件在/etc/vsftpd/vsftpd.conf

如果是tar源码安装,配置文件在/etc/vsftpd.conf

rpm的可执行文件在/usr/sbin/vsftpd

tar的可执行文件在/usr/local/sbin/vsftpd

不要在已经安装了rpm的情况下去用tar编译,我就是这么干的,结果弄的我晕死

因为默认的PATH搜索路径中,/usr/sbin/ 是比/usr/local/sbin/优先的。

rpm安装很简单,tar安装也很简单,需要做的工作就是修改配置文件

如果从源码安装,我们可以打开一些功能

# vi builddefs.h  \\编辑builddefs.h 文件,文件内容如下:

#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H

#undef VSF_BUILD_TCPWRAPPERS

#define VSF_BUILD_PAM

#undef VSF_BUILD_SSL

把需要的功能前面的undef 改成define,然后编译就可以用了。

tcp_wrappers是一个比较有用的功能,

创建必要的帐号,目录: 

# useradd nobody  //可能你的系统已经存在此帐号,那就不用建立

# mkdir /usr/share/empty  //可能你的系统已经存在此目录,那就不用建立

# mkdir /var/ftp  //可能你的系统已经存在此目录,那就不用建立

# useradd -d /var/ftp ftp  //可能你的系统已经存在此帐号,那就不用建立

# chown root:root /var/ftp

# chmod og-w /var/ftp

请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin

#make

#make install

这样就安装完成了。接下来要做的事情就是修改配置文件

虚拟用户形式实现(db及mysql形式)

虚拟用户可以采用两种方法,一种是db,一种是mysql集成

db方式

1)先看系统是否安装了db的软件包。默认应该是有了

# rpm –qa | grep db4

db4-devel-4.2.52-7.1

db4-4.2.52-7.1

db4-utils-4.2.52-7.1

2)建立一个logins.txt的文件,单行为用户名,双行为密码,例如

# vi /home/logins.txt

coolerfeng

12345

(3)建立数据库文件并设置文件属性

# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db

# chmod 600 /etc/vsftpd_login.db

(4)建立认证文件

# vi /etc/pam.d/ftp 插入如下两行

auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login

account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

(5)建立一个虚拟用户

useradd -d /home/vsftpd -s /sbin/nologin vsftpd

ls -ld /home/vsftpd

drwx------  3 vsftpd vsftpd 1024 Jun  6 22:55 /home/vsftpd/

(6)编写配置文件(注意事项请参看匿名用户的配置,这里不再赘述)

# vi /etc/vsftpd-pam.conf

listen=YES

listen_port=21

tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)

listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)

anonymous_enable=NO

local_enable=YES  //PAM方式此处必须为YES,如果不是将出现如下错误:

500 OOPS: vsftpd: both local and anonymous access disabled!

write_enable=NO

anon_upload_enable=NO

anon_mkdir_write_enable=NO

anon_other_write_enable=NO

chroot_local_user=YES

guest_enable=YES

guest_username=vsftpd //这两行的意思是采用虚拟用户形式

virtual_use_local_privs=YES //虚拟用户和本地用户权限相同

pasv_enable=YES //建立资料联机采用被动方式

pasv_min_port=30000 //建立资料联机所可以使用port 范围的上界,0表示任意。默认值为0。

pasv_max_port=30999 //建立资料联机所可以使用port 范围的下界,0表示任意。默认值为0。

(7)启动程序

# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam.conf &

(8)测试连通及功能

# vi /home/vsftpd/test //建立一个文件,内容如下

1234567890

# chown vsftpd.vsftpd /home/vsftpd/test

# ftp 127.0.0.1

Connected to 127.0.0.1.

220 (vsFTPd 2.0.3)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (127.0.0.1:root): xuchen

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>; pwd

257 "/"

ftp>; size test

213 11

ftp>; quit

221 Goodbye.

OK,用户名为xuchen,密码为12345可以连接到FTP服务器,看不到文件列表,但可以下载已知文件名的文件,不能上传文件,非常安全吧!!

如果我们需要用户看到文件,怎么办?也好办,在配置文件中加入如下语句:

anon_world_readable_only=NO  //匿名登入者不能下载可阅读的档案,默认值为YES

如果需要让用户上传文件和下载文件分开,建议如下这么做

# vi /home/logins.txt

xuchen

12345

upload

45678

//首先建立虚拟用户upload,密码为45678

# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db //更新数据文件

# mkdir /home/vsftpd/upload

# vi /etc/vsftpd-pam.conf 加入如下语句

user_config_dir=/etc/vsftpd_user_conf

# mkdir /etc/vsftpd_user_conf

# vi /etc/vsftpd_user_conf/upload 文件内容如下

local_root=/home/vsftpd/upload

write_enable=YES

anon_world_readable_only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

# chmod 700 /home/vsftpd/upload

# chown vsftpd.vsftpd /home/vsftpd/upload/

这样,xuchen用户可以下载/home/vsftpd里的文件及upload里的文件,而upload用户可以上传和下载/home/vsftpd/upload文件夹的东西,但不能到/home/vsftpd里下载文件,很简单得实现了分用户上传和下载

对于用Mysql库存储用户名及密码的方式来说:

就是把用户名和密码放在mysql库里,实现起来也相当简单

(1)建立一个库并设置相应权限

# mysql –p

mysql>;create database ftpd;

mysql>;use ftpd;

mysql>;create table user(name char(20) binary,passwd char(20) binary);

mysql>;insert into user (name,passwd) values ('test1','12345');

mysql>;insert into user (name,passwd) values ('test2','54321');

mysql>;grant select on ftpd.user to ftpd@localhost identified by '123456';

mysql>;flush privileges; 刷新权限设置

mysql>;quit

(2)下载libpam-mysql进行安装编译

下载地址如下:

[url]http://nchc.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz[/url]

假设我们把它放在了/home/xuchen目录下

# cd /home/xuchen

# tar xzvf pam_mysql-0.5.tar.gz

# cd pam_mysql 

# make 

# cp pam_mysql.so /lib/security

(3)建立PAM认证信息

# vi /etc/pam.d/ftp ,内容如下

auth required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

account required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

注意: 

crypt= n 

crypt=0: 明文密码

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

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

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

(4)建立本地虚拟用户

# useradd -d /home/ftpd -s /sbin/nologin ftpd

(5)下面就差修改vsftpd.conf文件了,我把我的提供给大家参考吧:)

# vi /etc/vsftpd-pam1.conf

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

chroot_local_user=YES

guest_enable=YES

guest_username=ftpd

listen=YES

listen_port=21

pasv_enable=YES

pasv_min_port=30000

pasv_max_port=30999

anon_world_readable_only=NO

virtual_use_local_privs=YES

#user_config_dir=/etc/vsftpd_user_conf

可以看出,和前面的用db库来验证没有多大区别,其实就是一个东西,一个用mysql来验证,一个用db库,我个人比较倾向于用db库来验证,在这个环境下,相对于Mysql来说,安全系数更高一点。

(6)# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam1.conf &   //以后台方式启动

(7)测试连通

# ftp 127.0.0.1

Connected to 127.0.0.1.

220 (vsFTPd 2.0.3)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (127.0.0.1:root): test1

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>; pwd

257 "/"

ftp>; quit

221 Goodbye.

看,成功了!!这样就实现了mysql的认证方式,很简单吧??

©著作权归作者所有:来自51CTO博客作者coolerfeng的原创作品,如需转载,请注明出处,否则将追究法律责任


0人推荐
随时随地看视频
慕课网APP