RHEL 6.x   搭建企業級FTP

                    RHEL  6.x   搭建企業級FTP

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

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。

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是非常有必要的,虛擬用戶的用戶不屬於服務器中的用戶,這樣可以保障服務器的安全隱患。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章