Linux FTP服务器的搭建与配置+基于关系型数据库实现用户认证
一、服务器端的安装:
yum install vsftpd
1)查看安装后生成的哪些文件
[root@node2 ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd <==========主志日志文件
/etc/pam.d/vsftpd《==================认证文件
/etc/rc.d/init.d/vsftpd《=============服务脚本
/etc/vsftpd《=========================程序的配置文件
/etc/vsftpd/ftpusers《=========
/etc/vsftpd/user_list《==================控制用户访问的
/etc/vsftpd/vsftpd.conf《================主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/var/ftp《===============================服务器文件存放目录
/var/ftp/pub《===========================服务器上共享文件的存放位置
2)启动服务
[root@node2 ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
3)查看启动装态
[root@node2 ~]# ps aux | grep vsftpd
root 5200 0.0 0.0 52524 788 ? Ss 22:55 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 5207 0.0 0.0 103252 836 pts/0 S+ 22:56 0:00 grep vsftpd
[root@node2 ~]# ss -tnl《======查看一下22号端口是否启用起来了
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::111 :::*
LISTEN 0 128 *:111 *:*
LISTEN 0 32 *:21 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 *:22 *:*
二、服务器端配置
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES《====启用匿名用户
local_enable=YES《=========充许本地用户访问
write_enable=YES《=========是否允许上传文件
anon_upload_enable=YES《====匿名用启上传
anon_mkdir_write_enable=YES《=匿名用户创建目录
anon_other_write_enable=YES《==匿名用户有写权限
2)定义欢迎信息
banner_file=/path/to/some_banner_file
ftp_banner=some string
dirmessage_enable=yes
3)vsftp控制登录用户的机制:
/etc/vsftpd/ftpusers中的用户都不允许使用ftp服务, 这是在/etc/pam.d/vsftpd中定义;
连接限制:
max_clients: 最大并发连接数
max_per_ip: 每IP可同时发起并发请求
传输速率:
anon_max_rate: 匿名用户的最大传输速率,单位是“字节/秒”;
local_max_rate: 本地用户……………………
上传文件的umask:
anno_umask: 匿名用户上传文件的umask;
local_umask:
修改匿名用户上传文件的属主和属组:
chown_uploads=YES
chown_username=someuser
虚拟用户:
所有的虚拟用户会映射会一个系统用户,访问时的文件目录是为此系统用户的家目录;
虚拟用户:
hash编码的文件:
奇数行为用户名,偶数行为密码
三、FTP基于关系型数据库:(pam-mysql实现认证)
1)mysql编译安装方式
准备所需的安装包 #mysql-5.5.33-linux2.6-x86_64.tar.gzs[root@node2 ~]# groupadd -r mysql
groupadd: group ‘mysql‘ already exists
[root@node2 ~]# useradd -g mysql -r -s /sbin/nolgin mysql
useradd: user ‘mysql‘ already exists
[root@node2 ~]# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
[root@node2 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local
[root@node2 ~]# cd /usr/local
[root@node2 local]# ls
bin games lib libexec sbin src
etc include lib64 mysql-5.5.33-linux2.6-x86_64 share
[root@node2 local]# ln -sv mysql-5.5.33-linux2.6-x86_64 mysql
`mysql‘ -> `mysql-5.5.33-linux2.6-x86_64‘
为硬盘创建一个20G的分区,怎么样分区前面有介绍这是不详细叙。
[root@node2 local]# fdisk /dev/sda
把创建好的分区,整合成为逻辑卷:
[root@node2 local]# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
[root@node2 local]# vgcreate myvg /dev/sda3
Volume group "myvg" successfully created
[root@node2 local]# lvcreate -L 10G -n mydata myvg
Logical volume "mydata" created
[root@node2 local]# lvs <==========查看创建好的逻辑卷
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
mydata myvg -wi-a----- 10.00g
root vg0 -wi-ao---- 20.00g
swap vg0 -wi-ao---- 2.00g
usr vg0 -wi-ao---- 10.00g
var vg0 -wi-ao---- 20.00g
[root@node2 local]# mke2fs -t ext4 /dev/myvg/mydata<======为逻辑卷格式化
[root@node2 local]# mkdir /data 《== ==============创建一个data目录,把逻辑卷开机挂载此目录下
root@node2 local]# vim /etc/fstab《===============设定开机挂载,把下面内容加入fstab中。
/dev/myvg/mydata /data ext4 defaults,noatime 0 0
[root@node2 local]# mount -a
[root@node2 local]# mount<===============看到下面的提示才证明开机能挂载上,不然看看哪里设置错了吧。
/dev/mapper/myvg-mydata on /data type ext4 (rw,noatime)
2)、更改文件权限,回为mysql服务的启动,只有mysql用户才能运行。
[root@node2 local]# cd /data
[root@node2 data]# mkdir mydata
[root@node2 data]# chown -R mysql.mysql mydata/
[root@node2 data]# cd /usr/local/mysql
[root@node2 mysql]# chown -R root.mysql ./*
3)、为mysql程序提供服务脚本。
[root@node2 mysql]# scripts/mysql_install_db --datadir=/data/mydata --user=mysql
[root@node2 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@node2 mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@node2 mysql]# vim /etc/my.cnf
datadir = /data/mydata
innodb_file_per_table = ON
[root@node2 mysql]# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
4)mysql的头文件输出和库文件输出。
[root@node2 mysql]# . /etc/profile.d/mysql.sh
[root@node2 mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql
`/usr/include/mysql‘ -> `/usr/local/mysql/include/‘
[root@node2 mysql]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
[root@node2 mysql]# ldconfig -p | grep mysql
libtcmalloc_minimal.so.0 (libc6,x86-64) => /usr/local/mysql/lib/libtcmalloc_minimal.so.0
libmysqlclient_r.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient_r.so.16
libmysqlclient.so.18 (libc6,x86-64) => /usr/local/mysql/lib/libmysqlclient.so.18
二、安装pam_mysql
root@node2 ~]# tar xf pam_mysql-0.7RC1.tar.gz
[root@node2 ~]# cd pam_mysql-0.7RC1
[root@node2 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/local/mysql --with-openssl
[root@node2 pam_mysql-0.7RC1]# make && make install
[root@node2 pam_mysql-0.7RC1]# ls -l /lib/security/
total 124
-rwxr-xr-x 1 root root 885 Mar 26 18:23 pam_mysql.la
-rwxr-xr-x 1 root root 119100 Mar 26 18:23 pam_mysql.so
[root@node2 pam_mysql-0.7RC1]# ln -sv /lib/security/pam_mysql.so /lib64/security/
`/lib64/security/pam_mysql.so‘ -> `/lib/security/pam_mysql.so‘
三、创建数据库并授权用户
[root@node2 ~]# mysql
mysql> CREATE DATABASE vsftpd;<========================================创建一个vsftpd数据库
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL ON vsftpd.* TO ‘vsftpd‘@‘172.16.%,%‘IDENTIFIED BY ‘vsftpd‘;<==给用户授权,我主机是172.16网段的。
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> \q
Bye
2)验证一下是否能够登陆
[root@node2 ~]# mysql -uvsftpd -h172.16.24.8 -pvsftpd
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.5.33-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
mysql> SHOW DATABASES;<====验证创建的数据库是否存在
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
| vsftpd |
+--------------------+
3 rows in set (0.03 sec)
mysql> CREATE TABLE users (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,name VARCHAR(50) NOT NULL, password CHAR(48) NOT NULL);
Query OK, 0 rows affected (0.01 sec)<===创建表
mysql> DESC users;
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| password | char(48) | NO | | NULL | |
+----------+------------------+------+-----+---------+----------------+
3 rows in set (0.04 sec)
mysql> INSERT INTO users (name,password) VALUES (‘tom‘,‘toms‘),(‘jerry‘,‘jerrys‘);《====创建两个用户tom 和jerry;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> \q
Bye<<<-------------------退出数据库
三、配置vsftpd
[root@node2 ~]# vim /etc/pam.d/vsftpd.mysql<========创建一个vsftpd文件添加如下两行
auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=172.16.24.8 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=172.16.24.8 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
以上请写你自己的地址。
注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。
.修改vsftpd的配置文件,使其适应mysql认证
2)建立虚拟用户映射的系统用户及对应的目录
[root@node2 ~]# useradd -s /sbin/nologin -d /var/ftproot vuser<======创建一个vuser用户
[root@node2 ~]# chmod go+rx /var/ftproot/<=====================让其它用户对这个目录有读写权限
3)请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES《========启动匿名用户
local_enable=YES<=============启动本地用户
write_enable=YES<=============开启上传
anon_upload_enable=NO<========匿名上传启用
anon_mkdir_write_enable=NO<===开启用启可以创建目录
chroot_local_user=YES<======== 禁锢本地用户于家目录
[root@node2 vsftpd]# vim /etc/vsftpd/vsftpd.conf
而后添加以下选项
guest_enable=YES<==========启用虚拟用户
guest_username=vuser<======虚拟用户映射到哪个用户
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
4)重启服务配置完成
[root@node2 ~]# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
本文出自 “linux” 博客,请务必保留此出处http://8519539.blog.51cto.com/8509539/1407714