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