IT技术互动交流平台

RHEL 6.x搭建企业级FTP服务器

作者:技术之路---桀  发布日期:2013-08-19 09:42:29

==============================

db4-utils+vsftpd   搭建虚拟用户

mysql+vsftpd       搭建虚拟用户

==============================

为企业搭建基于虚拟用户的FTP服务器是非常有必要的,因为虚拟用户是在服务器上面没有此用户,就算,恶意破坏系统安全的人员得到虚拟用户的账号和密码也不能通过此账号登录到系统,保证了系统的安全性。

 

一、db4-utils+vsftpd 实现FTP的虚拟用户

1)安装db4-utils和vsftpd

           yum -y  install vsftpd  db4-utils

vsftpd的虚拟用户数据库是使用Berkeley DB格式的数据库文件。建立该数据库文件需要用到db_load命令工具,db_load命令依赖于db4-utils软件包,所以需要安装db4-utils。www.it165.net

2)建立文本格式的用户名和密码列表文件


cat > /etc/vsftpd/virtual_user.list << EOF 
user1  #奇数行为用户名,偶数行为前一行的用户名的密码 
123 
user2 
456 
EOF 
#此文件中空格也代表一行,不要添加额外的行

3)把用户名和密码列表文件,使用db_load工具转化为DB数据库文件

 

[root@jie3 vsftpd]#db_load -T -t hash -f /etc/vsftpd/virtual_user.list /etc/vsftpd/virtual_user.db 
[root@jie3 vsftpd]# file /etc/vsftpd/virtual_user.db 
/etc/vsftpd/virtual_user.db: Berkeley DB (Hash, version 9, native byte-order) 
#db_load -T:转换 
# -t hash:指定读取数据文件的基本方法 
# -f /etc/vsftpd/virtual_user.list:用户名和密码列表文件 
#/etc/vsftpd/virtual_user.db:转化为Berkeley DB数据库文件

4)建立访问ftp的根目录及虚拟用户对应的系统账号

 

[root@jie3 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual 
     #此用户不能登录系统,-d指定此用户的家目录 
[root@jie3 vsftpd]# chown virtual:virtual /var/ftproot/ 
[root@jie3 vsftpd]# chmod 755 /var/ftproot/

5)建立pam认证文件

 

[root@jie3 vsftpd]# cat > /etc/pam.d/vsftpd.vu << EOF 
#%PAM-1.0 
auth   required  pam_userdb.so    db=/etc/vsftpd/virtual_user
account required pam_userdb.so    db=/etc/vsftpd/virtual_user
EOF 
##db=/etc/vsftpd/virtual_user  指向刚才用db_load命令生成的数据库文件,后缀名.db可以不写

6)修改配置文件,使vsftpd能支持虚拟用户

 

######修改/etc/vsftpd/vsftpd.conf配置文件的内容############### 
anonymous_enable=NO 
local_enable=YES 
write_enable=YES 
local_umask=022 
anon_umask=022 
dirmessage_enable=YES 
xferlog_enable=YES 
connect_from_port_20=YES 
xferlog_std_format=YES 
listen=YES 
userlist_enable=YES 
tcp_wrappers=YES 
guest_enable=YES        #启用用户映射功能 
guest_username=virtual  #将用户映射为之前创建的不能登录系统的用户virtual 
pam_service_name=vsftpd.vu  #指定pam认证的文件 
local_root=/var/ftproot    #指定ftp的根目录 
user_config_dir=/etc/vsftpd/chroot_list #指定给用户配置权限目录的路径

7)创建为虚拟用户分配权限的目录,及设置虚拟用户权限的文件,此文件必须以虚拟用户名命名。

 

[root@jie3 vsftpd]# mkdir /etc/vsftpd/chroot_list 
     #创建配置文件里面通过user_config_dir定义的目录名称 
[root@jie3 vsftpd]# touch /etc/vsftpd/chroot_list/user1 
     #创建之前以用户名命名为文件,此用户存在于用户名密码列表文件中 
[root@jie3 vsftpd]# touch /etc/vsftpd/chroot_list/user2 
[root@jie3 vsftpd]# cd chroot_list/ 
[root@jie3 chroot_list]# ls 
user1  user2 
[root@jie3 chroot_list]# echo "anon_upload_enable=YES" >>/etc/vsftpd/chroot_list/user1 
#为user1用户,设置可以上传文件的权限 
[root@jie3 chroot_list]# cat > /etc/vsftpd/chroot_list/user2 << EOF 
> anon_upload_enable=YES       #user2也可以上传文件的权限 
> anon_mkdir_write_enable=YES  #为user2用户设置可以创建文件的权限 
> EOF

8)验证不同用户的不同权限

二、mysql+vsftpd   实现FTP的虚拟用户

1)安装相关软件包

下载mysql pam验证的软件包

wget http://mirrors.sohu.com/fedora-epel/6Server/x86_64/pam_mysql-0.7-0.12.rc1.el6.x86_64.rpm

http://mirrors.sohu.com/fedora-epel/6Server/x86_64/

此网站是RHEL 6.x的epel相关的软件包的地址(可以把epel也做一个yum仓库)

yum -y install mysql-server    mysql-devel  pam_mysql  vsftpd

mysql-server :mysql服务器的软件包

mysql-devel  :mysql服务器的开发包

pam_mysql    :  实现mysql虚拟用户认证的包

    vsftpd         :提供ftp服务的软件包

 

2)建立访问ftp的根目录及虚拟用户对应的系统账号


[root@jie3 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual 
#此用户不能登录系统,-d指定此用户的家目录 
[root@jie3 vsftpd]# chown virtual:virtual /var/ftproot/ 
[root@jie3 vsftpd]# chmod 755 /var/ftproot/

3)在mysql数据库服务器上创建存放用户名和密码的表

 

[root@jie1 ~]# service mysqld start   #初次启动mysqld服务会等待些时间 
Starting mysqld:                                           [  OK  ] 
[root@jie1 ~]# mysqladmin -u root password 'redhat'  #给登录mysql服务器的root用户设置密码 
[root@jie1 ~]# mysql -u root -p 
Enter password:  
Welcome to the MySQL monitor.  Commands end with ; or \g. 
Your MySQL connection id is 4 
Server version: 5.1.66 Source distribution 
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. 
Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
mysql> show databases;      #显示所有的数据库 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| mysql              | 
| test               | 
+--------------------+ 
3 rows in set (0.00 sec) 
mysql> create database ftpdb;   #创建一个存放ftp虚拟用户的数据库 
Query OK, 1 row affected (0.00 sec) 
mysql> show databases; 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| ftpdb              | 
| mysql              | 
| test               | 
+--------------------+ 
4 rows in set (0.02 sec) 
mysql> use ftpdb;   #切换到创建的数据库中 
Database changed 
mysql> create table users (name char(16) binary,passwd char(16) binary); 
        #在ftpdb数据库中新建一张有两个字段名为users的表,一个字段存放用户,一个字段存放用户的密码。 
Query OK, 0 rows affected (0.03 sec) 
mysql> insert into users (name,passwd) values ('tom','123'); 
        #在users表中插入一条数据,name为tom,密码为123 
Query OK, 1 row affected (0.00 sec) 
mysql> insert into users (name,passwd) values ('jerry','456'); 
        #在users表中在插入一条数据,name为jerry,密码为456 
Query OK, 1 row affected (0.00 sec) 
mysql> select * from ftpdb.users; 
        #查询ftpdb数据库中表users的所有数据 
+-------+--------+ 
| name  | passwd | 
+-------+--------+ 
| tom   | 123    | 
| jerry | 456    | 
+-------+--------+ 
2 rows in set (0.00 sec) 
mysql> grant select on ftpdb.users to virtual@localhost identified by 'virtual'; 
   #grant关键用于设置权限,on后面接数据库的表名, to接用户名,identified by 'virtual',设置virtual用户的密码 
Query OK, 0 rows affected (0.00 sec) 
mysql> flush privileges;  #刷新同步数据 
Query OK, 0 rows affected (0.00 sec) 
mysql> exit
Bye 
[root@jie1 ~]#

4)建立pam认证文件

 

[root@jie1 ~]# find  / -name 'pam_mysql*'  #查找一下pam认证支持mysql的库文件 
/lib64/security/pam_mysql.so 
[root@jie1 ~]# cat > /etc/pam.d/mysql_vsftpd << EOF 
#%PAM-1.0 
auth required /lib64/security/pam_mysql.so user=virtual passwd=virtual host=localhost db=ftpdb table=users usercolumn=name passwdcolumn=passwd crypt=0 
account required /lib64/security/pam_mysql.so user=virtual passwd=virtual host=localhost db=ftpdb table=users usercolumn=name passwdcolumn=passwd crypt=0 
EOF 
#/lib64/security/pam_mysql.so 指定pam认证支持mysql的库文件的路径 
#user=virtual passwd=virtual 指定用户和用户的密码,此用户对数据库有select权限 
#crypt表示口令字段中口令的加密方式: crypt=0,口令以明文方式(不加密)保存在数据库中; 
#db=ftpdb table=user 指定在数据库服务器新建的数据库和表

5)修改配置文件,使vsftpd能支持虚拟用户

 

######修改/etc/vsftpd/vsftpd.conf配置文件的内容############### 
anonymous_enable=NO 
local_enable=YES 
write_enable=YES 
local_umask=022 
anon_umask=022 
dirmessage_enable=YES 
xferlog_enable=YES 
connect_from_port_20=YES 
xferlog_std_format=YES 
listen=YES 
userlist_enable=YES 
tcp_wrappers=YES 
guest_enable=YES        #启用用户映射功能 
guest_username=virtual  #将用户映射为之前创建的不能登录系统的用户virtual 
virtual_use_local_privs=NO 
pam_service_name=mysql_vsftpd  #指定pam认证的文件 
local_root=/var/ftproot#指定ftp的根目录 
user_config_dir=/etc/vsftpd/chroot_list#指定给用户配置权限目录的路径

6)创建为虚拟用户分配权限的目录,及设置虚拟用户权限的文件,此文件必须以虚拟用户名命名。用户名为mysql表users中的用户

 

[root@jie1 vsftpd]# mkdir /etc/vsftpd/chroot_list #创建配置文件中user_config_dir关键字定义的目录 
[root@jie1 vsftpd]# touch chroot_list/tom  #在此目录下创建数据库users表中存在的用户,且以用户名命名文件 
[root@jie1 vsftpd]# touch chroot_list/jerry 
[root@jie1 vsftpd]# cd chroot_list/ 
[root@jie1 chroot_list]# ls 
jerry  tom 
[root@jie1 chroot_list]# echo "anon_upload_enable=YES" >tom 
[root@jie1 chroot_list]# cat > jerry << EOF 
> anon_upload_enable=YES 
> anon_mkdir_write_enable=YES 
> EOF 
[root@jie1 chroot_list]# cat tom 
anon_upload_enable=YES 
[root@jie1 chroot_list]# cat jerry 
anon_upload_enable=YES 
anon_mkdir_write_enable=YES 
[root@jie1 chroot_list]# service vsftpd restart 
Shutting down vsftpd:                                      [  OK  ] 
Starting vsftpd for vsftpd:                                [  OK  ] 
[root@jie1 chroot_list]# 
#当virtual_use_local_privs=YES时,只需设置write_enable=YES,虚拟用户就可以就拥有写权限 
#当virtual_use_local_privs=NO时, 
#      anon_upload_enable=YES时,匿名用户能上传,但不能覆盖和改写删除文件 
#      anon_mkdir_write_enable=YES时,能建立目录 
#      anon_other_write_enable=YES时,虚拟用户具有读写权限,和删除权限

7)验证不同的用户的权限

 

        小结:为企业搭建基于虚拟用户的vsftpd是非常有必要的,虚拟用户的用户不属于服务器中的用户,这样可以保障服务器的安全隐患。


Tag标签: RHEL   FTP服务器  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规