ftp:   文件传输协议

软件包: vsftpd

ftp端口: 控制端口 21/tcp  数据端口 20/tcp(主动模式)

配置文件: /etc/vsftpd/vsftpd.confman vsftpd.conf  man smb.conf

服务端配置:

[root@station230 ~]# yum -y install vsftpd

[root@station230 ~]# service vsftpd restart

[root@station5 ~]# grep ftp /etc/passwd

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[root@station5 ~]# grep alice /etc/passwd

alice:x:2008:2012::/home/alice:/bin/bash

小总:vsftpd未做任何配置:

1. 匿名用户仅能从被锁定的根目录下载文件  /var/ftp

2. 系统用户可以上传文件到他有写权限的任何目录,HOME目录未被锁定

vsftpd支持的用户类型:

匿名用户:ftp

系统用户: alice,jack

虚拟用户: 不存在于系统账号数据中,安全,例如mysql提供的用户账号

从客户端测试:

[root@station5 ~]# yum -y install ftp lftp

[root@station5 ~]# ftp 192.168.2.115//输入用户名和口令

[root@station5 ~]# lftp 192.168.2.115//匿名用户

[root@station5 ~]# lftp alice@192.168.2.115//指定用户

[root@station80 ~]# wget ftp://192.168.2.80/rhel5.repo

[root@station80 ~]# wget ftp://192.168.2.80/rhel5.repo -O /etc/yum.repo.d/rhel5.repo

[root@station80 ~]# cat download.txt 

ftp://192.168.2.80/rhel5.repo

ftp://192.168.2.80/raid.png

[root@station80 ~]# wget -i download.txt 

========基本配置、访问控制========

注意:空格,指令错误,指令重复

[root@station230 ~]# egrep -v '^#|^$' /etc/vsftpd/vsftpd.conf

[root@station230 ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}备份配置文件

anonymous_enable=YES//是否允许匿名用户登录

local_enable=YES//是否允许本地用户登录

write_enable=YES//是否允许写(全局)

local_umask=022//控制本地用户上传文件的默认权限,umask表示要减掉的权限

anon_umask=077//控制匿名用户上传文件的默认权限 

chroot: 锁定用户HOME,针对系统用户

方法一:部分限制

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

方法二:全部限制

chroot_local_user=YES

anon_max_rate=500000//匿名用户限速

local_max_rate=80000//本地用户限速

max_clients=500//ftp最大连接数

max_per_ip=2//单个IP最大连接数,线程数

local_root=/ftproot//指定本地用户访问的root目录

anon_root=/anonroot//指定匿名用户访问的root目录

案例1:

1. 为各个部门建立ftp访问用户,包括部门的管理员

[root@station230 ~]# mkdir -p /ftproot/{hr/{hr01,hr02},it,sale}

[root@station230 ~]# chmod -R 777 /ftproot/

[root@station230 ~]# useradd admin -s /sbin/nologin 

[root@station230 ~]# useradd hr_admin -s /sbin/nologin 

[root@station230 ~]# useradd hr01_admin -s /sbin/nologin 

[root@station230 ~]# useradd hr02_admin -s /sbin/nologin 

[root@station230 ~]# useradd it_admin -s /sbin/nologin 

[root@station230 ~]# useradd sale_admin -s /sbin/nologin

[root@station230 ~]# passwd admin

==================================================

[root@station230 ~]# for i in admin hr_admin hr01_admin hr02_admin it_admin sale_admin

> do

> useradd $i -s /sbin/nologin

> echo 1 |passwd $i --stdin

> done

=========================================================================

2. 配置FTP服务器

注:使用匿名访问公司公共的资源

===主配置文件

[root@station230 ~]# vim /etc/vsftpd/vsftpd.conf

write_enable=NO

chroot_local_user=YES

local_max_rate=100000

max_per_ip=2

user_config_dir=/etc/vsftpd/vsftpd_user_conf指定用户私有配置文件存放的目录

[root@station230 ~]# service vsftpd restart

===私有配置文件

[root@station230 ~]# mkdir /etc/vsftpd/vsftpd_user_conf

[root@station230 ~]# cd /etc/vsftpd/vsftpd_user_conf/

[root@station230 vsftpd_user_conf]# cat admin 

local_root=/ftproot

write_enable=YES

local_max_rate=0

max_per_ip=0

===============vsftpd启动排错===================

尝试启动

[root@station11 ~]# service vsftpd restart

关闭 vsftpd:                                              [失败]

为 vsftpd 启动 vsftpd:                                    [失败]

查看该服务的端21/tcp是否被占用

[root@station11 ~]# netstat -tnlp |grep :21

tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      3514/xinetd         

tcp        0      0 0.0.0.0:2105                0.0.0.0:*                   LISTEN      3514/xinetd 

使用lsof查看21/tcp被哪个进程占用        

[root@station11 ~]# lsof -i TCP:21

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

xinetd  3514 root   17u  IPv4   9902      0t0  TCP *:ftp (LISTEN)

[root@station11 ~]# ls /etc/xinetd.d/

chargen-dgram   daytime-stream  echo-stream   klogin       rsync          time-stream

chargen-stream  discard-dgram   eklogin       krb5-telnet  tcpmux-server

cvs             discard-stream  ekrb5-telnet  kshell       tftp

daytime-dgram   echo-dgram      gssftp        rmcp         time-dgram

[root@station11 ~]# 

[root@station11 ~]# cd /etc/xinetd.d/

[root@station11 xinetd.d]# grep 21 *

[root@station11 xinetd.d]# grep ftp *

gssftp:service ftp

gssftp: server          = /usr/kerberos/sbin/ftpd

rsync:# description: The rsync server is a good addition to an ftp server, as it \

tftp:# description: The tftp server serves files using the trivial file transfer \

tftp:#  protocol.  The tftp protocol is often used to boot diskless \

tftp:service tftp

tftp:   server                  = /usr/sbin/in.tftpd

tftp:   server_args             = -s /tftpboot

[root@station11 xinetd.d]# cat gssftp 

# default: off

# description: The kerberized FTP server accepts FTP connections \

#              that can be authenticated with Kerberos 5.

service ftp

{

        disable = no

        flags           = REUSE

        socket_type     = stream        

        wait            = no

        user            = root

        server          = /usr/kerberos/sbin/ftpd

        server_args     = -l -a

        log_on_failure  += USERID

}

[root@station11 xinetd.d]# chkconfig gssftp off

[root@station11 xinetd.d]# service xinetd restart

停止 xinetd:                                              [确定]

启动 xinetd:                                              [确定]

[root@station11 xinetd.d]# lsof -i TCP:21

[root@station11 xinetd.d]# netstat -tnlp |grep :21

tcp        0      0 0.0.0.0:2105                0.0.0.0:*                   LISTEN      4717/xinetd         

[root@station11 xinetd.d]# service vsftpd restart

关闭 vsftpd:                                              [失败]

为 vsftpd 启动 vsftpd:                                    [确定]

[root@station80 ~]# netstat -tnlp |grep :80检查某个端口是否被占用