vsftp添加虚拟用户
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://coolerfeng.blog.51cto.com/133059/70089 |
之前配置的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进行安装编译 下载地址如下: http://nchc.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz 假设我们把它放在了/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的认证方式,很简单吧?? 本文出自 “风吹云动” 博客,请务必保留此出处http://coolerfeng.blog.51cto.com/133059/70089 本文出自 51CTO.COM技术博客 |



coolerfeng
博客统计信息
热门文章
最新评论
友情链接

