Linux下搭建ftp服务一般都用vsftpd(very secure ftp daemon),因为ftp协议是采用明码传输的,没有安全性可言,vsftpd则是一个提供较安全的ftp服务软件,下面简单介绍一下vsftpd的搭建,测试环境为centos 6.3。

1、检查是否已安装软件

[root@localhost ~]# rpm -qa | grep vsftpd
[root@localhost ~]#

什么都不显示则表示系统还没有安装该软件,否则会显示安装软件的版本信息。

2、安装vsftpd

没有rpm安装包的话可以到系统安装盘中的package文件夹下去找,也可以通过yum安装,下面用rpm安装方式。
[root@localhost tmp]# rpm -ivh vsftpd-2.2.2-11.el6.i686.rpm 
Preparing... ########################################### [100%]
1:vsftpd ########################################### [100%]
[root@localhost tmp]#

vsftpd安装成功。

3、查看防护墙

[root@localhost tmp]# chkconfig iptables --list
iptables 0:off1:off2:on3:on4:on5:on6:off
[root@localhost tmp]#

从上面输出可以看到防火墙开着,如果想关闭防火墙可以执行下面的命令:

[root@localhost tmp]# chkconfig iptables off
[root@localhost tmp]# chkconfig iptables --list
iptables 0:off1:off2:off3:off4:off5:off6:off
[root@localhost tmp]#

可以看到防火墙都关了,想重启防火墙则可以执行下面的命令。

[root@localhost tmp]# chkconfig iptables on
[root@localhost tmp]# chkconfig iptables --list
iptables 0:off1:off2:on3:on4:on5:on6:off

如果不想关闭防火墙的话,那么就需要添加端口号,执行下面命令:

[root@localhost tmp]# /sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT
[root@localhost tmp]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

[root@localhost tmp]#

从上面的status中可以看到21端口已经开启,21端口是ftp的默认端口号,保存对防火墙的设置执行下面的命令:

[root@localhost tmp]# /etc/init.d/iptables save  
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@localhost tmp]#

如果仅仅是在防火墙中添加端口是不行的,因为服务端的数据通道到了防火墙之后就找不到原始的客户端了,所以还是连接不上的。要解决这个问题就需要在防火墙中添加ip_nat_ftp和ip_conntrack_ftp两个模块,如下所示:

[root@localhost ~]# vi /etc/sysconfig/iptables-config 

# Load additional iptables modules (nat helpers)
# Default: -none-
# Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which
# are loaded after the firewall rules are applied. Options for the helpers are
# stored in /etc/modprobe.conf.
#IPTABLES_MODULES=""
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

进入iptables-config配置文件中修改IPTABLES_MODULES参数,两个模块名称以空格隔开,保存退出后重启服务就可以了。

4、查看selinux

[root@localhost tmp]# sestatus
SELinux status: enabled <==是否启动 SELinux
SELinuxfs mount: /selinux
Current mode: enforcing <==目前的模式
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
[root@localhost tmp]#

4.1、关闭selinux

[root@localhost ~]# vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

默认模式为enforcing的将其改为disabled就可以了。(如果不关闭selinux的话,本人在配置过程中发现客户端连接不上)

以上面方式修改selinux后不要忘记重启。

4.2、开启selinux

如果不想关闭selinux的话,可以在selinux中修改ftp的参数设置:

[root@localhost ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
[root@localhost ~]#

以上是selinux中默认的ftp参数设置,如果想连接ftp需修改allow_ftpd_full_access和ftp_home_dir两个参数值。

[root@localhost ~]# setsebool -P allow_ftpd_full_access=1
[root@localhost ~]# setsebool -P ftp_home_dir=1
[root@localhost ~]# service vsftpd restart

执行以上命令后就可以在selinux处于enforcing模式下连接ftp了。

5、vsftpd配置文件

vsftpd安装好之后配置文件都放在/etc/vsftpd/目录下面

[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ll -a
total 36
drwxr-xr-x. 2 root root 4096 Oct 29 16:03 .
drwxr-xr-x. 117 root root 12288 Oct 29 16:03 ..
-rw-------. 1 root root 125 Jun 22 15:54 ftpusers
-rw-------. 1 root root 361 Jun 22 15:54 user_list
-rw-------. 1 root root 4599 Jun 22 15:54 vsftpd.conf <<==主配置文件
-rwxr--r--. 1 root root 338 Jun 22 15:54 vsftpd_conf_migrate.sh
[root@localhost vsftpd]#

5.1、ftpusers文件

用于限制实体账户无法登录ftp

[root@localhost vsftpd]# cat ftpusers 
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@localhost vsftpd]#

如上所示代表我系统中的这些用户无法登录ftp,如果不想让某个实体用户不能登录ftp,只需将用户名写入这个文件就可以了。

5.3、user_list文件

该文件的作用跟ftpusers文件的作用是一样的,都是限定用户登录ftp的,区别在于user_list中的配置是否起作用还要跟vsftpd.conf文件中的userlist_enable和userlist_deny两个参数有关系。

5.4、chroot_list文件

该文件默认是没有创建的,主要用于将某些账号的目录限制在家目录下,这样就提高了安全性,这个文件要起作用的话还依赖于vsftpd.conf文件中的chroot_enable和chroot_list_file两个参数。

5.5、vsftpd.conf主配置文件

[root@localhost vsftpd]# cat vsftpd.conf | 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
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost vsftpd]#

以上参数配置都是安装好之后的默认参数值,下面简单介绍一下一些常用的参数。

connect_from_port_20=YES <<==主动连接时,服务端数据传输的端口号

listen_port=21 <<==ftp命令通道的端口号(默认就是21),端口适用于standalone启动模式

dirmessage_enable=YES<<==当用户进入某个目录后,显示需要注意的内容,跟message_file参数有关

message_file=./message<<==当dirmessage_enable=YES显示指定文件中的信息

listen=YES<<==表示vsftpd是以stand alone方式启动的

pasv_enable=YES<<==支持被动式联机模式

use_localtime=YES <<==使用本地时间

write_enable=YES<<==允许用户上传数据

connect_timeout=60<<==主动模式下,60秒内得不到客户端响应则强制断线

accept_timeout=60<<==被动模式下,60秒内得不到客户端响应则强制断线

data_connection_timeout=180 <<==如果客户在180秒内无法完成数据的传输,则强制断线

idle_session_timeout=180 <<==180秒内无任何操作则强制断线

max_clients=10<<=限制同一时间最多可以有10个客户端连接到vsftpd(适用于stand alone启动)

max_per_id=1 <<==表示每个ip来源只能建立一个连接

ftpd_banner=welcome<<==登录vaftpd后的提示信息

banner_file = /file<<==表明用某个文件中的内容作为提示信息

guest_enable=YES<<==任何实体账户登入后都被认为是guest

guest_username=ftp<<==当guest_enable有效时,guest所拥有的权限跟ftp用户的权限一样

local_enable=YES<<== 表示系统用户能以实体用户的方式登录ftp

local_max_rate=0<<==实体用户的传输速度,单位bytes/second,0为不限制

local_umask=022<<==实体用户上传文件的权限

chroot_local_user=YES <<==限制实体用户是否在自己的家目录下

chroot_list_enable=YES <<==表示只有chroot_list_file参数指定的文件下的用户才会chroot

chroot_list_file=/etc/vsftpd/chroot_list <<==指定只有在chroot_list文件中的用户才用chroot,如果登入的用户名不在chroot_list中,则用户无法登录

userlist_enable=YES<<==控制user_list文件是否有效,但还要看user_deny参数

userlist_deny=YES <<==配合userlist_enable参数来限制某些账号的登入

userlist_file=/etc/vsftpd/user_list <<==指定userlist文件所在

anonymous_enable=YES<<==是否允许匿名登录

xferlog_enable=YES<<==使用者上传下载都会被记录下来

xferlog_std_format=YES<<==支持wuftp登录格式

tcp_wrappers=YES<<==是否支持tcp wrappers

pam_service_name=vsftpd <<==pam模块的名称,表示支持pam模块的管理

6、启动vsftpd服务

vaftpd可以用stand alone和super daemon两种模式启动,一般情况下我们都用stand alone启动。

[root@localhost ~]# chkconfig iptables on
[root@localhost ~]# service iptables start
[root@localhost ~]# chkconfig iptables --list
iptables 0:off1:off2:on3:on4:on5:on6:off

[root@localhost ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): yao
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.
[root@localhost ~]#

如果执行ftp localhost时报命令找不到,则需要安装ftp软件包。

执行到这里就表示ftp服务已经搭建好了。


更多相关文章

  1. 开发板挂载vmware虚拟机linux下nfs服务器共享文件
  2. 一键安装linux (附带各种命令,登录欢迎界面,用户登录模块。)
  3. Linux 删除除了某个文件之外的所有文件
  4. linux设置了 /etc/profile ~/.bashrc等配置文件不重启生效方法【
  5. Inotify: 高效、实时的Linux文件系统事件监控框架
  6. Linux中/proc目录下文件详解之(二)
  7. Linux如何查找大文件
  8. Linux第三章 命令基本格式及文件处理命令
  9. NFS实现开发板和虚拟机之间的文件共享

随机推荐

  1. Material Design 之 Theme
  2. android不死服务的实现方法
  3. EditText失去焦点隐藏软键盘
  4. android弹出输入法时的模式
  5. Android通过HttpURLConnection上传多个文
  6. Android之手机振动的设置
  7. Android源代码下载过程及遇到的问题
  8. android 8.0 通知适配
  9. Error Installing APK
  10. 一个java android 时钟 非常精致!android