RHEL 6.x 搭建企业级FTP
? ? ? RHEL ?6.x ? 搭建企業(yè)級(jí)FTP
==============================
db4-utils+vsftpd ? 搭建虛擬用戶
mysql+vsftpd ? ? ? 搭建虛擬用戶
==============================
為企業(yè)搭建基于虛擬用戶的FTP服務(wù)器是非常有必要的,因?yàn)樘摂M用戶是在服務(wù)器上面沒(méi)有此用戶,就算,惡意破壞系統(tǒng)安全的人員得到虛擬用戶的賬號(hào)和密碼也不能通過(guò)此賬號(hào)登錄到系統(tǒng),保證了系統(tǒng)的安全性。
一、db4-utils+vsftpd 實(shí)現(xiàn)FTP的虛擬用戶
1)安裝db4-utils和vsftpd
? ? ? ? ? ?yum -y ?install vsftpd ?db4-utils
vsftpd的虛擬用戶數(shù)據(jù)庫(kù)是使用Berkeley DB格式的數(shù)據(jù)庫(kù)文件。建立該數(shù)據(jù)庫(kù)文件需要用到db_load命令工具,db_load命令依賴于db4-utils軟件包,所以需要安裝db4-utils。
2)建立文本格式的用戶名和密碼列表文件
| 1 2 3 4 5 6 7 | cat?>?/etc/vsftpd/virtual_user.list << EOF user1??#奇數(shù)行為用戶名,偶數(shù)行為前一行的用戶名的密碼 123 user2 456 EOF #此文件中空格也代表一行,不要添加額外的行 |
3)把用戶名和密碼列表文件,使用db_load工具轉(zhuǎn)化為DB數(shù)據(jù)庫(kù)文件
| 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:轉(zhuǎn)換 # -t hash:指定讀取數(shù)據(jù)文件的基本方法 # -f /etc/vsftpd/virtual_user.list:用戶名和密碼列表文件 #/etc/vsftpd/virtual_user.db:轉(zhuǎn)化為Berkeley DB數(shù)據(jù)庫(kù)文件 |
4)建立訪問(wèn)ftp的根目錄及虛擬用戶對(duì)應(yīng)的系統(tǒng)賬號(hào)
| 1 2 3 4 | [root@jie3 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual ?????#此用戶不能登錄系統(tǒng),-d指定此用戶的家目錄 [root@jie3 vsftpd]# chown virtual:virtual /var/ftproot/ [root@jie3 vsftpd]# chmod 755 /var/ftproot/ |
5)建立pam認(rèn)證文件
| 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命令生成的數(shù)據(jù)庫(kù)文件,后綴名.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配置文件的內(nèi)容############### 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??#將用戶映射為之前創(chuàng)建的不能登錄系統(tǒng)的用戶virtual pam_service_name=vsftpd.vu??#指定pam認(rèn)證的文件 local_root=/var/ftproot????#指定ftp的根目錄 user_config_dir=/etc/vsftpd/chroot_list?#指定給用戶配置權(quán)限目錄的路徑 |
7)創(chuàng)建為虛擬用戶分配權(quán)限的目錄,及設(shè)置虛擬用戶權(quán)限的文件,此文件必須以虛擬用戶名命名。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root@jie3 vsftpd]# mkdir /etc/vsftpd/chroot_list ?????#創(chuàng)建配置文件里面通過(guò)user_config_dir定義的目錄名稱 [root@jie3 vsftpd]# touch /etc/vsftpd/chroot_list/user1 ?????#創(chuàng)建之前以用戶名命名為文件,此用戶存在于用戶名密碼列表文件中 [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用戶,設(shè)置可以上傳文件的權(quán)限 [root@jie3 chroot_list]# cat > /etc/vsftpd/chroot_list/user2 << EOF > anon_upload_enable=YES???????#user2也可以上傳文件的權(quán)限 > anon_mkdir_write_enable=YES??#為user2用戶設(shè)置可以創(chuàng)建文件的權(quán)限 > EOF |
8)驗(yàn)證不同用戶的不同權(quán)限
二、mysql+vsftpd ??實(shí)現(xiàn)FTP的虛擬用戶
1)安裝相關(guān)軟件包
下載mysql pam驗(yàn)證的軟件包
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/
此網(wǎng)站是RHEL 6.x的epel相關(guān)的軟件包的地址(可以把epel也做一個(gè)yum倉(cāng)庫(kù))
yum -y install mysql-server ? ?mysql-devel ?pam_mysql ?vsftpd
mysql-server :mysql服務(wù)器的軟件包
mysql-devel ?:mysql服務(wù)器的開發(fā)包
pam_mysql ? ?: ?實(shí)現(xiàn)mysql虛擬用戶認(rèn)證的包
? ? vsftpd ? ? ? ? :提供ftp服務(wù)的軟件包
2)建立訪問(wèn)ftp的根目錄及虛擬用戶對(duì)應(yīng)的系統(tǒng)賬號(hào)
| 1 2 3 4 | [root@jie3 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual #此用戶不能登錄系統(tǒng),-d指定此用戶的家目錄 [root@jie3 vsftpd]# chown virtual:virtual /var/ftproot/ [root@jie3 vsftpd]# chmod 755 /var/ftproot/ |
3)在mysql數(shù)據(jù)庫(kù)服務(wù)器上創(chuàng)建存放用戶名和密碼的表
| 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?? #初次啟動(dòng)mysqld服務(wù)會(huì)等待些時(shí)間 Starting mysqld:?????????????????????????????????????????? [? OK? ] [root@jie1 ~]# mysqladmin -u root password 'redhat'? #給登錄mysql服務(wù)器的root用戶設(shè)置密碼 [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;??????#顯示所有的數(shù)據(jù)庫(kù) +--------------------+ | Database?????????? | +--------------------+ | information_schema | | mysql????????????? | |?test???????????????| +--------------------+ 3 rows?in?set?(0.00 sec) mysql> create database ftpdb;???#創(chuàng)建一個(gè)存放ftp虛擬用戶的數(shù)據(jù)庫(kù) 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;???#切換到創(chuàng)建的數(shù)據(jù)庫(kù)中 Database changed mysql> create table?users?(name char(16) binary,passwd?char(16) binary); ????????#在ftpdb數(shù)據(jù)庫(kù)中新建一張有兩個(gè)字段名為users的表,一個(gè)字段存放用戶,一個(gè)字段存放用戶的密碼。 Query OK, 0 rows affected (0.03 sec) mysql> insert into?users?(name,passwd) values ('tom','123'); ????????#在users表中插入一條數(shù)據(jù),name為tom,密碼為123 Query OK, 1 row affected (0.00 sec) mysql> insert into?users?(name,passwd) values ('jerry','456'); ????????#在users表中在插入一條數(shù)據(jù),name為jerry,密碼為456 Query OK, 1 row affected (0.00 sec) mysql>?select?* from ftpdb.users; ????????#查詢ftpdb數(shù)據(jù)庫(kù)中表users的所有數(shù)據(jù) +-------+--------+ | 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關(guān)鍵用于設(shè)置權(quán)限,on后面接數(shù)據(jù)庫(kù)的表名, to接用戶名,identified by 'virtual',設(shè)置virtual用戶的密碼 Query OK, 0 rows affected (0.00 sec) mysql> flush privileges;??#刷新同步數(shù)據(jù) Query OK, 0 rows affected (0.00 sec) mysql>?exit Bye [root@jie1 ~]# |
4)建立pam認(rèn)證文件
| 1 2 3 4 5 6 7 8 9 10 11 | [root@jie1 ~]# find? / -name 'pam_mysql*'? #查找一下pam認(rèn)證支持mysql的庫(kù)文件 /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認(rèn)證支持mysql的庫(kù)文件的路徑 #user=virtual passwd=virtual 指定用戶和用戶的密碼,此用戶對(duì)數(shù)據(jù)庫(kù)有select權(quán)限 #crypt表示口令字段中口令的加密方式: crypt=0,口令以明文方式(不加密)保存在數(shù)據(jù)庫(kù)中; #db=ftpdb table=user 指定在數(shù)據(jù)庫(kù)服務(wù)器新建的數(shù)據(jù)庫(kù)和表 |
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配置文件的內(nèi)容############### 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??#將用戶映射為之前創(chuàng)建的不能登錄系統(tǒng)的用戶virtual virtual_use_local_privs=NO pam_service_name=mysql_vsftpd??#指定pam認(rèn)證的文件 local_root=/var/ftproot#指定ftp的根目錄 user_config_dir=/etc/vsftpd/chroot_list#指定給用戶配置權(quán)限目錄的路徑 |
6)創(chuàng)建為虛擬用戶分配權(quán)限的目錄,及設(shè)置虛擬用戶權(quán)限的文件,此文件必須以虛擬用戶名命名。用戶名為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 #創(chuàng)建配置文件中user_config_dir關(guān)鍵字定義的目錄 [root@jie1 vsftpd]# touch chroot_list/tom? #在此目錄下創(chuàng)建數(shù)據(jù)庫(kù)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]# #當(dāng)virtual_use_local_privs=YES時(shí),只需設(shè)置write_enable=YES,虛擬用戶就可以就擁有寫權(quán)限 #當(dāng)virtual_use_local_privs=NO時(shí), #????? anon_upload_enable=YES時(shí),匿名用戶能上傳,但不能覆蓋和改寫刪除文件 #????? anon_mkdir_write_enable=YES時(shí),能建立目錄 #????? anon_other_write_enable=YES時(shí),虛擬用戶具有讀寫權(quán)限,和刪除權(quán)限 |
7)驗(yàn)證不同的用戶的權(quán)限
? ? ? ? 小結(jié):為企業(yè)搭建基于虛擬用戶的vsftpd是非常有必要的,虛擬用戶的用戶不屬于服務(wù)器中的用戶,這樣可以保障服務(wù)器的安全隱患。
本文轉(zhuǎn)自 jie783213507 51CTO博客,原文鏈接:http://blog.51cto.com/litaotao/1275846,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的RHEL 6.x 搭建企业级FTP的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AIX Study之--AIX网卡配置管
- 下一篇: 优化数据库的注意事项