vsftpd分爲3種用戶,分別爲匿名用戶、系統用戶和虛擬用戶;
虛擬用戶通常指的就是非系統用戶,登錄ftp時需要提供用戶帳號和密碼,而帳號和密碼存放在何處決定用戶是否爲系統用戶,通常系統用戶是通過pam_unix.so模塊查找/etc/passwd和/etc/shadow中的帳號和密碼來認證用戶的,通過/etc/pam.d/system-auth來實現認證。
對於在互聯網上公開的服務來說把我們的系統用戶開放出去是很危險的,如果我們想讓多個用戶訪問我們的ftp服務並且權限不一樣該怎麼做呢?這時利用系統用戶的認證方式來認證就不行了,所以這就用到了虛擬用戶的認證,虛擬用戶通過pam_listfile.so、pam_ldap.so或pam_mysql.so模塊來認證用戶,此時將用戶存放在listfile表或ldap服務中或mysql數據庫中,此時將用戶公開出去就不會給我們的系統帶來安全隱患了,下面就來說一下利用pam_mysql.so模塊來對用戶認證的方式:
配置前準備:
2、 準備好cmake-2.8.8.tar.gz源碼包(跨平臺編譯器,編譯安裝mysql-5.5.25a需要用到)、mysql-5.5.25a.tar.gz源碼包和pam_mysql-0.7RC1.tar.gz源碼包。
安裝配置:
- #tar xf cmake-2.8.8.tar.gz
- #cd cmake-2.8.8
- #./bootstrap
- #make && make install
- #groupadd -r mysql
- #useradd -g mysql -d /data/mysql mysql
- #tar xf mysql-5.5.25a.tar.gz
- #cd mysql-5.5.25a
- #cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DENABLE_PROFILING=1
- #mkdir /data/mysql
- #chown mysql:mysql /data/mysql/
- #cd /usr/local/mysql
- #chown -R mysql:mysql .
- #scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql
- #cp support-files/my-large.cnf /etc/my.cnf
- #vim /etc/my.cnf(添加datadir = /data/mysql並修改thread_concurrency = 2)
- #cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- #chkconfig --add mysqld
- #chkconfig mysqld on
- #chown -R root .
- #vim /etc/profile(添加PATH=/usr/local/mysql/bin:$PATH)
- #export PATH=/usr/local/mysql/bin:$PATH
- #echo ‘/usr/local/mysql/lib’ > /etc/ld.so.conf.d/mysql.conf
- #ldconfig
- #ln -sv /usr/local/mysql/include/ /usr/include/mysql
- #vim /etc/man.config(添加PATH /usr/local/mysql/man)
- #service mysqld start
- #tar xf pam_mysql-0.7RC1.tar.gz
- #cd pam_mysql-0.7RC1
- #./configure --with-mysql=/usr/local/mysql --with-openssl
- #make && make install
- #yum -y install vsftpd
- #service vsftpd start
- mysql> create database vsftpd;
- mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456';
- mysql> grant select on vsftpd.* to [email protected] identified by '123456';
- mysql> use vsftpd;
- mysql> create table users (
- -> id int AUTO_INCREMENT NOT NULL,
- -> name char(20) binary NOT NULL,
- -> password char(48) binary NOT NULL,
- -> primary key(id)
- -> );
- mysql> insert into users(name,password) values('benet',password('123456'));
- mysql> insert into users(name,password) values('aptech',password('123456'));
- mysql> select * from users;
- +----+-----------+----------------------------------------------------------------------------+
- | id | name | passwd |
- +----+-----------+----------------------------------------------------------------------------+
- | 1 | benet | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
- | 2 | aptech | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
- +----+-----------+----------------------------------------------------------------------------+
- 3 rows in set (0.00 sec)
- #vim /etc/pam.d/vsftpd.mysql
- auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
- account required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
- #useradd -s /sbin/nologin -d /var/ftp2 vsftpd
- #chmod go+rx /var/ftp2
- anonymous_enable=YES
- local_enable=YES
- write_enable=YES
- anon_upload_enable=NO
- anon_mkdir_write_enable=NO
- chroot_local_user=YES
- guest_enable=YES
- guest_username=vsftpd
- pam_service_name=vsftpd.mysql
- #service vsftpd restart
添加本地用戶tom並給予密碼redhat然後訪問ftp服務:
# useradd tom # passwd tom Changing password for user tom. New UNIX password: BAD PASSWORD: it is based on a dictionary word Retype new UNIX password: passwd: all authentication tokens updated successfully.
這裏mysql數據庫中的用戶的權限是一樣的,怎樣使aptech和benet用戶權限不一樣呢?這就要用到vsftp的user_config_dir指令;
我們假如讓benet用戶有上傳權限但是沒有刪除權限;
讓aptech用戶有刪除權限但是沒有上傳權限;
在/etc/vsftpd/目錄下創建virusers目錄(可以根據自己需要任意創建),然後在該目錄下創建跟benet和aptech用戶名相同的文件:
benet文件中內容如下:
- anon_upload_enable=YES
- anon_mkdir_write_enable=NO
- anon_other_write_enable=NO
- anon_upload_enable=NO
- anon_mkdir_write_enable=NO
- anon_other_write_enable=NO
- user_config_dir=/etc/vsftpd/virusers
- # service vsftpd restart
通過上述操作就實現了ftp服務通過pam_mysql認證用戶並讓不同的虛擬用戶擁有了不同的權限,這樣也給我們的ftp服務增加了安全性。
本文出自 “彼岸” 博客,請務必保留此出處http://wjw7702.blog.51cto.com/5210820/936244