linux怎么搭建ftp服务器,第1张

1、用在线安装

yum install vsftpd pam db4-y

使用命令将vsftp配置为系统服务

chkconfig --level 35 vsftpd on

2、配置vsftpd服务的宿主

useradd vsftpdadmin -s /sbin/nologin -M

这个vsftpdadmin只是用来替换root的,并不需要登录

3、建立ftp虚拟宿主帐户

useradd vsftpuser -s /sbin/nologin -M

这ftpuser只个虚拟帐户的宿主,本身是不用登录的

4、配置vsftpdconf 配置之前要先备份一下原来的

vi /etc/vsftpd/vsftpdconf

anonymous_enable=YES --> anonymous_enable=NO //不允许匿名用户访问,默认是允许。

chroot_list_enable=YES --> chroot_list_enable=YES //不允许FTP用户离开自己主目录

增加

#设定虚拟用户个人Vsftp的配置文件存放路径。也就是说,这个被指定的目录里,将存放每个Vsftp虚拟用户个性的配置文件,一个需要注意的地方就是这些配置文件名必须和虚拟用户名相同。

user_config_dir=/etc/vsftpd/vconf/userlocal

#这一步非常重要,要记住这一步。一会要根据这个配置新建文件夹

#修改端口号

ftp_data_port=4040

reverse_lookup_enable=NO

pasv_enable=yes

pasv_min_port=48790

pasv_max_port=48800

listen_port=48796 #端口可以根据你自己实际情况配置,也可以用默认端口。但是为了安全考虑根据自己实际情况配置

5、建立虚拟用户文件

mkdir /etc/vsftpd/vconf

touch /etc/vsftpd/vonf/vir_user

6、建立虚拟用户

vi /etc/vsftpd/vonf/vir_user

virtualuser //用户名

12345678 //密码

7、生成数据库

db_load -T -t hash -f /etc/vsftpd/vconf/vir_user /etc/vsftpd/vconf/vir_userdb

8、设置数据库文件访问权限

chmod 600 /etc/vsftpd/vconf/vir_user

chmod 600 /etc/vsftpd/vconf/vir_userdb

9、修改/etc/pamd/vsftpd

auth sufficient pam_userdbso db=/etc/vsftpd/vconf/vir_user

account sufficient pam_userdbso db=/etc/vsftpd/vconf/vir_user

(要想同时使用系统用户和虚拟用户,就需要把required改成sufficient)

10

根据第四步配置的user_config_dir=/etc/vsftpd/vconf/userlocal

新建userlocal文件夹

mkdir /etc/vsftpd/vconf/userlocal

11、根据第六步建立的用户名建立一个文件

例如第六步建立的帐号是virtualuser,则新建一个virtualuser文件

touch /etc/vsftpd/conf/userlocal/virtualuser

12、编辑该用户访问的文件路径

vi /etc/vsftpd/conf/userlocal/virtualuser

输入如下

local_root= //需要指定的网站根目录,例如wwwbaiducom所在文件夹为/www/baidu

anonymous_enable=NO #禁止匿名用户访问

write_enable=YES #开启写权限

local_umask=022 #上传后文件的权限掩码

anon_upload_enable=NO #关闭匿名下载

anon_mkdir_write_enable=NO #关闭匿名创建文件夹

idle_session_timeout=60 #会话自动关闭时间 60是因分钟

data_connection_timeout=120 #数据延迟时间

max_clients=10 #最大连接数

max_per_ip=5 #同一个ip同时允许5个IP联机

local_max_rate=1048576 #实体用户传输速度限制,单位B/s。0代表不限制

13、配置就此完成,重启vsftpd服务:service vsftpd restart。

查看系统端口状态:netstas -tulnp。如果能看到48796端口正在被vsftpd调用说明启动成功。

一 FTP 说明

linux 系统下常用的FTP 是vsftp, 即Very Security File Transfer Protocol 还有一个是proftp(Profession ftp)。 我们这里也是简单的说明下vsftp的配置。

vsftp提供3种远程的登录方式:

(1)匿名登录方式

就是不需要用户名,密码。就能登录到服务器电脑里面

(2)本地用户方式

需要帐户名和密码才能登录。而且,这个帐户名和密码,都是在你linux系统里面,已经有的用户。

(3)虚拟用户方式

同样需要用户名和密码才能登录。但是和上面的区别就是,这个用户名和密码,在你linux系统中是没有的(没有该用户帐号)

二 Vsftp的安装配置

21 安装

vsftp 的安装包,可以在安装里找到。 用yum 安装过程也很简单。

安装命令:yum install vsftpd

22 相关命令

221 启动与关闭

[root@singledb ~]# service vsftpd start

Starting vsftpd for vsftpd: [ OK ]

[root@singledb ~]# service vsftpd stop

Shutting down vsftpd: [ OK ]

[root@singledb ~]# service vsftpd restart

Shutting down vsftpd: [FAILED]

Starting vsftpd for vsftpd: [ OK ]

[root@singledb ~]# /etc/initd/vsftpd start

Starting vsftpd for vsftpd: [FAILED]

[root@singledb ~]# /etc/initd/vsftpd stop

Shutting down vsftpd: [ OK ]

[root@singledb ~]# /etc/initd/vsftpd restart

Shutting down vsftpd: [FAILED]

Starting vsftpd for vsftpd: [ OK ]

[root@singledb ~]# /etc/initd/vsftpd status

vsftpd (pid 3931) is running

[root@singledb ~]#

222 其他命令

--查看vsftpd 启动状态

[root@singledb ~]# chkconfig --list vsftpd

vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

[root@singledb ~]# chkconfig vsftpd on

[root@singledb ~]# chkconfig --list vsftpd

vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

这里看到,默认情况下从2到5设置为on了。2到5是多用户级别。 这个对应的是linux不同的运行级别。

我们也可以加level 选项来指定:

[root@singledb ~]# chkconfig --level 0 vsftpd on

[root@singledb ~]# chkconfig --list vsftpd

vsftpd 0:on 1:off 2:on 3:on 4:on 5:on 6:off

我们看到0已经设置为on了。

我们可以使用man chkconfig 来查看帮助:

--level levels

Specifies the run levels an operation should pertain to It is given as a string of numbers from 0 to 7 For example, --level 35 specifies runlevels 3 and 5

传统的init 定义了7个运行级(run level),每一个级别都代表系统应该补充运行的某些特定服务:

(1)0级是完全关闭系统的级别

(2)1级或者S级代表单用户模式

(3)2-5 级 是多用户级别

(4)6级 是 重新引导的级别

(1)查看防火墙

我一般都是把系统的防火墙关闭了。 因为开了会有很多限制。

[root@singledb ~]# /etc/initd/iptables status

Table: nat

Chain PREROUTING (policy ACCEPT)

num target prot opt source destination

Chain POSTROUTING (policy ACCEPT)

num target prot opt source destination

1 MASQUERADE all -- 1921681220/24 !1921681220/24

Chain OUTPUT (policy ACCEPT)

num target prot opt source destination

Table: filter

Chain INPUT (policy ACCEPT)

num target prot opt source destination

1 ACCEPT udp -- 0000/0 0000/0 udp dpt:53

2 ACCEPT tcp -- 0000/0 0000/0 tcp dpt:53

3 ACCEPT udp -- 0000/0 0000/0 udp dpt:67

4 ACCEPT tcp -- 0000/0 0000/0 tcp dpt:67

Chain FORWARD (policy ACCEPT)

num target prot opt source destination

1 ACCEPT all -- 0000/0 1921681220/24 state RELATED,ESTABLISHED

2 ACCEPT all -- 1921681220/24 0000/0

3 ACCEPT all -- 0000/0 0000/0

4 REJECT all -- 0000/0 0000/0 reject-with icmp-port-unreachable

5 REJECT all -- 0000/0 0000/0 reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)

num target prot opt source destination

You have new mail in /var/spool/mail/root

--添加开放21号端口:

[root@singledb ~]# /sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT

[root@singledb ~]# /etc/initd/iptables status

Table: nat

Chain PREROUTING (policy ACCEPT)

num target prot opt source destination

Chain POSTROUTING (policy ACCEPT)

num target prot opt source destination

1 MASQUERADE all -- 1921681220/24 !1921681220/24

Chain OUTPUT (policy ACCEPT)

num target prot opt source destination

Table: filter

Chain INPUT (policy ACCEPT)

num target prot opt source destination

1 ACCEPT tcp -- 0000/0 0000/0 tcp dpt:21

2 ACCEPT udp -- 0000/0 0000/0 udp dpt:53

3 ACCEPT tcp -- 0000/0 0000/0 tcp dpt:53

4 ACCEPT udp -- 0000/0 0000/0 udp dpt:67

5 ACCEPT tcp -- 0000/0 0000/0 tcp dpt:67

Chain FORWARD (policy ACCEPT)

num target prot opt source destination

1 ACCEPT all -- 0000/0 1921681220/24 state RELATED,ESTABLISHED

2 ACCEPT all -- 1921681220/24 0000/0

3 ACCEPT all -- 0000/0 0000/0

4 REJECT all -- 0000/0 0000/0 reject-with icmp-port-unreachable

5 REJECT all -- 0000/0 0000/0 reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)

num target prot opt source destination

--保存配置

[root@singledb ~]# /etc/rcd/initd/iptables save

Saving firewall rules to /etc/sysconfig/iptables: [ OK ]

--重启防火墙:

[root@singledb ~]# service iptables {start|stop|restart}

(2)查看关闭selinux

[root@singledb ~]# sestatus

SELinux status: disabled

我这里在安装操作系统的时候就关闭了selinux,如果没有关闭,可以修改如下文件来关闭:

[root@singledb ~]# cat /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 - SELinux is fully disabled

SELINUX=disabled

# SELINUXTYPE= type of policy in use Possible values are:

# targeted - Only targeted network daemons are protected

# strict - Full SELinux protection

SELINUXTYPE=targeted

[root@singledb ~]#

保存退出并重启系统reboot

三 FTP配置文件

FTP 安装好之后,在/etc/vsftpd/目录下会有如下文件:

[root@singledb ~]# cd /etc/vsftpd/

[root@singledb vsftpd]# ls

ftpusers user_list vsftpdconf vsftpd_conf_migratesh

[root@singledb vsftpd]#

vsftpdconf: 主配置文件

ftpusers: 指定哪些用户不能访问FTP服务器

user_list: 指定的用户是否可以访问ftp服务器由vsftpdconf文件中的userlist_deny的取值来决定。

[root@singledb vsftpd]# cat user_list

# vsftpd userlist

# If userlist_deny=NO, only allow users in this file

# If userlist_deny=YES (default), never allow users in this file, and

# do not even prompt for a password

# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers

# for users that are denied

我们过滤掉#的注释后,查看一下vsftpdconf 文件:

[root@singledb ftp]# cat /etc/vsftpd/vsftpdconf |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

至于这些参数的意思,在注释里有详细的说明。

我们可以在vsftpdconf 文件设置如下参数:

(1)ftpd_banner=welcome to ftp service :设置连接服务器后的欢迎信息

(2)idle_session_timeout=60 :限制远程的客户机连接后,所建立的控制连接,在多长时间没有做任何的操作就会中断(秒)

(3)data_connection_timeout=120 :设置客户机在进行数据传输时,设置空闲的数据中断时间

(4)accept_timeout=60 设置在多长时间后自动建立连接

(5)connect_timeout=60 设置数据连接的最大激活时间,多长时间断开,为别人所使用;

(6)max_clients=200 指明服务器总的客户并发连接数为200

(7)max_per_ip=3 指明每个客户机的最大连接数为3

(8)local_max_rate=50000(50kbytes/sec) 本地用户最大传输速率限制

(9)anon_max_rate=30000匿名用户的最大传输速率限制

(10)pasv_min_port=端口

(11)pasv-max-prot=端口号 定义最大与最小端口,为0表示任意端口;为客户端连接指明端口;

(12)listen_address=IP地址 设置ftp服务来监听的地址,客户端可以用哪个地址来连接;

(13)listen_port=端口号 设置FTP工作的端口号,默认的为21

(14)chroot_local_user=YES 设置所有的本地用户可以chroot

(15)chroot_local_user=NO 设置指定用户能够chroot

(16)chroot_list_enable=YES

(17)chroot_list_file=/etc/vsftpd/chroot_list(只有/etc/vsftpd/chroot_list中的指定的用户才能执行 )

(18)local_root=path 无论哪个用户都能登录的用户,定义登录帐号的主目录, 若没有指定,则每一个用户则进入到个人用户主目录;

(19)chroot_local_user=yes/no 是否锁定本地系统帐号用户主目录(所有);锁定后,用户只能访问用户的主目录/home/user,不能利用cd命令向上转;只能向下;

(20)chroot_list_enable=yes/no 锁定指定文件中用户的主目录(部分),文件:/chroot_list_file=path 中指定;

(21)userlist_enable=YES/NO 是否加载用户列表文件;

(22)userlist_deny=YES 表示上面所加载的用户是否允许拒绝登录;

(23)userlist_file=/etc/vsftpd/user_list 列表文件

限制IP 访问FTP:

#vi /etc/hostsallow

vsftpd:1921685128:DENY 设置该IP地址不可以访问ftp服务

FTP 访问时间限制:

#cp /usr/share/doc/vsftpd-113/vsftpdxinetd /etc/xinetdd/vsftpd

#vi /etc/xinetdd/vsftpd/

修改 disable = no

access_time = hour:min-hour:min (添加配置访问的时间限制(注:与vsftpdconf中listen=NO相对应)

例: access_time = 8:30-11:30 17:30-21:30 表示只有这两个时间段可以访问ftp

ftp的配置基本上只有这些了。

默认情况下,ftp根目录是/var/ftp。 如果要修改这个目录位置,可以更改/etc/passwd 文件:

[root@singledb ftp]# cat /etc/passwd | grep ftp

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

创建一个用户来访问FTP,并指定该用户的FTP 目录:

[root@singledb u02]# useradd -d /u02/qsftp qs

[root@singledb u02]# passwd qs

Changing password for user qs

New UNIX password:

BAD PASSWORD: it is WAY too short

Retype new UNIX password:

passwd: all authentication tokens updated successfully

这里指定的是/u02/qsftp 这个目录,要注意个目录的权限。

更改用户不能telnet,只能ftp:

usermod -s /sbin/nologin username //用户只能ftp,不能telnet

usermod -s /sbin/bash username //用户恢复正常

禁止用户ssh登陆

useradd username -s /bin/false

更改用户主目录:

usermod -d /bbb username //把用户的主目录定为/bbb

然后用qs这个用户就可以访问了。

以上只是一些简单的设置。 在用户权限这块还有很多内容可以研究。 比如特定用户的特定权限。 安全性等。 以后在研究了。

1、Linux系统下vsftp安装。

2、Linux系统下打开ftp配置文件。

3、Linux系统下编辑配置文件。

4、Linux系统下启动vsftpd服务。

5、Linux系统下关闭防火墙,关闭selinux。

6、Linux系统下建立测试帐号jiang。

7、Linux系统下登录访问。

8、Linux系统下本地用户默认有上传权限,如上传ceshi目录。

Linux下ftp服务可以通过搭建vsftpd服务来实现,以CentOS为例,首先查看系统中是否安装了vsftpd,可以通过执行命令 rpm -qa |grep vsftpd 来查看是否安装相应的包,如果没有安装那么可以执行 yum -y install vsftpd 来安装,安装之后首先创建ftp用户,比如ftp_test,命令如下:

useradd -s /sbin/nologin -d /home/ftp_test ftp_test

目录尽量不要选择根目录下,这里是/home/ftp_test,并且ftp_test这个目录不要手动创建,否则权限会有问题,执行命令的时候会自动创建,

可以看到权限现在是对于ftp_test用户是可读可写可执行的,其他用户和组下面的都没有任何权限,现在为ftp_test用户创建密码:

passwd ftp_test

执行之后输入2次密码确认就设置好了密码

然后编辑vsftpd配置文件,位置是:vim /etc/vsftpd/vsftpdconf

找到anonymous_enable这个配置项,默认是YES,修改成NO,表示不允许匿名用户登录

现在直接保存配置文件,执行 systemctl start vsftpdservice 启动vsftp服务,然后可以通过命令: systemctl status vsftpdservice 查看ftp服务的运行状态,现在就可以用ftp客户端进行连接了,这里用FileZilla测试,连接正常

现在基本的ftp服务就部署完了,客户端可以正常上传,下载,修改文件;但是这样有个问题就是所有的目录都暴露给客户端了,虽然客户端不能随意修改删除其余的文件,但是因为目录可见,所以总会有一些风险,所以接下来还需要配置让ftp用户只在自己的家目录下面活动,而无法查看其它任何目录,同样是打开配置文件/etc/vsftpd/vsftpdconf,找到chroot_local_user=YES这个配置,默认是注释的,这里去掉注释,表示只让用户在自己的目录里面活动,如果只是保存这一个配置的话,用ftp连接客户端会返回500 OOPS: vsftpd: refusing to run with writable root inside chroot()的错误,即禁止运行在可写的家目录中,因为刚才ftp_test这个目录有w权限,而现在我们使用的vsftpd版本是302 属于比较新的版本,为了安全性做了一些限制,如果你此时想通过 chmod a-w /home/ftp_test 来去掉目录的写权限,那么连接成功是没问题的,但是无法上传文件了,所以网上很多说修改权限的方法是不可取的,正确的做法是应该在下面添加一行配置allow_writeable_chroot=YES表示允许对家目录的写权限,具体配置如下:

配置完这两项以后保存退出,然后执行 systemctl restart vsftpdservice 重启vsftpd服务,现在重新使用ftp连接就成功了,并且任何操作也是没问题的

现在可以看到上面的路径是一个/,对于ftp用户来说也就是根目录了,只能在这个目录下操作,而无法跳出这个目录

以上就是vsftpd服务的基本搭建过程,实际使用时可以分配多个用户

1运行以下命令安装 vsftpd。

yum install -y vsftpd

2运行以下命令打开及查看etc/vsftpd

cd /etc/vsftpd

ls

说明:

/etc/vsftpd/vsftpdconf 是核心配置文件。

/etc/vsftpd/ftpusers 是黑名单文件,此文件里的用户不允许访问 FTP 服务器。

/etc/vsftpd/user_list 是白名单文件,是允许访问 FTP 服务器的用户列表。

/etc/vsftpd/vsftpd_conf_migratesh 是vsftpd操作的一些变量和设置

备注:使用命令 rpm -ql vsftpd 可列出vsftpd中包含的文件

3运行以下命令设置开机自启动。

systemctl enable vsftpd

4运行以下命令启动 FTP 服务。

systemctl start vsftpd

5运行以下命令查看 FTP 服务端口。

netstat -antup | grep ftp

6配置本地用户登录

本地用户登录就是指用户使用 Linux 操作系统中的用户账号和密码登录 FTP 服务器。

vsftpd 安装后默只支持匿名 FTP 登录,用户如果试图使用 Linux 操作系统中的账号登录服务器,将会被 vsftpd 拒绝,但可以在 vsftpd 里配置用户账号和密码登录。具体步骤如下:

a运行以下命令创建 ftptest 用户。

useradd ftptest

(删除用户命令:sudo userdel -r newuser)

b运行以下命令修改 ftptest 用户密码。

passwd ftptest

7修改/etc/vsftpd/vsftpdconf

a运行vim /etc/vsftpd/vsftpdconf。

b按键 “i” 进入编辑模式。

c将是否允许匿名登录 FTP 的参数修改为anonymous enable=NO。

d将是否允许本地用户登录 FTP 的参数修改为local_enable=YES。

e按键 “Esc” 退出编辑模式,然后按键“:wq” 保存并退出文件。

f运行命令 cat /etc/vsftpd/vsftpdconf 查看配置文件内容。 命令的使用方法可查询“Linux命令大全”。

Linux下可以配置vsftp服务来实现FTP的部署。

配置支持ipv6地址的服务只要启用listen_ipv6=yes将ipv6的监听设置开启即可。

当然具体配置没有那么简单,比如设置用户权限拉,部署过程中出现错误和排错拉。最好百度一下配置说明。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » linux怎么搭建ftp服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情