Linux搭建FTP服务器(虚拟用户配置文件)
先行关闭防火墙,或者打开端口
1、建立虚拟用户口令库文件
口令库文件中奇数行设置用户名,偶数行设置口令
# vi /etc/vsftpd/logins.tx t
zhangwenbo -用户名
123 --密码
test --用户名
123 --密码
ftp
123
2、生成vsftpd的认证文件
# db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
注:如果没有db_load命令,请安装db4*相关rpm包。
# chmod 600 /etc/vsftpd/vsftpd_login.db --设置认证文件只对用户可读可写
3、建立虚拟用户所需的PAM配置文件
# vi /etc/pam.d/vsftpd 添加一下内容
auth required /lib(32位的)/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib(32位的)/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
注意:以上2行中最后的2个文件名vsftpd_login和第2个步骤中的数据库名字必须一致!
4、建立虚拟用户所要访问的目录并设置相应权限
# mkdir /var/ftp/pub/FTP--创建FTP工作目录
# useradd -d /var/ftp/pub/FTP -s /sbin/nolog virtual (用户名) --用于映射到本地的用户
# chown virtual:virtual/var/ftp/pub/FTP --FTP文件夹所属virtual用户
# chmod 700 /var/ftp/pub/FTP --权限可读可写
5、设置vi /etc/vsftpd/vsftpd.conf 配置文件
首先关闭匿名用户anonymous_enable=YE改为NO 或者在前边加#,在末尾添加:
guest_enable=YES --开启虚拟用户
guest_username=virtual --本地虚拟用户名(映射到本地的用户名)
user_config_dir=/etc/vsftpd_user_conf --用户配置文件目录设置
# systemctl restart vsftpd --重启服务
6、建立用户配置文件目录
# mkdir /etc/vsftpd_user_conf--使用mkdir命令建立用户配置文件目录
为虚拟用户建立单独的配置文件,用户配置文件名称与用户名相同(我自己新建了三个用户)
当然你也可以建N个虚拟用户
为每个FTP虚拟用户都可以独立设置其权限(例如zhangwenbo用户) 添加以下配置文件,当然,其他的虚拟用户配置文件可以模仿一下的自行配置
#vi /etc/vsftpd_user_conf/zhangwenbo--虚拟用户zhangwenbo
local_root=/home/ftp (当然,你高兴也可以设置成其它,但要注意virtual用户对此目录的权限)
anon_world_readable_only=NO (使download用户的能下载,也只能下载;写成YES,将不能列出文件和目录)
#vi /etc/vsftpd_user_conf/test --虚拟用户test
local_root=/home/ftp
anon_world_readable_only=NO --可读可下载
write_enable=YES (写权限)
anon_mkdir_write_enable=YES --可创建和删除文件夹
anon_upload_enable=YES(上传权限)
anon_other_write_enable=YES(删除/重命名的权限)
#vi /etc/vsftpd_user_conf/ftp--虚拟用户ftp
local_root=/var/ftp/pub/FTP --自己的目录名FTP
anon_world_readable_only=NO
anon_umask=022 (由于web页面的特殊性,故单独设置上传文件权限为755,此掩码值可根据具体情况更改)
write_enable=YES (写权限)
anon_mkdir_write_enable=YES (新建目录权限)
anon_upload_enable=YES(上传权限)
anon_other_write_enable=YES(删除/重命名的权限)
然后重启服务
#systemctl stop vsftpd
#systemctl start vsftpd
---------测试成功----------
7、乱码补丁:
其它发行版本则要手动安装:
下载源码-解压-把补丁复制到源码目录
命令:
#patch -p0 < vsftpd-2.0.5-encoding.patch
#patch -p0 < chinese_log.patch
#.configure
#make
#make install
方法二( 帐号写入MySQL数据库):
8、安装Mysql:
#apt-get install mysql-server mysql-client
为了安全,请给Mysql设置密码:
#mysqladmin password ***** (****就是你新设的Mysql的密码)
9、将虚拟用户帐号和密码保存在Mysql数据库中:
我们建立数据库vsftpdvu,表users,字段name和passwd用于保存虚拟用户的用户名和口令,同时增加三个虚拟用户download、admin 、web。
#mysql –p
mysql>create database vsftpd;
mysql>use vsftpd;
mysql>create table users(name char(16) binary,passwd char(16) binary);
mysql>insert into users (name,passwd) values ("zhangwenbo",password("123"));
mysql>insert into users (name,passwd) values ("test",password("123"));
mysql>insert into users (name,passwd) values ("ftp",password("123"));
mysql>quit
10、授权virtual可以读vsftpdvu数据库的users表。
#mysql -u root mysql -p
mysql>grant select on ers to virtual@localhost identified by "*****"; ((****并非步骤8中的密码)
mysql>quit
如果要验证刚才的操作是否成功可以执行下面命令:
#mysql -u virtual –p**** vsftpdvu (****是步骤10中设的密码)
mysql>select * from users;
如果成功,将会列出download、web、apollo和加密后的密码。
11、安装MySQL的PAM验证
#apt-get install libpam-mysql
12、我们要设置vsftpd的PAM验证文件。
新建开/etc/pam.d/ftp.vu文件,加入以下内容:
auth required pam_mysql.so user=virtual passwd=**** host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
(****是步骤10中设的密码)
account required pam_mysql.so user=virtual passwd=**** host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
(****是步骤10中设的密码)
crypt表示口令字段中口令的加密方式:
crypt=0,口令以明文方式(不加密)保存在数据库中;
crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;
crypt=2,口令经过MySQL的password()函数加密后保存。
最后,重新启动VSFTPD。