您的位置:首页 > 运维架构 > Linux

Linux下搭建ftp服务

2012-10-30 14:31 549 查看
         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:off	1:off	2:on	3:on	4:on	5:on	6:off
[root@localhost tmp]#

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

[root@localhost tmp]# chkconfig iptables off
[root@localhost tmp]# chkconfig iptables --list
iptables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off
[root@localhost tmp]#


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

[root@localhost tmp]# chkconfig iptables on
[root@localhost tmp]# chkconfig iptables --list
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6: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:off	1:off	2:on	3:on	4:on	5:on	6: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服务已经搭建好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: