FTP文件传输服务”安装配置实例
目录
-
简介
-
ftp工作原理
-
常见的FTP服务
-
Vsftpd服务器的安装
-
Vsftpd.conf配置文件详解
-
配置FTP服务器实例
-
-
实例:配置匿名用户
-
实例:配置本地用户登录
-
实例:配置虚拟用户登录(MySQL认证)
-
实例:控制用户登录
-
实例:设置欢迎信息
-
-
FTP服务器配置与管理
简介
ftp工作原理
主动模式
工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:
被动模式
工作端口和模式
数据传输原理: FTP的传输有两种方式:ASCII
、二进制
。
ASCII传输方式
二进制传输模式
常见的FTP服务
Vsftpd服务器的安装
软件包
vsftpd-2.2.2-11.el6_4.1.x86_64.rpm //服务端软件包
ftp-0.17-54.el6.x86_64.rpm //客户端软件包
lftp-4.0.9-1.el6.x86_64.rpm //类似ftp的客户端软件包,具有增强功能
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
/etc/vsftpd/vsftpd.conf //主配置文件,核心配置文件
/etc/vsftpd/ftpusers //黑名单,这个里面的用户不允许访问FTP服务器
/etc/vsftpd/user_list //白名单,允许访问FTP服务器的用户列表
服务启动与关闭
[root@localhost vsftpd]# chkconfig vsftpd on
[root@localhost vsftpd]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@localhost vsftpd]# netstat -antup | grep ftp
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2579/vsftpd
tcp 0 0 10.1.252.97:21 10.1.250.64:54777 ESTABLISHED 2582/vsftpd
Vsftpd.conf配置文件详解
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
#################用户登陆控制##############
anonymous_enable=YES #接受匿名用户
no_anon_password=YES #匿名用户login时不询问口令
anon_root=(none) #匿名用户主目录
local_enable=YES #接受本地用户
local_root=(none) #本地用户主目录
deny_email_enable=YES #如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录
check_shell=YES #仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录
userlist_enable=YES #若启用此选项,userlist_deny选项才被启动
userlist_deny=NO #若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录
#如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录
passwd_chroot_enable=NO #切换目录密码支持
ftp_username=FTP #定义匿名登入的使用者名称。默认值为ftp。
#################用户权限控制###############
write_enable=YES #可以上传(全局控制).
local_umask=022 #本地用户上传文件的umask
file_open_mode=0666 #上传文件的权限配合umask使用
anon_upload_enable=NO #匿名用户可以上传
anon_mkdir_write_enable=NO #匿名用户可以建目录
anon_other_write_enable=NO #匿名用户修改删除
anon_world_readable_only=YES #如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES。
#guest_enable=NO #如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名
chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
chown_username=lightwiter #匿名上传文件所属用户名
chroot_list_enable=YES #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
async_abor_enable=YES #允许使用"async ABOR"命令,一般不用
ascii_upload_enable=YES #使用ASSCII上传
ascii_download_enable=YES #用ASCII 模式下载
secure_chroot_dir=/usr/share/empty #这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当
vsftpd不需要file system 的权限时,就会将使用者限制在此数据夹中
默认值为/usr/share/empty
###################超时设置##################
idle_session_timeout=600 #空闲连接超时
data_connection_timeout=120 #数据传输超时
ACCEPT_TIMEOUT=60 #PAVS请求超时
connect_timeout=60 #PROT模式连接超时
################服务器功能选项###############
xferlog_enable=YES #开启日记功能
xferlog_std_format=YES #使用标准格式
#log_ftp_protocol=NO #当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.
pasv_enable=YES #允许使用pasv模式
#pasv_promiscuous=NO #关闭安全检查,Pasv向
#port_enable=YES #允许使用port模式
#prot_promiscuous #关闭安全检查,Port向
tcp_wrappers=YES #开启tcp_wrappers支持
pam_service_name=vsftpd #定义PAM 所使用的名称,预设为vsftpd
nopriv_user=nobody #当服务器运行于最底层时使用的用户名
pasv_address=(none) #使vsftpd在pasv命令回复时跳转到指定的IP地址.(服务器联接跳转?)
#################服务器性能选项##############
#ls_recurse_enable=YES #是否能使用ls -R命令以防止浪费大量的服务器资源
#one_process_model #是否使用单进程模式
listen=YES #绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式
text_userdb_names=NO #当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出
现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名
称,则将此功能开启。
use_localtime=NO #显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
#use_sendfile=YES #测试平台优化
################信息类设置################
ftpd_banner=WelcomeFTP Server. #login时显示欢迎信息.如果设置了banner_file则此设置无效
dirmessage_enable=YES #允许为目录配置显示信息,显示每个目录下面的message_file文件的内容 #setproctitle_enable=YES #显示会话状态信息,关!
##############文件定义 ##################
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list#定义不能更改用户主目录的文件
userlist_file=/etc/vsftpd/vsftpd.user_list #定义限制/允许用户登录的文件
banner_file=/etc/vsftpd/banner #定义登录信息文件的位置
banned_email_file=/etc/vsftpd.banned_emails #禁止使用的匿名用户登陆时作为密码的电子邮件地址
xferlog_file=/var/log/vsftpd.log #日志文件位置
message_file=.message #目录信息文件
##############目录定义 #################
user_config_dir=/etc/vsftpd/userconf #定义用户配置文件的目录
#定义本地用户登陆的根目录,注意定义根目录可以是相对路径
也可以是绝对路径.相对路径是针对用户家目录来说的.
local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk
anon_root=/var/ftp #匿名用户登陆后的根目录
#############用户连接选项#################
max_clients=100 #可接受的最大client数目
max_per_ip=5 #每个ip的最大client数目
connect_from_port_20=YES #使用标准的20端口来连接ftp
listen_address=192.168.0.2 #绑定到某个IP,其它IP不能访问
#listen_port=2121 #绑定到某个端口
#ftp_data_port=2020 #数据传输端口
pasv_max_port=0 #pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。
pasv_min_port=0 #pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。
##############数据传输选项#################
anon_max_rate=51200 #匿名用户的传输比率(b/s)
local_max_rate=5120000 #本地用户的传输比率(b/s)
配置FTP服务器实例
匿名FTP的基本配置
[root@localhost ~]# lftp 10.1.252.97
lftp 10.1.252.97:~> ls
drwxr-xr-x 2 0 0 4096 May 11 06:17 pub
lftp 10.1.252.97:/> cd pub/
lftp 10.1.252.97:/pub> put /etc/issue
put: Access failed: 550 Permission denied. (issue) //拒绝上传
lftp 10.1.252.97:/pub> get 1.txt //可以下载
lftp 10.1.252.97:/pub>
匿名ftp的其他设置
write_enable=YES
anon_upload_enable=YES
[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
lftp 10.1.252.97:/pub> put /etc/issue
79 bytes transferred //成功上传
lftp 10.1.252.97:/pub> ls
-rw-r--r-- 1 0 0 0 Jul 25 01:13 1.txt
-rw------- 1 14 50 79 Jul 25 01:19 issue
write_enable=YES
anon_mkdir_write_enable=YES
[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
lftp 10.1.252.97:/pub> mkdir zabbix
mkdir ok, `zabbix' created
lftp 10.1.252.97:/pub> ls //创建成功
-rw-r--r-- 1 0 0 0 Jul 25 01:13 1.txt
-rw------- 1 14 50 79 Jul 25 01:19 issue
drwx------ 2 14 50 4096 Jul 25 01:23 zabbix
配置本地用户登录
[root@localhost pub]# useradd zhanghe
[root@localhost pub]# passwd zhanghe
Changing password for user zhanghe.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
local_enable=YES
[root@localhost html]# chmod o+w /var/www/html/
配置虚拟用户登录(MySQL认证)
[root@localhost ~]# yum install mysql-server -y #安装MySQL数据库
[root@localhost ~]# service mysqld start #启动数据库
[root@localhost ~]# mysql_secure_installation #初始化MySQL配置
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> GRANT ALL ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec) #授予用户权限
mysql> CREATE DATABASE vsftpd; #创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> use vsftpd; #进入指定默认数据库
Database changed
mysql> CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL); #创建表
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO users (name,password) VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu')),('lucy',PASSWORD('mageedu')); #插入3行,用户为tom,jerry,lucy
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> FLUSH PRIVILEGES; #刷新权限
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
[root@localhost ~]# yum -y install pam_mysql
[root@localhost ~]# mkdir -pv /ftproot/{pub,upload}
[root@localhost ~]# useradd -d /ftproot vuser
[root@localhost ~]# setfacl -m u:vuser:rwx /ftproot/upload
[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
//并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/vusers_conf
[root@localhost ~]# mkdir /etc/vsftpd/vusers_conf
[root@localhost ~]# cd /etc/vsftpd/vusers_conf/
[root@localhost vusers_conf]# touch tom
[root@localhost vusers_conf]# vim tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,1,252,97,44,23).
150 Here comes the directory listing.
drwxr-xr-x 2 500 500 4096 Jul 25 01:47 51cto
drwx------ 2 501 501 4096 Jul 25 02:17 iii
drwxr-xr-x 2 500 500 4096 Jul 25 01:45 zabbix
226 Directory send OK.
ftp>
控制用户登录
userlist_enable=YES
userlist_file=/etc/vsftpd/ftpuser_list
[root@localhost vsftpd]# vim user_list
或者:vim /etc/vsftpd/ftpuser_list
halt
mail
news
uucp
operator
games
nobody
tom //添加禁止登录的用户
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
530 Permission denied.
Login failed.
ftp> ls
530 Please login with USER and PASS.
Passive mode refused.
ftp>
设置欢迎信息
用户登录欢迎信息
ftpd_banner=Welcome to blah mageedu@ftp service.
[root@localhost vsftpd]# service vsftpd reload
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 Welcome to blah mageedu@ftp service.
Name (10.1.252.97:root): tom
登录信息写入文件
#ftpd_banner=Welcome to blah mageedu@ftp service.
banner_file=/etc/vsftpd/banner.txt
[root@localhost vsftpd]# cat banner.txt
*************************************************
* *
* Welocome to Mageedu FTP server *
* *
*************************************************
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220-*************************************************
220-* *
220-* Welocome to Mageedu FTP server *
220-* *
220-*************************************************
220
Name (10.1.252.97:root):
目录欢迎信息
dirmessage_enable=YES
[root@localhost vsftpd]# cat /var/www/html/.message
欢迎进入ftp根目录
[root@localhost html]# service vsftpd reload
Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230-欢迎进入ftp根目录
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
日志管理
[root@localhost ~]# cat /var/log/xferlog
Mon Jul 25 09:13:36 2016 1 10.1.252.96 0 /pub/1.txt b _ o a lftp@ ftp 0 * c
//提示时间:从10.1.252.96访问:访问的文件:b是二进制传输方式:o是服务器到客户端:a表示匿名
Mon Jul 25 09:19:49 2016 1 10.1.252.96 79 /pub/issue b _ i a lftp@ ftp 0 * c
//提示时间:从10.1.252.96访问:访问的文件:b是二进制传输方式:i是客户端到服务端:a表示匿名
Mon Jul 25 09:46:01 2016 1 10.1.250.64 49451 /var/www/html/Linux_Services_and_Security.txt b _ i r zhanghe ftp 0 * c
提示时间:从10.1.252.64访问:访问的文件:b是二进制传输方式:i是客户端到服务端:r表示真实用户:服务名ftp:认证方式0表示无:*无法获取用户ID:c表示传输已完成
[root@localhost ~]#
本文转载自 “家住海边喜欢浪” 博客,请务必保留此出处http://zhang789.blog.51cto.com/11045979/1863022