天天看点

linux下的ftp

FTP的基本概念

1。FTP是什么?

FTP叫做文件传输协议,它的作用就是上传下载文件

2。FTP的传输模式(站在服务器角色去看)

⑴主动FTP模式:

第一个过程是客户机主动去连接服务器

第二个过程服务器会打开21端口来接受客户端的访问,以后这个链接就会传输命令

第三个当客户机要从服务器上下载东西的时候,会发一条指令给服务器

第四个过程服务器会打开自己的20端口,并把数据主动送到客户机的一个随机端口上

⑵被动FTP模式:

第四个过程服务器会打开一个随机端口,并通过21告诉客户机打开的端口号,并等待客户机的连接

原因:因为现在大多数的用户都使用ADSL来连接网络,ADSL的连接方式中客户机是没有静态IP地址的,如果使用ADSL拨号,公网地址会被绑定到ADSL的外接口上,那如果FTP服务器主动把数据送到客户端的话,那数据只能到达ADSL的外接口,但是无法到局域网中的客户机上。这是为什么现实生活中大部分的FTP都是被动模式的原因。IE浏览器中有默认配置

3。WINDOWS和LINUX下常见的FTP服务器端软件

LINUX下:

wu-ftpd:

优点:

①出现的早,稳定,功能完善

缺点:

①代码零乱,不是很规整

②安全性比较差

proftpd:为了改善wu-ftpd的缺点

①代码规整了很多

②安全性有所提升

③在限制权限角度,功能还是很强的

①工作效率不是非常的高

②搭建一些虚拟的服务器不是特别强大

vsftpd:

①安全性非常高

②传输效率很高

①对权限的限制不是很灵活

②对上传下载的速率限制也不是很灵活

二、vsftpd服务器的安装和配置

1。安装软件包

在第1张光盘中,名字叫做vsftpd

安装rpm  -ivh  vsftpd….rpm

2。目录结构

⑴主目录:/etc/vsftpd

vsftpd.conf就是它的主配置文件

注:为了获取vsftpd.conf中配置语句的含义,可以使用man  vsftpd.conf

主配置文件中的语句含义:

①anonymous_enable=yes

使用匿名账户可以登录FTP服务器

跟它相关的:

local_enable=yes:使实名账户可以登录FTP

guest_enable=yes:使虚拟账户可以登录FTP

②write_enable=yes

使用本地账户可以上传文件到服务器

③local_umask=022

umask:类似于netmask,作用如下:

文件的当前权限+umask值=666

文件夹的当前权限+umask值=777

例如:上面是022,那上传文件的权限就是:

文件权限+022=666              上传的文件权限默认是644

④dirmessage_enable=yes

dir:目录

message:消息

含义:能够显示目录消息,作用是当用户切换目录时,可以显示切换后目录的注意事项

配置方法:在切换后的目录下放一个.message文件,里面写入注意事项内容就可以了

⑤xferlog_enable=YES

启用日志功能

跟它相关:

xferlog_std_format=YES

以标准的日志格式写日志

⑥connect_from_port_20=YES

在主动模式中使用,允许使用20端口进行连接

⑦pam_service_name=vsftpd

FTP登录时的认证模块的名字

认证模块通常位于/etc/pam.d下,好多服务器都使用认证模块进行登录认证

⑧listen=YES

服务器处于监听状态

tcp_wrappers=YES<b> </b>

<b>使用FTP</b><b>支持TCP_wrapper</b><b>功能,可以使用防火墙进行访问控制</b>

<b>3</b><b>。两个对用户登录起到限制作用的文件</b>

<b>⑴/etc/vsftpd.ftpusers</b>

<b>所有添加到这个文件中的用户都不能登录FTP</b><b>服务器</b>

<b>⑵黑白名单</b>

<b>在主配置文件启用userlist_enable=yes</b><b>,启用user  list</b><b>功能</b>

<b>黑名单:</b>

<b>userlist_deny=yes</b><b>(禁止userlist</b><b>中的用户)</b>

<b>userlist_file=/etc/vsftpd.user_list</b><b>(默认的文件名,可以修改)</b>

<b>白名单:</b>

<b>userlist_deny=no</b><b>(允许userlist</b><b>中的用户)</b>

<b></b>

<b>注:如果一个用户同时被添加到/etc/vsftpd.ftpusers</b><b>里和白名单中,那用户也是不能登录FTP</b><b>服务器的</b>

<b>4</b><b>。启动被登录FTP</b><b>服务器</b>

<b>⑴登录账户:</b>

<b>匿名账户:anonymous</b><b>和ftp</b><b>两个</b>

<b>实体账户:大家在服务器中自己建立</b>

<b>⑵登录FTP</b><b>服务器</b>

<b>ftp  </b><b>服务器的IP</b><b>地址</b>

<b>⑶登录后的主目录</b>

<b>匿名账户:/var/ftp</b><b>下,通过 anon_root=</b><b>目录名 </b><b>来进行修改</b>

<b>实体账户:默认登录到自己的宿主目录下,可以通过 local_root=</b><b>目录名 </b><b>来进行修改</b>

<b>三、解决安全性问题</b>

<b>1</b><b>。禁锢用户在自己的主目录下</b>

<b>⑴禁锢所有的本地用户在登录后的目录下</b>

<b>vi  /etc/vsftpd/vsftpd.conf</b>

<b>添加 chroot_local_user=yes </b><b>就OK</b><b>了</b>

<b>⑵禁锢指定的本地用户在登录后的目录下</b>

<b>在主配置文件添加或者启用下面两句</b>

<b>chroot_list_enable=yes</b>

<b>chroot_list_file=/etc/vsftpd.chroot_list</b>

<b>把要禁锢的本地用户名添加到上面的文件就可以达到目的</b>

<b>2</b><b>.使用虚拟用户登录FTP</b><b>服务器</b>

<b>⑴建立虚拟用户的文件</b>

<b>vi  /etc/vsftpd/test.txt</b>

<b>内容写法:奇数行是用户名,偶数行是密码</b>

<b>⑵转换成hash</b><b>写法</b>

<b>命令:db_load  -T  -t  hash  -f  /etc/vsftpd/test.txt  /etc/vsftpd/test.db</b>

<b>-T</b><b>:把文件内容转换成跟berkerly</b><b>格式想兼容的写法</b>

<b>-t</b><b>:把文件内容写成hash</b><b>写法</b>

<b>-f</b><b>:指明转换的源文件是谁</b>

<b>⑶把上面生成的.db</b><b>文件写成一个pam</b><b>模块,供FTP</b><b>去使用</b>

<b>vi  /etc/pam.d/vsftpd.test</b>

<b>auth  required  /lib/security/pam_userdb.so  db=/etc/vsftpd/test</b>

<b>account  required  /lib/security/pam_userdb.so  db=/etc/vsftpd/test</b>

<b>注:虽然我们上面生成的文件叫test.db</b><b>,但是在pam</b><b>文件中指出后面的db</b><b>文件时,不能加.db</b><b>扩展名,因为PAM</b><b>文件会自动追加.db</b><b>的扩展名</b>

<b>⑷生成一个虚拟用户在系统内的运行账户</b>

<b>原因:因为虚拟账户是我们自己写的,系统内根本就没有,那系统也就无法识别虚拟账户,为了让系统正常识别,我们要在系统内建立一个账户身份,当虚拟用户登录FTP</b><b>时,在系统内就使用刚刚建立起的账户身份去运行</b>

<b>命令如下:</b>

<b>mkdir  /ftpsite -------</b><b>在/</b><b>下为账户建立他的主目录</b>

<b>useradd  virtual  -d  /ftpsite  -M</b>

<b>解释:</b><b>用户名为virtual</b><b>;-d</b><b>是指明用户的宿主目录;-M</b><b>是指删除其home</b><b>下的主目录</b>

<b>⑸把上面建立好的PAM</b><b>文件,账户身份都添加主配置文件中</b>

<b>vi   /etc/vsftpd/vsftpd.conf</b>

<b>guest_enable=yes----------</b><b>启用虚拟用户</b>

<b>guest_username=virtual---------</b><b>指明虚拟用户在系统中的真实身份</b>

<b>修改pam_service_name=vsftpd.test---------</b><b>把系统中原来的认证模块改成vsftpd.test</b><b>文件</b>

<b>⑹重启服务器,登录进行验证</b>

<b>3</b><b>.给虚拟用户限制权限</b>

<b>⑴建立一个存放虚拟用户权限限制文件的目录</b>

<b>mkdir  /etc/vsftpd/test_dir</b>

<b>⑵把建立好的上面的目录写入到主配置文件,让FTP</b><b>也能识别</b>

<b>user_config_dir=/etc/vsftpd/test_dir</b>

<b>⑶写不同虚拟用户的权限限制文件</b>

<b>vi  /etc/vsftpd/test_dir/aa</b>

<b>vi  /etc/vsftpd/test_dir/bb</b>

<b>写入内容:</b>

<b>anon_upload_enable=yes         --------</b><b>控制虚拟用户可以上传文件</b>

<b>anon_world_readable_only=NO      --------</b><b>控制用户能否下载文件</b>

<b>注意:注意内容的含义,如果是 </b><b>只读=NO</b><b>,就是能下载</b>

<b>如果是  </b><b>只读=YES</b><b>,那就不能下载</b>

<b>anon_mkdir_write_enable=YES</b><b> </b><b>    -------</b><b>让用户能够创建目录</b><b></b>

<b>anon_other_write_enable=YES     -------</b><b>让用户能够执行删除,改名的操作</b><b></b>

<b>注:除了上面的语句,其它的前面是</b><b>anon</b><b>的语句都可以用来限制虚拟账户访问</b><b>FTP</b>

<b>比如限制上面下载的速度可以使用</b><b>anon_max_rate=</b>

<b>改变虚拟用户登录的主目录可以使用</b><b>anon_root=</b>

继续阅读