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  ]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章