RHEL 6.x 搭建企業級FTPmysql
==============================sql
db4-utils+vsftpd 搭建虛擬用戶數據庫
mysql+vsftpd 搭建虛擬用戶安全
==============================
bash
爲企業搭建基於虛擬用戶的FTP服務器是很是有必要的,由於虛擬用戶是在服務器上面沒有此用戶,就算,惡意破壞系統安全的人員獲得虛擬用戶的帳號和密碼也不能經過此帳號登陸到系統,保證了系統的安全性。服務器
1、db4-utils+vsftpd 實現FTP的虛擬用戶app
1)安裝db4-utils和vsftpdtcp
yum -y install vsftpd db4-utilside
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)驗證不一樣用戶的不一樣權限
2、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是很是有必要的,虛擬用戶的用戶不屬於服務器中的用戶,這樣能夠保障服務器的安全隱患。