serv-u 如何设置被动模式

2023-02-27 16:22 37次浏览 攻略

降低FTP成本,跨平台和公共网络的文件传输协议

文件传输协议

Windows的服务器端serv-U

客户端cuteftp leapftp flashftp浏览器(IE、firefox)

非常旧的文件传输协议,明确的代码传输,不安全

另一个协议是不要引起混乱。

TFTP trivial file transfer protocol简单文件传输协议

使用的端口号:

数据传输端口20

命令发送端口21

主动:默认情况下,FTP服务打开21端口以接受控制命令,服务器使用20端口传输数据(连接客户端大于1024的随机端口)

被动:FTP服务也是接受命令控制的开放式21端口,传输数据时,客户端会指示服务器端打开大于1024的端口,然后让客户端主动连接到服务。

主动:

服务器客户端(客户端)

– 192.168.1.59

21 -(登录)随机端口m

20 -随机端口n

手动:-默认情况下使用手动模式

服务器客户端(客户端)

– 192.168.1.59

21 -随机端口m

随机端口(1024或更高)-随机端口n(请求数据)

活动模式:当建立数据链接时,服务器端主动连接客户端的任意端口大于1024。

被动模式:建立数据链路时,客户端主动连接服务器端的随机端口

主动还是被动?

首先,假设防火墙默认配置,因为客户端用户安装个人防火墙,但不了解防火墙配置。

个人防火墙的默认一般只会拒绝进来的包,而不会拒绝你出去的包和你出去再回来的包。

所以上面的主动模式是有可能被拒绝掉的

一般的使用方法是:使用被动模式,并固定服务端的随机端口范围,在服务端写防火墙来控制

主动ftp对ftp服务器的管理有利,但对客户端的管理不利。因为是服务端主动与客户端去建立连接,可能会被客户端的防火墙把源来自服务器的包给阻塞掉

被动ftp对ftp客户端的管理有利,但对服务端的管理不利。因为客户端主动与服务端去连,可能会被服务端的防火墙给阻塞掉

折衷的方法就是使用被动模式,并指定一个连接过来的端口范围,可以针对这个范围的端口进行一个防火墙的设置。 –(到iptables课程会介绍)

# yum install vsftpd -y –服务端

# yum install ftp lftp -y –客户端

匿名用户

ftp –系统用户,/etc/passwd里有此用户,默认进入ftp用户的家目录

anonymous –系统中无此用户(匿名),默认进入/var/ftp

# vim /etc/vsftpd –主配置文件

man v –查看配置帮助

/etc start

chkconfig vsftpd on

# netstat -ntl |grep :21 –现在是只能看到监听21端口,用于接受用户请求,登录到服务器,进行用户名密码验证

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN

# lsof -i:21

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

vsftpd 3321 root 3u IPv4 21400 0t0 TCP *:ftp (LISTEN)

vsftpd默认的工作模式是被动模式

验证主动模式:

# ftp 192.168.1.59 –自己做客户端,连接自己的服务端

Connected to 192.168.1.59.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.1.59:root): ftp –匿名用户ftp

331 Please specify the password.

Password: –它的密码任意或者为空

230 Login successful.

ftp> ? –使用?号可以查看能使用哪些命令

ftp> help passive –help+命令可以查看命令的帮助

passive toggle passive transfer mode

ftp> passive –使用passive命令关闭被动模式

Passive mode off.

ftp> ls –建立数据链路

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

drwxr-xr-x 2 0 0 4096 May 13 2009 pub

226 Directory send OK.

在服务器打开第二个终端验证

# netstat -nt |grep TIME_ –可以看到是服务端的20端口去连客户端的大于1024的随机端口

tcp 0 0 192.168.1.59:20 192.168.1.59:56227 TIME_WAIT

# netstat -nt |grep TIME_

tcp 0 0 192.168.1.59:20959 10.0.0.20:36261 TIME_WAIT

tcp 0 0 192.168.1.59:10084 10.0.0.20:52731 TIME_WAIT

tcp 0 0 192.168.1.59:11956 192.168.1.59:48358 TIME_WAIT

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

配置文件参数说明:

# cat /etc/vsftpd |grep -v ^# |grep -v ^$

— ^#代表以#开头的行,也就是注释; ^$代表空行

anonymous_enable=YES –允许匿名用户登录

local_enable=YES –允许本地用户登录

write_enable=YES –允许本地用户登录后可写

local_umask=022 –建立文件或者目录的权限掩码

dirmessage_enable=YES –启用目录的说明或者欢迎信息

xferlog_enable=YES –打开日志功能 (只记录文件的上传和下载信息)

connect_from_port_20=YES –默认支持主动模式(两个模式都是开启的,直接使用的话是使用的被动模式)

xferlog_std_format=YES –日志使用xferlog而不是v,改为NO的话,则相反

listen=YES –默认运行在stand alone下

pam_service_name=vsftpd –支持pam(可植入模块)

userlist_enable=YES –打开用户列表的功能

tcp_wrappers=YES –支持tcp_wrappers

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

配置实例:

例一:不允许匿名用户登录

anonymous_enable=NO –改为no

匿名用户有两个:ftp 密码为任意值或空

anonymous 密码为任意值或空

/etc reload

使用匿名用户登录测试,发现登录不了

例二:匿名用户的下载

anonymous_enable=YES –改回yes

默认使用匿名用户登录的服务端的/var/ftp目录下,因为/etc/passwd里的ftp用户的家目录就是/var/ftp,所以其实就是登录到它的家目录

匿名用户默认是可以登录,也可以下载,因为/var/ftp是755权限

能读表示能下载,能写表示能上传

chmod 750 /var/ftp后使用匿名用户登录,ls都看不到文件列表,也下载不了

chmod 754 /var/ftp后使用匿名用户登录,ls都看不到文件列表,也下载不了,因为不能cd到/var/ftp

chmod 751 /var/ftp后使用匿名用户登录,ls都看不到文件列表,但是可以下载;因为它能cd到/var/ftp,ls虽然看不到,但get 文件名,是可以下载下来的

还要注意文件的权限对其是否能被下载也有关系,要登录用户对其有r权限,才可以下载

–任何服务的权限控制是要经过两道门的,一个是服务本身的权限控制,一个是操作系统的权限控制,也就是说两个都允许,才有权限;如果有防火墙的话,则还要考虑防火墙的控制

总结:匿名用户对登录的目录有rx权限,对目录里的文件有r权限就可以下载

例三:匿名用户的上传

默认是不允许匿名用户上传的

ftp> put 1

local: 1 remote: 1

227 Entering Passive Mode (10,1,1,45,135,67)

550 Permission denied. –权限拒绝,因为/var/ftp不允许ftp用户写

chmod 777 /var/ftp

Name (192.168.1.59:root): ftp

331 Please specify the password.

Password:

500 OOPS: vsftpd: refusing to run with writable anonymous root

Login failed. –/var/ftp被改为777后,发现登录不了,所以还得改回去755

因为ftp服务本身不允许系统权限给匿名写,所以解决方法是在登录目录,再去创建一个用于上传的目录,给一个写权限

chmod 755 /var/ftp –这个目录不让上传

chmod 777 /var/ftp/pub –把pub改为可写,用于上传

ftp> cd pub

250 Directory successfully changed.

ftp> put 1

local: 1 remote: 1

227 Entering Passive Mode (10,1,1,45,232,229)

550 Permission denied. –但还是权限拒绝

–因为系统权限允许了,但是服务本身的权限还是不允许,所以要去改服务的配置参数

anonymous_enable=YES

anon_upload_enable=YES –允许匿名用户上传文件

anon_mkdir_write_enable=YES –允许匿名用户创建目录

–总结:匿名用户只能对登录目录内的子目录里面进行上传,并且对这个子目录要有w权限,

–还要有anon_upload_enable=YES和anon_mkdir_write_enable=YES的支持就可以上传了

练习: 使客户端匿名用户登录后可以删除文件和重命名文件,并且可以上传一个同名文件把以前的覆盖(相当是修改) (man v)

anon_other_write_enable=yes –加上此参数,再重启服务;

ftp > delete xxx –删除文件

ftp > rename mbr.bak mbr –重命名文件

ftp > rmdir aaa –删除目录

ftp > mkdir aaa –创建目录

–在rhel6下测试的,加上这个参数后,家目录里的文件不能删,但子目录里的可以

–实际环境:不建议使用此参数,太不安全了,包括上面允许匿名写也是不安全的

例四: 允许匿名下载刚上传的文件

为什么默认不允许下载自己上传的文件?

文件上传之后权限自动改为600,

而默认情况下anon_world_readable_only=YES,规定了匿名用户只能下载world readable的文件(也就是others里有r位的)

对于600权限文件是没有权限下载

-rw——- 1 14 50 845 Jul 19 06:12 fstab 不可以

-rw-r–r– 1 0 0 1666 Jul 19 06:13 inittab 可以

方法一:让匿名帐号上传的文件权限自动更改为644的权限

man v

anon_umask=022

如果文件的权限是444 ,umask怎么设定?

anon_umask=0222

方法二:允许匿名帐号下载不是所有人都可以读的文件

anon_world_readable_only=NO <—默认是yes,只允许下载所有人都可以读的文件

——————————————-

例五:关于普通用户(系统的普通用户)的登录

普通用户默认是允许登录ftp的,并且是登录到自己的家目录,登录密码也就是普通用户登录系统的密码

禁止普通用户登录

方法一: local_enable=NO –建议使用服务的参数去禁止,但是这里会把所有的普通用户给禁止掉,要实现特定的用户的控制

方法二:/etc/passwd 里把普通用户最后一列,改为/bin/false

/bin/bash –可以登录系统,也可以登录ftp,也可以收邮件

/sbin/nologin –不可以登录系统,但可以登录ftp,也可以收邮件

/bin/false –又不可以登录系统,又不可以登录ftp,也可以收邮件

例六:使用用户列表来控制 –建议使用这种方式

userlist_enable=yes –打开用户列表功能

userlist_deny=YES –这一句可加可不加,默认就是有这一句的

vim /etc/vsftpd/user_list –加上要禁止的用户,一个用户写一行

黑名单

————–

userlist_enable=yes

userlist_deny=no

vim /etc/vsftpd/user_list –加上允许的用户,一个用户写一行

白名单

–上面的主要要注意的是:

userlist_enable 指定的是用户列表功能是否有效

userlit_deny 指定的是用户列表是允许还是拒绝

–pam默认也把root和一些系统用户(uid小于500的)给禁用了。

vim /etc/vsftpd/ftpusers

–如果把/etc文件中第二行的sense=deny改为allow,则表示/etc/vsftpd/ftpusers文件里的用户pam是允许登录的

–如果允许root用户登录ftp,则要/etc/vsftpd/user_list和/etc/vsftpd/ftpusers都不要禁用root登录ftp就可以了。但为了安全,不会这样去开放root用户的

例七:关于普通用户的下载和上传

默认是允许下载和上传的

允许上传除了系统目录有写权限外,还有与服务的参数write_enable=YES有关

–有没有可以userlist这样的控制部分用户可以上传,另外的用户不能下载的参数呢?

一般来说,ftp不适合做多个用户都登录到同一个目录里,然后对不同的用户做权限控制

而samba这种文件服务器就适合做

ftp1 —> /home/ftp1 –> cd / —>系统的根目录

ftp2 —> /home/ftp2 –> cd / —>系统的根目录

ftp3 —> /home/ftp3 –> cd / —>系统的根目录

ftp1 ftp2 ftp3 ….. —> /ftpdata

例八:关于chroot(cage笼环境,jail监牢) –为了增强安全性,把用户活动范围锁定到登录的目录里

chroot是一个安全机制,同时它也是有一个命令叫chroot

# chroot /mnt/

chroot: failed to run command `/bin/bash': No such file or directory

–这样直接chroot一个目录是不行的,只能去chroot一个有bash环境的目录(比如说双系统环境里另一个系统的根,或者是排错时错误系统的根)

默认情况下,普通用户(匿名用户除外)可以登录ftp后,cd切换到/下的任何地方,只要有r权限,就可以get文件,那么显示是不安全的

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

vim /etc/vsftpd/chroot_list –手动创建这个文件,默认不存在,并写上要加入笼环境的用户名,一行写一个

/etc reload

测试发现,有笼环境的用户ftp登录后,cd .. 还是在它的登录目录,出不去了

练习:如何把所有的普通用户(匿名用户默认就是笼环境)加入到jail环境

chroot_local_user=YES

例九:登录时显示目录信息

1,针对各个目录的消息显示:

dirmessage_enable=YES

vim /home/a/.message –写上关于登录此目录,或者CD到此目录的说明信息或者欢迎信息

不管什么用户,只要是能够登录或者cd到这个目录,就会显示消息

2,针对全局的消息显示

方法一:

ftpd_banner=Welcome to my ftp server !!

# ftp 192.168.1.59

Connected to 192.168.1.59.

220 Welcome to my ftp server ,this is for students –在这里就会显示信息

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.1.59:root):

方法二:

把消息直接写到一个文件里

banner_file=/etc/vsftpd/banner –手动写一个文件,并写上消息

# ftp 192.168.1.59

Connected to 192.168.1.59.

220-@@@@@@@@@@@@@@@@@@

220-@ @

220-@ @_@ @

220-@ @

220-@@@@@@@@@@@@@@@@@

220

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.1.59:root):

总结:

关于这些消息提示的功能(大多数软件都有)

系统登录提示消息:

/etc/motd

sshd在登录时,输入密码前提示消息:

vim /etc/ssh/sshd_config

banner /etc/ssh_banner

vim /etc/ssh_banner

this is 59 server ,don't try to login my system !!!!!

/etc restart

例十: ftp的日志

43 xferlog_enable=YES –打开日志记录功能

60 xferlog_std_format=YES –使用xferlog,而不是v

56 xferlog_file=/var/log/xferlog –打开注释,指定日志文件路径

/etc reload

cat /var/log/xferlog –只记录上传和下载的日志

Tue May 3 06:24:57 2011 1 10.0.0.185 660 /etc/fstab b _ o r a ftp 0 * c

Tue May 3 06:30:21 2011 1 10.0.0.185 0 /root b _ o r a ftp 0 * i

Tue May 3 06:36:09 2011 1 10.0.0.132 2322 /etc/passwd b _ o r a ftp 0 * c

Tue May 3 06:36:12 2011 1 10.0.0.132 660 /etc/fstab b _ o r a ftp 0 * c

Tue May 3 06:36:24 2011 1 10.0.0.132 0 /etc/fstab b _ i r a ftp 0 * i

Tue May 3 06:40:58 2011 1 10.0.0.86 0 /etc/passwd b _ i r a ftp 0 * i

以下面这条为例:

Tue May 3 06:40:58 2011 1 10.0.0.86 0 /etc/passwd b _ i r a ftp 0 * i

Tue May 3 06:40:58 2011 current-time访问时间

1 transfer-time传输时间,花费了多久

10.0.0.86 remote-host 远程操作的主机名或IP地址

0 byte-count 传输大小

/etc/passwd filename 操作的文件

b transfer-type a表示ascii传输 b表示binary传输

_ special-action-flag

_ no action was taken

C the file was compressed (not in use)

U the file was uncompressed (not is use)

T the file was tar'ed (not is use)

i direction 方向

i the incoming transfer

o the outgoing transfer

r access-mode 访问模式

a (anonymous) the anonymous guest user

g (guest) the real but chrooted user

r (real) the real user

a username 用户名

ftp service-name 服务名

0 authentication-method 验证类型

0 none

1 RFC931 authentication (not in use)

* authenticated-user-id

* symbol is used if an authenticated user id is not available

i completion-status

c a complete transfer

i an incomplete transfer

例十一:

使用vsftpd自己带的日志

vim /etc/vsftpd

dual_log_enable=YES –v和xferlog都会产生

xferlog_std_format=NO –此参数为NO,表示只有v产生

# /etc reload

# ls /var/log/v –重装载服务后,就会产生这个日志文件,原来默认没有的

# cat /etc –logrotate

–这个日志里清楚的记录了登录的成功和失败,上传下载的成功和失败等各种信息

–这两种日志的时间是比北京晚8个小时,也就是说北京时间为下午2点,它记录的是早上6点

–注意:在rhel6下,这个时间是正常的时间,不是格林威治时间了

例十二:

1,关于下载限速

anon_max_rate –匿名用户下载传输率

local_max_rate –本地用户下载传输率

local_max_rate=10000 下载传输率为10k

/etc reload

然后使用一个普通用户登录,去下载一个较大点的文件做测试

关于限制链接数的

max_clients –ftp服务允许的总的连接数

max_per_ip –单个客户端的最大连接数

max_per_ip=2 –指定单个客户端的最大连接数为2

/etc reload

测试,使用一个客户端去连接ftp服务器,第三次连接就会报下面的错误

# ftp 192.168.1.59

Connected to 192.168.1.59.

421 There are too many connections from your internet address.

在测试限速下载时,如果要重复输入一个命令去查看状态的话,可以在前面加watch(默认是每2秒查看一次,但不支持ll这种别名,换成ls -l就可以)

# watch ls -lh

例十三:vsftpd托管super daemon(xinetd)

# netstat -ntlup |grep :21

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3460/vsftpd

# vim /etc

service ftp

{

socket_type = stream

protocol = tcp

wait = no

user = root

server = /usr/sbin/vsftpd

disable = no

}

/etc stop

/etc restart

# netstat -ntlup |grep 21

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3486/xinetd –由xinetd托管

# ftp 192.168.1.59 –但是登录失败

Connected to 192.168.1.59.

421 Service not available, remote server has closed connection

ftp>

# vim /etc/vsftpd

listen=NO –要改为no

# /etc restart

ftp 192.168.1.59 –再次访问OK

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

tcpwrapper

# rpm -qi

Summary : A security tool which acts as a wrapper for TCP daemons.

Description :

The tcp_wrappers package provides small daemon programs which can

monitor and filter incoming requests for systat, finger, FTP, telnet,

rlogin, rsh, exec, tftp, talk and other network services.

Install the tcp_wrappers program if you need a security tool for

filtering incoming network services requests.

This version also supports IPv6.

/etc

/etc

man 或 man

看程序是否支持tcpwrapper方式

比如说看sshd

# which sshd

/usr/sbin/sshd

# ldd /usr/sbin/sshd |grep wrap

libwrap. => /lib/libwrap. (0x00d39000) –有此模块就表示支持

# rpm -qf /lib/libwrap.

–不是所有的服务都支持,很多软件编译时会有./configure –enable-libwrap来支持tcpwrapper

由两个文件来控制访问权限

/etc

/etc

访问控制机制为先去匹配/etc,再去匹配/etc,如果都没有,则都允许

vim /etc

sshd: all –拒绝所有

sshd: all EXCEPT 192.168.1.59 –只允许104ssh上来,EXCEPT是例外

sshd: all EXCEPT 192.168.1.59 192.168.1.19

sshd: 192.168.1.0 EXCEPT 192.168.1.59 –拒绝192.168.1.0网段的人ssh访问,除了104外;注意子网掩码不支持/24写法

sshd:all:spawn echo "`date`" %c %d >> /var/log

–拒绝所有人登录,并把拒绝的时间和IP等信息保存到日志文件

sshd:all:spawn wall %c "login denied"

–拒绝所有人登录,只要一登录被拒绝,就发送广播信息

sshd:all EXCEPT 192.168.1.59: spawn wall %c "login denied"

–man 查看帮助

例十四:ftp支持tcp_wrapper

# ldd /usr/sbin/vsftpd |grep wrap

libwrap. => /lib64/libwrap. (0x00007fe2acf7c000)

# vim /etc –参考前面讲的sshd的写法,只要把sshd换成vsftpd就可以,其它写法一样

vsftpd:all

vsftpd: all EXCEPT 192.168.1.19

例十五:

被动连接模式,控制服务器数据传输端口的范围

vim /etc/vsftpd

在最后加上

pasv_enable=YES –这一句默认不加也可以

pasv_min_port=3000

pasv_max_port=3005 –最小端口范围和最大端口范围可以自定义

–然后使用ftp 登录后,输入ls使之有数据传输,netstat -nt去验证查看会发现端口一定会在3000到3005范围内

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

搭建ftp服务器,允许本地用户登录,但只允许a,b,c三个用户登录,所有的普通用户都默认登录到/ftp目录下;也允许匿名用户登录,登录到/var/ftp;

匿名用户可以下载,不能上传

a,b,c用户都只能上传和下载自己的文件;不同用户之间不能互相删除文件

只使用vsftp形式(/var/log/v)的日志记录,并且实现日志轮转(每月轮转一次,最多保留两个副本)

只使用主动模式的ftp连接方式

三个用户只能在/ftp目录下活动

允许匿名用户和普通用户下载的最大传输率都为100kb/s

允许ftp服务器最大的总连接为300

一个客户端最大只能有3个连接

只能在上午9:30到晚上的8:30访问ftp

允许192.168.1.0/24网段登录,但拒绝10.0.0.10登录,并将拒绝的信息保存到/var/log

在/var/ftp下保存光盘文件,用另一个机器配置yum,要求可以通过ftp方式的yum安装软件(也就是做一个远程的FTP式的yum源)

用另一台机每天晚上6点使用lftp下载ftp服务器的/ftp里的所有内容到自己的/backup目录下(–提示,只能用a,b,c三个普通用户登录到ftp服务器的/ftp目录,但lftp的a,b,c用户的密码如何写?man lftp)

mkdir /ftp

chmod 757 /ftp

chmod o+t /ftp

anonymous_enable=YES

userlist_enable=yes

userlist_deny=no

local_root=/ftp

local_umask=0066

xferlog_enable=YES

xferlog_std_format=NO

pasv_enable=NO –这个参数这样做是对的,但是只使用主动模式的数据连接方式会造成yum用不了(因为yum客户端默认使用被动)

chroot_local_user=YES

anon_max_rate=100000

local_max_rate=100000

max_clients=300

max_per_ip=3

listen=NO

# vim /etc/vsftpd/user_list –原来的基础上加下下面三个

a

b

c

ftp

anonymous –这个要加,否则会造成匿名用户用lftp登录不了,也会造成yum用不了

# vim /etc

/var/log/v {

# ftpd doesn't handle SIGHUP properly

nocompress

missingok

monthly –加上这一句

rotate 2 –加上这一句

}

# vim /etc

service ftp

{

disable = no

socket_type = stream

protocol = tcp

wait = no

user = root

server = /usr/sbin/vsftpd

access_times = 9:30-20:30

}

vim /etc

vsftpd: 10.1.1.0 EXCEPT 10.1.1.10 :spawn echo "`date`" %c >> /var/log

相关推荐