天天看点

文件共享服务器 -----ftp服务<一>

文件共享服务器:

ftp:(文件传输协议) ftp协议

client    /server

client      tcp/ip cmd

       浏览器 

cuteftp     leapftp    flashxp   ssl

server  

 windows iis   server-u

linux   wu-ftp   vsftpd   pureftp

ftp 工作方式 :主动方式     被动方式

21(连接控制端口) 20(传递数据端口)

客户端访问(1)主动方式                      (2)被动方式

文件共享服务器 -----ftp服务<一>

ftp指令 (cmd)

pwd 在哪

cd 切换目录

dir 远程查看目录

get(下载) mget (多个下载)

put(上传)   mput(多个上传)

!dir(查看本地)

lcd(切换本地)

传输方式: ascii和bin(二进制)

使用linux做ftp服务器

安装包为:vsftpd-2.0.5-16.el5_4.1.i386.rpm

vsftpd的主配置文件为:/etc/vsftpd/vsftpd.conf

安装完后最初可以直接启用

[root@mail server]# service vsftpd start

为 vsftpd 启动 vsftpd:                                    [确定]

这时我们可以通过很多方式登录

[root@mail sasl2]# ftp 127.0.0.1

connected to 127.0.0.1.

220 (vsftpd 2.0.5)

530 please login with user and pass.

kerberos_v4 rejected as an authentication type

name (127.0.0.1:root): anonymous

331 please specify the password.

password:

230 login successful.

remote system type is unix.

using binary mode to transfer files.

ftp> dir     查看目录

227 entering passive mode (127,0,0,1,133,210)

150 here comes the directory listing.

drwxr-xr-x    2 0        0            4096 dec 04 2009 pub

226 directory send ok.

ftp> pwd    查看位置

257 "/"

ftp> !dir 查看本地目录

libanonymous.la            liblogin.la     libplain.la        libsasldb.la           sendmail.conf

libanonymous.so           liblogin.so           libplain.so              libsasldb.so          smtpd.conf

libanonymous.so.2 liblogin.so.2        libplain.so.2    libsasldb.so.2

libanonymous.so.2.0.22 liblogin.so.2.0.22 libplain.so.2.0.22    libsasldb.so.2.0.22

ftp> bye

221 goodbye.

[root@mail sasl2]# touch /home/user1/f1   在user1用户的家目录创建文件

[root@mail sasl2]# lftp 127.0.0.1    使用lftp方式登录(默认匿名登录)

lftp 127.0.0.1:~> pwd              

ftp://127.0.0.1

lftp 127.0.0.1:~> dir

lftp 127.0.0.1:/> user user1         切换用户登录  

口令:

lftp [email protected]:~> dir

-rw-r--r--    1 0        0               0 jul 24 09:13 f1

drwx------    3 500      500          4096 jul 24 08:30 mail

lftp [email protected]:~>

[root@mail sasl2]# lftp -u user1 127.0.0.1 使用用户名登录

lftp [email protected]:~> pwd        

ftp://[email protected]

lftp [email protected]:~> bye 退出登录

只用linux才支持lftp登录方式

针对资源的权限:本地权限,网络权限    ,如果看、两个权限冲突时取最小权限

编译vsftpd的主配置文档

默认状态下ftp的共享文件夹/var/ftp/pub的权限为:

[root@mail ftp]# ll

drwxr-xr-x 2 root root 4096 2009-12-04 pub      不允许其他用户写入的,为了便于他们的上传我们改一下目录权限

[root@mail ftp]# chmod a+wt pub       不允许删除该目录

[root@mail sasl2]# vim /etc/vsftpd/vsftpd.conf 配置参数可以使用 man 5 vsftpd找到

12 anonymous_enable=yes     允许吗、匿名用户登录的

 15 local_enable=yes      允许本地用户登录

 18 write_enable=yes      本地与网络可读可写

 22 local_umask=022        屏蔽权限

 23anon_umask=073    默认是077,为匿名用户上传的文件保留可以下载权限(添加的)

 27 #anon_upload_enable=yes    匿名用户向ftp上传东西被禁用

 31 #anon_mkdir_write_enable=yes 匿名账号创建文件夹(但是只有它会只能传不能下载)

anon_other_write_enable=yes 添加别的写权限后才能执行对上传的目录执行删除改名

35 dirmessage_enable=yes 进入目录提示目录消息(需要在该目录下创建.message文件)

 39 xferlog_enable=yes     启用传输时的日志记录

 42 connect_from_port_20=yes

 53 xferlog_file=/var/log/xferlog 打开它才会在传输时记录日志(该文件在传输时才会产生) 

 57 xferlog_std_format=yes    记录的日志的格式,该格式为标准格式

 58 log_ftp_protocol=no 在日志中记录用户登录上执行的操作命令(但是日志格式必须为非标准,即上一行为no)

60 #idle_session_timeout=600 会话空闲超时

 63 #data_connection_timeout=120 连接超时(三次握手)

 86 ftpd_banner=welcome to blah ftp service. 进入ftp时的消息,排头,不用登录就能看见

 90 deny_email_enable=yes   匿名账号的密码可以用邮箱的账号,那么ftp就会把ftp的一些相关信息发到该邮箱中,不利于安全,我们可以借此禁用默写邮箱做密码,将其写入banned_emails文件中

 91 # (default follows) 默认是允许的

 92 banned_email_file=/etc/vsftpd/banned_emails   列入禁止使用邮箱账号做密码的名单,该文件需要先收工创建

 97 chroot_list_enable=yes    根据列出的表单将用户锁定在家目录中

 98 # (default follows)

 99 chroot_list_file=/etc/vsftpd/chroot_list 该文件写入被锁定的账号(手动创建)

 100 chroot_local_user=yes 将登录的所有用户都锁定在家目录

 111 listen=yes    (可以做成依赖于超级守护进程的服务器xinetd)

118 pam_service_name=vsftpd    ftp账户使用pam验证

119 userlist_enable=yes    开启针对列表中用户的访问权限,该列表为/etc/vsftpd/user_list

120 userlist_deny=yes   决定该列表中的用户的访问时拒绝(yes)还是允许(no)

121 tcp_wrappers=yes    使用系统中的简易防火墙(这个简易防火墙有两个文件/etc/hosts.allow与/etc/hosts.deny)

修改ftp的主配置文件后一定要重启vsftpd

系统的建议防火墙,主要依靠/etc/hosts.allow和/etc/hosts.deny

在/etc/hosts.deny系统先看到它默认动作是allow(可以改成deny)

vsftpd:192.168.20.33:allow 语法格式:服务:来源:动作(允许该地址访问)

在/etc/hosts.deny中系统最后才读取

vsftpd:all:deny

文件共享服务器 -----ftp服务<一>

下面做一个ftp的小实例

1.新购一块磁盘,将ftp资料传到该目录下 —》分区格式化——》挂载/mnt/ftp

                    建立目录   public 公共文档 ,只许下载,不许上传与更改

2.每个用户家目录   home/用户   空间限制10m

3.同时在线用户3个 ,每用户连接数2

4.传递速率 1m/s 本地用户    100k/s 匿名用户

将新增磁盘分区格式化后,然后启用磁盘配额

[root@mail ~]# vim /etc/fstab

/dev/sdb1      /mnt/ftp           auto    defaults,usrquota       0 0

然后使用mount -a 或者重启,是这些参数生效

[root@mail ~]# mount

/dev/sdb1 on /mnt/ftp type ext2 (rw,usrquota)   生效了

对用户做磁盘配额的控制

[root@mail ~]# quotacheck -augvc

在/mnt/ftp就生成文件:aquota.user

[root@mail ftp]# edquota -u user1

 filesystem       blocks    soft     hard     inodes     soft     hard

 /dev/sdb1       0        10000   10000       3       0       0

[root@mail ftp]# edquota -p user1 user2 将user1的设置拷贝给user2

[root@mail ftp]# quotaon /dev/sdb1

[root@mail ftp]# vim /etc/rc.d/rc.local    编译开机启动配额

quotaon /dev/sdb1    添加该项

在/mnt/ftp下创建匿名账号访问的公共目录public(对other用户没有写权限)

[root@mail ftp]# mkdir public

[root@mail ftp]# cd public/

[root@mail public]# touch l1

[root@mail public]# touch l2

在 /mnt/ftp 为用户创建家目录

[root@mail ftp]# mkdir home

[root@mail ftp]# mv /home/user* home/ 将本地用户转移过来

[root@mail ftp]# ll home/

总计 2

drwx------ 4 user1 user1 1024 07-24 17:13 user1

drwx------ 4 user2 user2 1024 07-24 16:42 user2

[root@mail ftp]# vim /etc/passwd   修改passwd文件中用户家目录的路径

user1:x:500:500::/mnt/ftp/home/user1:/bin/bash

user2:x:501:501::/mnt/ftp/home/user2:/bin/bash

但是新建的账号家目录还是在/home/下,那么我们需要创建账号默认的家目录

[root@mail ftp]# useradd -d -b /mnt/ftp/home   那么在创建的账号默认的家目录就改了

[root@mail ftp]# useradd user3

[root@mail ftp]# grep user /etc/passwd

user3:x:502:502::/mnt/ftp/home/user3:/bin/bash

默认匿名账号的根默认是/var/ftp/pub,我们需要改变它的根,让它为/mnt/ftp/public

在主配置文件中添加

[root@mail ftp]# vim /etc/vsftpd/vsftpd.conf

anon_upload_enable=yes 允许匿名用户下载

anon_root=/mnt/ftp/public

此时配额已经做我们可以上传文件是试试

创建规定大小文件:dd if=/dev/zero of=f2 bs=1m count=5

做用户连接数以及本地与匿名账户传输速率做限制

max_clients=3   最大用户连接数位3

max_per_ip=2   每用户最多连接数位2

local_max_rate=1000000     本地最大传输速率为100m

anon_max_rate=100000      匿名用户最大传输速率为10m

重启vsftpd就可以做测试了

<b>实现基于超级守护进程的ftp</b>

我们将ftp服务做成超级守护进程就能实现在规定时间可以访问了

首先编译主配置文件/etc/vsftpd/vsftpd.conf

listen=no               切换服务模式

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

[root@mail xinetd.d]# cp -p tftp vsftpd    生成ftp的超级守护进程文件

[root@mail ~]# vim /etc/xinetd.d/vsftpd     编译该文件

service ftp

{

        id                      =vsftpd

        socket_type             = stream

        protocol                = tcp

        wait                    = no

        user                    = root

        server                  = /usr/sbin/vsftpd

        server_args             = /etc/vsftpd/vsftpd.conf

        disable                 = no

       access_times            = 08:00-20:00

}

[root@mail ~]# service xinetd restart       便可以启动ftp了

ftp安全

1.加密ftp   ssl   ftps 证书

让ca给自己颁发一个证书利用证书加密

[root@mail ~]# cd /etc/pki/

[root@mail pki]# vim tls/openssl.cnf

 45 dir             = /etc/pki/ca

88 countryname             = optional

 89 stateorprovincename     = optional

 90 organizationname        = optional

:80,90 r/match/optional

[root@mail ca]# mkdir crl certs newcerts   创建这些目录

[root@mail ca]# touch index.txt serial 创建文件

[root@mail ca]# vim serial   给该文件一个起始序列号

01

在ca目录下产生一个钥匙

[root@mail pki]# cd ca/

[root@mail ca]# openssl genrsa 1024 &gt;private/cakey.pem

generating rsa private key, 1024 bit long modulus

...........................................++++++

.......++++++

e is 65537 (0x10001)

然后产生一个自签发的证书

[root@mail ca]# openssl req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem

[root@mail ca]# ll

总计 12

-rw-r--r-- 1 root root 1074 07-17 11:26 cacert.pem     证书文件产生

drwx------ 2 root root 4096 07-17 11:24 private

[root@mail ca]# chmod 600 private/cakey.pem    对私钥进行权限处理

[root@mail ca]# mkdir -pv /etc/ftp/certs   创建多级子目录存放ftp的证书文件

mkdir: 已创建目录 “/etc/ftp”

mkdir: 已创建目录 “/etc/ftp/certs”

[root@mail ca]# cd /etc/ftp/certs/

[root@mail certs]# openssl genrsa 1024 &gt;vsftpd.key   产生钥匙

..++++++

.........++++++

根据钥匙做请求文件:

[root@mail certs]# openssl req -new -key vsftpd.key   -out vsftpd.csr

[root@mail certs]# ll

总计 8

-rw-r--r-- 1 root root 1094 07-17 11:36 vsftpd.csr

-rw-r--r-- 1 root root 887 07-17 11:34 vsftpd.key

[root@mail certs]# openssl ca -in vsftpd.csr -out vsftpd.crt    颁发证书

-rw-r--r-- 1 root root 3032 07-17 11:55 vsftpd.crt

-rw-r--r-- 1 root root 639 07-17 11:54 vsftpd.csr

-rw-r--r-- 1 root root 887 07-17 11:52 vsftpd.key

[root@mail certs]# chmod 600 *    更改一下权限

我们为了测试可是使用wireshark抓包

[root@mail certs]# yum install wireshark -y

[root@mail ~]# tshark -ni eth0 -r "tcp.dstport eq 21"     抓取ftp关于21端口的包

 20.610580 192.168.20.22 -&gt; 192.168.20.66 ftp request: user user1

 20.853138 192.168.20.22 -&gt; 192.168.20.66 tcp 1377 &gt; 21 [ack] seq=13 ack=69 win=372232 len=0

 22.257695 192.168.20.22 -&gt; 192.168.20.66 ftp request: pass 123

在未启用加密验证的情况下,使用账户访问ftp,很容易就会抓到账号与密码

那么我们启用ftp加密

在ftp主配置文件中没有关于加密的,但我们可以根据man vsftpd.conf查看ftp手册来找到

[root@mail certs]# vim /etc/vsftpd/vsftpd.conf

force_local_logins_ssl=yes     强制本地账号登陆加密

force_local_data_ssl=yes       本账号传递数据加密

ssl_enable=yes                打开ssl验证

ssl_tlsv1=yes                 启用ssl的版本号

ssl_sslv3=yes

ssl_sslv2=yes

rsa_cert_file=/etc/ftp/certs/vsftpd.crt        本地证书存放位置 

rsa_private_key_file=/etc/ftp/certs/vsftpd.key   本地钥匙存放位置

之后重启ftp服务

这时我们使用ftp客户端软件测试登陆(命令行不支持ftps)

文件共享服务器 -----ftp服务&lt;一&gt;
文件共享服务器 -----ftp服务&lt;一&gt;

此时再抓包便不会再抓到有关账号跟密码的数据包了

2.虚拟账号(linux操作系统部存在的账号,但是可以登录ftp进行访问)

[root@mail certs]# vim /etc/vsftpd/vuser.txt 创建一个文本,放置虚拟账号

jim   账号

000   密码

然后我们需要生成hash加密的数据库文件以便让后续的pam.userdb这个模块来读取我们的用户名密码进行验证,我们需要安装 db4-utils包

[root@mail certs]# yum install db4-utils -y

[root@mail certs]# cd /etc/vsftpd/

[root@mail vsftpd]# db_load -t -t hash -f vuser.txt vuser.db    生成数据库文件

vsftpd要启动虚拟账号需要跟pam认证模块结合,在/etc/pam.d/有一个vsftpd文件,这是vsftpd利用pam这个认证模块认证账户登录的,我们产生这样一个类似虚拟账号的认证文件

[root@mail vsftpd]# ll

总计 36

-rw------- 1 root root   125 2009-12-04 ftpusers

-rw------- 1 root root   361 2009-12-04 user_list

-rw------- 1 root root 4864 07-17 12:13 vsftpd.conf

-rwxr--r-- 1 root root   338 2009-12-04 vsftpd_conf_migrate.sh

-rw-r--r-- 1 root root 12288 07-17 12:41 vuser.db

-rw-r--r-- 1 root root    18 07-17 12:36 vuser.txt

[root@mail vsftpd]# cd /etc/pam.d/

[root@mail pam.d]# cp vsftpd vsftpd.t

[root@mail pam.d]# vim vsftpd.t

auth       required     pam_userdb.so db=/etc/vsftpd/vuser

account    required     pam_userdb.so db=/etc/vsftpd/vuser

上面dn=后面的就是我们生成好的hash数据文件,文件后缀的不需要打,pam_userdb.so这个模块会自动帮我们识别的,虚拟账号必须映射到系统的一个本地账号上,可以不设密码。

[root@mail pam.d]# vim /etc/vsftpd/vsftpd.conf

pam_service_name=vsftpd.t

guest_enable=yes    打开guest账号

guest_username=test1   设置虚拟账号的映射

跟登录相关的日志放在/var/log/secure

继续阅读