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)建立文本格式的用戶名和密碼列表文件
| 1 2 3 4 5 6 7 | cat?>?/etc/vsftpd/virtual_user.list << EOF user1??#奇數行為用戶名,偶數行為前一行的用戶名的密碼 123 user2 456 EOF #此文件中空格也代表一行,不要添加額外的行 |
3)把用戶名和密碼列表文件,使用db_load工具轉化為DB數據庫文件
| 1 2 3 4 5 6 7 | [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的根目錄及虛擬用戶對應的系統賬號
| 1 2 3 4 | [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認證文件
| 1 2 3 4 5 6 | [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能支持虛擬用戶
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ######修改/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)創建為虛擬用戶分配權限的目錄,及設置虛擬用戶權限的文件,此文件必須以虛擬用戶名命名。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [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的根目錄及虛擬用戶對應的系統賬號
| 1 2 3 4 | [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數據庫服務器上創建存放用戶名和密碼的表
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | [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認證文件
| 1 2 3 4 5 6 7 8 9 10 11 | [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能支持虛擬用戶
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ######修改/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中的用戶
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | [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是非常有必要的,虛擬用戶的用戶不屬于服務器中的用戶,這樣可以保障服務器的安全隱患。
本文轉自 jie783213507 51CTO博客,原文鏈接:http://blog.51cto.com/litaotao/1275846,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的RHEL 6.x 搭建企业级FTP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIX Study之--AIX网卡配置管
- 下一篇: 优化数据库的注意事项