在每次重启linux 服务器的时候 vsftpd 目录有时候会自动关闭掉,每次得去按 setsebool ftp_home_dir 1 开启目录 ftp 才能正常登陆,今天我发现有一个这样的命令以后再也不用按了
echo "setsebool ftp_home_dir 1" >> /etc/rc.local 我们登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。 本地用户登录:使用系统用户登录,在/etc/passwd中。 虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器。 FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的资源,大大增强了系统的安全。 本文实验的Linux系统是CentOS 5 update2 一、本地数据文件方式 1. 添加虚拟用户口令文件 [root@jock]#vi ftpusr.txt 添加虚拟用户名和密码,一行用户名,一行密码,以此类推。奇数行为用户名,偶数行为密码。 bobyuan #用户名 123456 #密码 markwang #用户名 123456 #密码 2. 生成虚拟用户口令认证文件 将刚添加的vftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件。 首先查看系统有没有安装生成口令认证文件所需的软件db4-utils。 [root@jock]#rpm –qa |grep db4-utils
如果没有请使用以下命令:
[root@jock]#yum install db4-utils
下面使用db_load命令生成虚拟用户口令认证文件。 [root@jock]# db_load -T -t hash -f ./ftpusr.txt /etc/vsftpd/ftpusr.db
[root@jock]# chmod 600 /etc/vsftpd/ftpusr.db 3. 编辑vsftpd的PAM认证文件 在/etc/pam.d目录下, [root@jock]#vi /etc/pam.d/vsftpd_login 将里面其他的都注释掉,添加下面这两行: auth required /lib/security/pam_userdb.so db=/etc/vsftpd/ftpusr account required /lib/security/pam_userdb.so db=/etc/vsftpd/ftpusr 4. 建立本地映射用户并设置宿主目录权限 所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码。 [root@jock]#useradd –d /home/vftpsite –s /sbin/nologin ftp_virt [root@jock]#chmod 700 /home/vftpsite/ 5. 配置vsftpd.conf(设置虚拟用户配置项) [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf
在#listen_ipv6=YES 下面添加两行配置文件
guest_enable=YES 开启虚拟用户账号 guest_username=ftp_virt FTP虚拟用户对应的系统用户
pam_service_name=vsftpd_login (pam认证文件) 6. 重启vsftpd服务 [root@jock]#service vsftpd restart
接下来是设置虚拟用户的权限 [root@jock]#cd /home/ftpsite/
在ftpsite 目录下面创建2个目录
[root@jock ftpsite]#mkdir jock01
[root@jock ftpsite]#mkdir jock02
注意:jick01,jock02 是刚才创建的虚拟账号
[root@jock ftpsite]#chown ftp_virt jock01
[root@jock ftpsite]#chown ftp_virt jock02
[root@jock ftpsite]#vi /etc/vsftpd/jock01 在里面输入以下配置文件:local_root=/home/ftpsite/jock01
#:wq保存退出
[root@jock ftpsite]#vi /etc/vsftpd/jock02 在里面输入以下配置文件:local_root=/home/ftpsite/jock02
#:wq保存退出
[root@jock ftpsite]#service vsftpd restart 重启vsftpd 进程。
7. 用资源管理器登陆测试虚拟用户登录FTP 测试 OK 二、数据库服务器(MySQL)方式 1. 安装MySQL 我使用的是Tar包安装的MySQL,版本号:mysql-6.0.8-alpha.tar.gz 具体安装方法,请查看我的另一篇文章“部署LAMP+Discuz!7.0”。 2. 建立本地映射用户并设置宿主目录权限 [root@CentOS5 /]#useradd –d /home/vftpsite –s /sbin/nologin vftpuser [root@CentOS5 /]#chmod 700 /home/vftpsite 3. 配置vsftpd.conf(设置虚拟用户配置项) [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf guest_enable=YES #开启虚拟用户 guest_username=vftpuser #FTP虚拟用户对应的系统用户 pam_service_name=vsftpd #PAM认证文件 4. 在MySQL中建立用户口令数据库 [root@CentOS5 /]#mysql –u root –p mysql> create database vftpuser; #建立虚拟用户数据库,库名vftpuser mysql> use vftpuser; #进入vftpuser数据库 mysql> create table users(name char(16) binary,passwd char(16) binary); #建立虚拟用户口令表,表名users mysql> insert into users (name,passwd) values ('bobyuan',password('111')); mysql> insert into users (name,passwd) values ('markwang',password('111')); #建立两个虚拟用户,bobyuan和markwang 注:在这里我用这种方法添加的虚拟用户密码都是经过MySQL加密的,加密后的密码pam-mysql不能识别(MySQL和pam-mysql兼容性有些问题),因此本次实验使用明文保存密码。 添加明文密码: 方法一:单个添加用户 mysql> insert into users (name,passwd) values ('bobyuan', '111'); mysql> insert into users (name,passwd) values ('markwang',‘111'); 方法二:批量添加用户 新建vftpuser.txt文件 [root@jock]#vi vftpuser.txt 添加用户名和密码,注意字段数据之间要用Tab键隔开。 bobyuan 111 markwang 111
[root@jock]#mysql -u root -p (这里注意:必须是数据库管理员账号)
Enter password: mysql>use vftpuser; mysql>load data local infile '/vftpuser.txt'into table users; mysql>flush privileges; mysql> grant select on vftpuser.users to vftpuser@localhost identified by '111111'; #授权vftpuser这个账号可以读取vftpuser数据库的user表
grant select on vftp.users to vftp@localhost identified by '111111'; 5. 验证第4步的设置是否成功 [root@CentOS5 /]#mysql –u vftpuser –p mysql>show databases; mysql>use vftpuser; mysql>show tables; mysql>select * from users; mysql>quit 如下图:
6. 编译MySQL的PAM认证模块
编辑完成后可查看/lib/security目录下是否已有对应pam模块(如下图)?
# ll /lib/security/ |grep mysql 图 如下:
如果没有则下载pam-mysql安装 http:///projects/pam-mysql/我下载的是pam_mysql-0.7RC1.tar.gz。 [root@CentOS5 /]#cd /usr/local/src [root@CentOS5 src]#tar –zxvf pam_mysql-0.7RC1.tar.gz [root@CentOS5 src]#cd pam_mysql-0.7RC1 [root@CentOS5 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/local/mysql/ --with-pam-mods-dir=/lib/security/ [root@CentOS5 pam_mysql-0.7RC1]#make [root@CentOS5 pam_mysql-0.7RC1]#make install 7. 编辑vsftpd的PAM认证文件 在/etc/pam.d目录下, [root@CentOS5 /]#vi /etc/pam.d/vsftpd 将里面其他的都注释掉,添加下面这两行: auth required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0 account required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0 crypt=0:表示口令使用明文方式保存在数据库中 crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中 crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中 crypt=3:表示口令使用MD5散列值的方式保存在数据库中 8. 重启vsftpd服务 [root@CentOS5 /]#service vsftpd restart 9. 测试虚拟用户登录FTP C:\User\Administrator>ftp 192.168.120.240 Connected to 192.168.120.240. 220 Welcome to BOB FTP server User (192.168.120.240:(none)): bobyuan 331 Please specify the password. Password: 230 Login successful. ftp> quit 221 Goodbye. 三、虚拟用户高级设置 1. virtual_use_local_privs参数 当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限; 当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。 当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES, anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO, anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO, anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO, anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO, anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。 2. 建立各个虚拟用户自身的配置文件 [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf 添加: user_config_dir=/etc/vsftpd/vsftpd_user_conf [root@CentOS5 /]#mkdir /etc/vsftpd/vsftpd_user_conf 编辑bobyuan的配置文件 [root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/bobyuan 添加: anon_world_readable_only=NO #开放bobyuan的下载权限(只能下载)。注意这个地方千万不能写成YES,否则bobyuan将不能列出文件和目录。 编辑markwang的配置文件 [root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/markwang 添加: write_enable=YES #开放markwang的写权限 anon_world_readable_only=NO #开放markwang的下载权限 anon_upload_enable=YES #开放markwang的上传权限 anon_mkdir_write_enable=YES #开放markwang创建目录的权限 anon_other_write_enable=YES #开放markwang删除和重命名的权限 四、虚拟用户配置文件(实验) 1. 所有虚拟用户使用统一配置 [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf write_enable=YES anonymous_enable=NO local_enable=YES guest_enable=YES guest_username=vftpuser virtual_use_local_privs=NO pam_service_name=vsftpd anon_world_readable_only=NO #可以下载 anon_upload_enable=NO(默认值)#不能上传 anon_mkdir_write_enable=NO(默认值)#不能新建文件夹 anon_other_write_enable=NO(默认值)#不能删除和重命名文件 ftpd_banner=Welcome to BOB FTP server xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES ascii_upload_enable=YES ascii_download_enable=YES tcp_wrappers=NO setproctitle_enable=YES listen_port=21 connect_from_port_20=YES idle_session_timeout=600 data_connection_timeout=120 max_clients=0 max_per_ip=3 local_max_rate=512000 2. 各个虚拟用户使用自身配置 [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf write_enable=YES anonymous_enable=NO local_enable=YES guest_enable=YES guest_username=vftpuser virtual_use_local_privs=NO pam_service_name=vsftpd user_config_dir=/etc/vsftpd/vsftpd_user_conf ftpd_banner=Welcome to BOB FTP server xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES ascii_upload_enable=YES ascii_download_enable=YES tcp_wrappers=NO setproctitle_enable=YES listen_port=21 connect_from_port_20=YES idle_session_timeout=600 data_connection_timeout=120 max_clients=0 max_per_ip=3 local_max_rate=512000 [root@CentOS5 /]#mkdir /etc/vsftpd/vsftpd_user_conf 编辑bobyuan(FTP匿名用户)的配置文件 [root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/bobyuan anon_world_readable_only=NO 编辑ftpadmin(FTP匿名管理员)的配置文件 [root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/ftpadmin anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
|