如何在linux上配置ftp 及创建 ftp用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在linux上配置ftp 及创建 ftp用户相关的知识,希望对你有一定的参考价值。

在Internet上FTP(File Transfer Protocol,文件传输协议)扮 演着十分重要的角色。我们可以通过FTP与远程机器传输交换文件数 据,下载或上传最新的软件。基本的FTP服务器根据服务的对象可以分为两 种,一种是Unix(当然也包括Linux)系统基本的FTP服务器,使用者是服务器上合法的 用户;而另一种是匿名FTP服务器(Anonmous FTP Service),任何人只要使用anonmous或ftp帐号并提供电子邮件地址作为口令就可以使用FTP服务。

对于系统中合法的用户,其登录目录为他们的home目录;如果是匿名用户登录的话,登录后会到/home/ftp这个目录中,该除非我们在该目 录中存放下载文件,否则匿名FTP使用者将不能做任何事情。在本章,我们将详细地介绍FTP服务器的安装、配置以及服务 器的维护。

安装FTP服务器

在Linux的发行套件中都有FTP服务器的软件包wu-ftpd(Washington University FTP server),这是目前最流行的一种免费FTP服务器软件,目前绝大多数的FTP站点都是由wu-ftpd来架设的,而wu-ftp如此流行的原因是因 为它强大的功能,例如:

·可控制不同网域的机器对 FTP服务器的存取权限和访问时段。

·使用者在下载文件时,可自动对文件进 行压缩或解压缩工作。

·可以记录文件上传或下载的过程。

·可以限制最高访问人数,以维持系统的最佳运行效率。

·可显示相关的信息,以便用户了解当前的接收状态。

·可暂时关闭FTP服务器,以便系统维护。

在安装系统时如果选择了wu-ftpd软件包,就会自动安装。但如果我们想要使用最新的FTP软件包的话,可以到全世界各大FTP站点下载。目 前最新的版本是wu-ftpd-2.5.0,得到了wu-ftpd-2.5.0.tar.gz后,请按照我们下面的步骤进行安装。

1.将wu-ftpd-2.5.0.tar.gz复制到临时目录中并解压缩:

# tar zxvf wu-ftpd-2.5.0.tar.gz

进入解压缩产生的目录wu-ftpd-2.5.0中,在开始安装之前请仔细阅读里面的README、INSTALL等文件,以便了解安装需要注 意的事项。

2.执行命令“bulid lnx”,编译wu-ftpd-2.5.0的源程序。

# ./bulid lnx

这条命令将编译Linux系统使用wu-ftpd所需的服务程序,如果一切正常的话,将产生如下几个可执行文件:

ftpd FTP服务程序

ftpshut 关闭FTP服务的程序

ftpcount 显示FTP 服务器目前连接的人数的程序

ftpwho 查看目前使用者

3.执行安装命令“make install”,将编译生成的可执行文件和man pages安装到系统中。

# make install

4. 修改/etc/inetd.conf文件,加入如下一行:

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l –a

如果系统中以前安装有wu-ftpd的话,这一步可以略去不做,安装安装程序会自动更新/etc/inetd.conf文件有关ftp的记录 项。

5.如果想为FTP用户提供压缩解压缩的功能,我们还需要将tar、gzip、compress、cpio、sh等可执行文件复制到/home /ftp/bin目录下。此外,还需要将ls命令复制到/home/ftp/bin中,以便使用者查看目录。

因为我们复制到/home/ftp/bin目录下的程序有可能是动态链接的,所以它们运行时还需要共享函数库,我们要将他们运行时需要用到的共 享库复制到/home/frp/lib目录中。检查这些命令所需要的共享库可以使用“ldd”命令。例如对于“ls”命令,我们使用“ldd /usr/bin/ls”命令就可以得到如下的输出:

# ldd /usr/bin/ls

libc.so.6 = > /lib/libc.so.6 ( 0x40003000 )

/lib/ld-linux.so.2 = > /lib/ld-linux.so.2 ( 0x00000000 )

这样,我们就需要将/lib/libc.so.6和/lib/ld-linux.so.2复制到/home/ftp/lib目录中。其它命令所 需的共享库您也可以参照上面的方法找出并复制到/home/etc/lib目录中。

接下来复制/etc/passwd和/etc/group文件到/home/ftp/etc,并删除其中任何个人用户和个人用户组的信息。基本 上应该按照下面的例子修改:

#/home/ftp/etc/passwd文件

root:*:0:0:::

bin:*:1:1:::

operator:*:11:0:::

nobody:*:99:99:::

ftp:*:1000:1000:::

# /home/ftp/etc/group文件

root::0:

bin::1:

daemon::2:

sys::3:

adm::4:

ftp::1000:

6.为了确保提供FTP服务不会给我们的系统带来安全隐患,我们还需要采取以 下措施:

# chmod 0555 /home/ftp

# chmod 0111 /home/ftp/bin/*

# chmod 0555 /home/ftp/lib/*

# chmid 0444 /home/ftp/etc/*

配置FTP服务器

在安装好wu-ftpd之后,我们还需要定制FTP服务器,使之实现我们上一节中提到的各种功能。为了使我们的FTP服务器实现这些功能,我们 需要修改ftpusers、ftpaccess、ftpconversions、xferlog、ftpgroups、ftphosts等系统配置文件。 下面我们就来看一看这些文件的功能以及配置它们的方法。

各配置文件的功能

在开始配置FTP服务器的配置文件之前,我们先来简要地介绍一下各个文件的功能。在开包后的wu-ftpd-2.5.0目录中的 doc/examples目录下,我们可以找到以下这些文件的示例。

/etc/ftpaccess 一般情况下,我们最为重视的配置文件应该是“ftpaccess”,因为该文件决定着我们FTP服务器是否能够正常工作。此外,我们还可以在这个系统参数 文件中设置多项有关使用权限记录,以及与信息有关的文件名称及路径。

/etc/ftpusers 决定哪些人不可以执行ftp命令来传输文件,这些帐号通常是root、bin、news以及guest等有特殊用途的帐户。

/etc/ftpconversions 配置该文件可以实现用户在通过FTP传输文件的同时,对文件进行压缩打包等处理。

/etc/ftphosts 决定哪些网络中的主机或某些用户不能访问FTP服务器的文件。

/etc/ftpgroups 该文件不是决定哪些用户组不能够访问FTP服务器,它只有在使用SITE GROUP功能时才有用。

/var/log/xferlog FTP日志文件。该文件将记录使用匿名帐户的用户所上传或下载的过的文件,该文件只是记录FTP信息,我们不需要对它进行配置。

大致了解了各个设置文件的功能以后,我们就来为您介绍这些文件中的内容以及学习如何配置。
配置/etc/ftpaccess文件

我们前面介绍的wu-ftpd的大多数功能都是在ftpaccess文件中设置的。我们无须自己编写该文件,doc/examples /ftpaccess.heavy是一个稍微修改一下就能适用于大多数FTP服务器的例子,所以下面我们将以这个示例文件为例为您介绍ftpaccess 文件的配置。

# wu-ftpd-2.5.0的/etc/ftpaccess示例文件ftpaccess.heavy

#

# 设置用户登录FTP服务器时,允许输错密码的次数。

# loginfails 2表示允许用户输错两次密码,如果两次都输入

# 错误的话,FTP服务器打印“repeated login failures”的信息

# 并退出FTP会话过程。如不设置,则缺省值是5。

#

loginfails 2

#

# class是用来定义用户级别的命令,它的格式为

# class <class> <typelist> <addrglob> [ <addrglob>….]

# FTP服务器上有三种类型的使用者,分别是“real”——表示

# 在该FTP服务器上有合法帐号的用户;“guest”——表示另行

# 定义的某些使用组的使用者;“anonymous”——权限最低的匿名

# 用户。有了这三种使用者以后,在ftpaccess文件中就可以根据不

# 同的使用者设置不同的存取权限。但是,只有三种定义一般是不够

# 的,我们可以根据class的语法定义更多的控制命令。例如:

# class remote real,guest,anonymous *

# 这条class语句定义了remote中有三种不同的使用者,“*”表示网络

# 上所有的计算机,也就是说任何人都可以访问FTP服务器,一般的匿名

# FTP站点都应该有这一项。如果我们希望某台主机或网域中的机器具有

# 特殊的权限,那么我们可以设置如下的class:

# class local real,guest,anonymous localhost

# 这表示本地主机的类别被定义为local,当我们从主机连上FTP服务器上

# 时,就可以用较为特别的权限。

# 下面是ftpaccess.heavy文件指定的两个class,它们的意思是来自*.domain

# 和本地主机被归为local组,而其它的主机则是remote组。

#

class local real,guest,anonymous *.domain 0.0.0.0

class remote real,guest,anonymous *

#

# 我们可以使用limit命令设置某个时间段的FTP用户数量,如果超出了

# 规定的人数,则打印/etc/msgs/msgs.toomany文件并拒绝用户登录。例如:

# limit local 20 Any /etc/msgs/msgs.roomany

# 就是限制local这个组的机器同时间内最多允许20人连接FTP服务器,如果

# 超员,则打印/etc/msgs/msgs.toomany文件,显示当前在线人数太多。ftp的

# 说明文件都可以包含变量,在说明文件中可以使用“变量替换(magic

# sookies)”以指定的字符串代替某个变量:

# %T 本地时间

# %F CWD所在分区的剩余空间

# %C 当前工作目录

# %E 定义在ftpaccess文件中维护者的电子邮件地址

# %R 远端主机名称

# %L 本地主机名称

# %U 登录时所给的用户名称

# %M 该class允许的最大使用者数目

# %N 该class目前的使用者数目

#

# 我们可以利用这些变量编辑一个显示信息非常完善的说明文件。下面的

# 例子是设置当local用户在任何时候不能超过20人,remote用户在周六

# 周日的18:00到6:00不能超过100人,否则将显示/etc/msgs目录下的

# msg.toomany文件的内容。

#

limit local 20 Any /etc/msgs/msg.toomany

limit remote 100 SaSu|Any1800-0600 /etc/msgs/msg.toomany

limit remote 60 Any /etc/msgs/msg.toomany

#

# readme命令的作用是指定用户登录或进行其它操作(如更换目录)时

# FTP服务器提示用户阅读的文件。

#

readme README* login

readme README* cwd=*

#

# messages命令主要是设置一些FTP的显示信息,如下面的“message

# /welcome.msg login”就是代表用户登录时,将显示/home/ftp目录下的

# welcome.msg作为进站画面。我们要提醒您的是FTP服务器都是以

# /home/ftp这个目录作为根目录的,所以要写成/welcome.msg。而

# “message .message cwd=*”则是定义用户在更换目录时将显示在目录

# 下的文件。

#

message /welcome.msg login

message .message cwd=*

#

# 下面定义的允许从local和remote登录的机器在传输文件时,可执行compress

# 压缩文件或使用tar命令将多个文件打包成一个文件。

#

compress yes local remote

tar yes local remote

#

# 是否允许通过SITE GROUP和SITE GPASS命令适用秘密文件

# allow use of private file for SITE GROUP and SITE GPASS?

#

private yes

#

# 设置密码检查的规则。FTP服务器将要求匿名用户使用其电子邮件

# 地址作为密码,可是有人还是会胡乱输入,所以我们可以使用passwd-check

# 来查看用户是否输入一个类似于user@hostname的E- mail地址:none表

# 示不进行密码检查; trivial表示密码必须含有“@”;而使用rfc822时,

# 表示密码必须满足rfc822规定的地址。当密码不合要求时,warn将给予

# 警告,但依然允许他们登录,而enforce则表示警告并使用户退出。
#

# passwd-check <none|trivial|rfc822> [<enforce|warn>]

passwd-check rfc822 warn

#

# log commands <typelist>记录<typelist>类型(可以是anonymous、

# guest和real)用户使用的命令。Log transfer <typelist> <directions>

# 记录<typelist>类型的用户做的<directions>(可以为inbound传进服务器、

# outbound传出服务器)方向的文件传输。

#

log commands real

log transfers anonymous,real inbound,outbound

#

# 如果shutdown<path>指定的文件存在,FTP服务器将定期检查<path>文件

# 以查看服务器是否预定关闭。<path>文件的格式为:

# <year> <month> <day> <hour> <minute> <deny_offset> <disc_offset> <text>

# <deny_offset>和<disc_offset>的意思是在服务器关闭前多长时间新的登录

# 请求和现存的连接将被拒绝和终止。<text>是对拒绝连接的用户的一段信息。

# 如:

# 1999 10 25 00:00 0010 0005

# System shutdown at %s

# 表示1999年10月25日00:00关闭FTP服务器,10分钟以前拒绝连接,5分钟

# 以前中断正在连接的FTP服务。外部程序ftpshut可以用来产生<path>文件,

# 例如上面的文件可以通过如下的命令来产生:

# ftpshut 0000

#

shutdown /etc/shutmsg

#

# 设置用户在FTP服务器上可以使用的命令,我们可以看到下面所有的

# 命令后面都是“no”,也就是说guest用户不能使用delete、overwrite、

# rename命令,而anonymous则都不能使用。只有real用户可以使用这些命令。

# all the following default to "yes" for everybody

#

delete no guest,anonymous # delete permission?

overwrite no guest,anonymous # overwrite permission?

rename no guest,anonymous # rename permission?

chmod no anonymous # chmod permission?

umask no anonymous # umask permission?

#

# 设置用户上传文件的目录。下面例子中/var/ftp目录下的/incoming目录可以

# 用来上传文件,上传文件的属主是root,组别是daemon,读取权限是0600,

# dirs表示在/incoming目录中可以创建子目录。

# specify the upload directory information

#

upload /var/ftp * no nobody nogroup 0000 nodirs

upload /var/ftp /bin no

upload /var/ftp /etc no

upload /var/ftp /incoming yes root daemon 0600 dirs

#

# 为/incoming目录设置路径别名为inc:,用户在任何时候只要使用命令

# “cd inc:”就可以到达/incoming目录。

# directory aliases... [note, the ":" is not required]

#

alias inc: /incoming

# cdpath主要定义在改变目录时使用的搜索路径。如果我们定义:

# cdpath /incoming/test、cdpath /pub、cdpath /,那么用户在任意路径

# 随便cd到一个目录,比如cd test,那么将依次搜寻:

# /incoming/test

# /pub/test

# /test

# 以寻找一个符合test目录的路径。

#

cdpath /incoming

cdpath /pub

cdpath /

#

# path-filter的功能是检查用户上传文件的文件名是否合法,如下面

# 第一条命令就是指定所有的匿名用户上传文件的文件名只能是以

# A-Z、a-z、0-9以及“._-”组成,而不能以一个“.”或是一个“-”开始。

# 如果文件名不合法,将显示/etc/pathmsg给该用户。

#

path-filter anonymous /etc/pathmsg ^[-A-Za-z0-9_.]*$ ^. ^-

path-filter guest /etc/pathmsg ^[-A-Za-z0-9_.]*$ ^. ^-

#

# 设置guest用户

# specify which group of users will be treated as "guests".

#

guestgroup ftponly

#

# FTP服务器管理员的邮件地址

#

email user@hostname

以上是一些ftpaccess常用的设置,您也可以参考ftpaccess的man pagse来获得更详细的配置信息。

配置/etc/ftpusers和/etc/ftphosts文件

通过ftpusers文件,我们可以限制系统中有哪些用户不能使用ftp服务,ftphosts文件与之类似,所不同的是该文件中记录的是不能 访问FTP服务器的主机。通常这样做的目的都是出于系统安全的考虑。Wu-ftpd 为我们准备有这两个文件的示例,我们可以在examples 目录中找到它们。下面是ftpusers文件设置的例子:

# 禁止使用FTP服务的用户

root

bin

boot

daemon

digital

field

gateway

guest

nobody

operator

ris

sccs

sys

uucp

限制这些用户使用FTP服务器主要是基于系统安全的考虑,避免权利过大的用户(如root、ftpadm)登录FTP服务器和避免使用系统命令作为 帐号(如shutdown、sync),以避免系统管理上的困惑。我们可以根据自己使用的需要,向该文件中增加或删除用户并将它复制到/etc目录中。

如果我们要架设的是匿名FTP服务器,那么通常不需要设置ftphosts文件,对于其它类型的FTP服务器可以参考 examples/ftphosts文件的格式结合自己的情况加以修改,然后复制到/etc目录中即可。下面是examples/ftphosts文件, 该文件允许网络somehost.domain中的用户ftp访问FTP服务器(somehost.domain可以是IP地址或域名)而禁止网络 otherhost.domain和网络131.211.32.*中的用户fred使用FTP服务。

#

# ftphosts文件配置示例,allow和deny的格式分别为:

# allow <username> <hostname or domain>

# deny <username> <hostname or domain>

#

# 以“#”开头的均为注释,空行将被忽略

#

allow ftp somehost.domain

deny fred otherhost.domain 131.211.32.*

配置/etc/ftpconversions文件

ftpconversions文件主要定义用户从FTP服务器中下载文件时对文件进行格式转换的规则。例如压缩、解压缩、打包和开包等操作,这 样用户就不必为.tar.gz、.tgz、.Z、.z之类的文件伤脑筋了。Ftpconversions文件的格式初看上去很复杂,不过不用担 心,/examples目录中也有该文件的例子,我们只要原封不动的将它复制到/etc目录中就能满足我们的使用需要了。下面让我们来看看 ftpconversions文件中各个记录项,有关各项的说明我们罗列在表14-1中:

#

# ftpconversions文件示例

#

#

:.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS

: : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS

:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP

: : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP

: : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR

: : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS

: : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

: : :.crc:/bin/cksum %s:T_REG::CKSUM

: : :.md5:/bin/md5sum %s:T_REG::MD5SUM

表1 ftpconversions文件各项说明对照表

真实文件名

目标文件名

命令操作

<filename>.Z

<filename>

传递前使用comprss –d命令压缩

<filename>.gz

<filename>

传递前使用gzip –d命令压缩

<filename>

<filename>.Z

传递前使用compress 命令压缩

<filename>

<filename>.gz

传递前使用gzip –9命令压缩

<filename>

<filename>.tar

传递前使用tar –cf命令打包

<filename>

<filename>.tar.Z

传递前使用tar –cZf命令打包并压缩

<filename>

<filename>tar.gz

传递前使用tar –czf命令打包并压缩

<directory>

<directory>.tar.Z

传递前使用tar –cZf命令对目录打包并压缩

<directory>

<directory>.tar.gz

传递前使用tar –czf命令对目录打包并压缩

Ftpconversions文件基本上把常用的压缩,打包命令都包括在内了,我们只要将它复制到/etc目录中,以后只要有人访问我们的 FTP服务器,FTP服务程序就会根据用户的需要执行压缩或打包的命令。例如,用户想下载目录Howto中所有的文件,那么他不必使用mget命令,而只 要使用get Howto.tar.gz,这时wu-ftpd就会将该目录打包压缩并发送到用户的机器上了。所以使用该文件可以完成压缩传递的数据量,减少传输时间等作 用。此外ftpconversions文件中定义的可执行文件的位置/bin指的都是/home/ftp/bin而不是Lnux /目录下的bin,所以请检查/home/ftp/bin目录中有无上述命令,如果没有还需要将这些程序复制到该目录中。

截止到这里,匿名FTP服务器的架设工作基本上就完成了,我们可以用ftp命令连接自己的服务器,检查合法用户和匿名用户的连接情况以及各个目 录的权限是否正确。之后就可以准备FTP服务的开张了。

查看全部更多资料去591cto
参考技术A 做一个虚拟账户就解决了:
步骤如下:
1、建立虚拟用户口令库文件
口令库文件中奇数行设置用户名,偶数行设置口令
# vi /etc/vsftpd/logins.txt 注意,一下是4行
upload 这个是帐户名
upload 这个是密码
download
download
2、生成vsftpd的认证文件
# db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
设置认证文件只对用户可读可写
# chmod 600 /etc/vsftpd/vsftpd_login.db
3、建立虚拟用户所需的PAM配置文件
# vi /etc/pam.d/vsftpd.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
注意:以上2行中最后的2个文件名vsftpd_login和第2个步骤中的数据库名字必须一致!
4、建立虚拟用户所要访问的目录并设置相应权限
# mkdir /home/ftpsite
# useradd -d /home/ftpsite virtual(用户名)
# chown virtual:virtual /home/ftpsite
# chmod 700 /home/ftpsite/
5、设置vsftpd.conf配置文件
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
6、设置主配置文件
在vsftpd.conf文件中添加用户配置文件目录设置
user_config_dir=/etc/vsftpd_user_conf
# service vsftpd restart
7、建立用户配置文件目录
使用mkdir命令建立用户配置文件目录
# mkdir /etc/vsftpd_user_conf
为虚拟用户建立单独的配置文件,用户配置文件名称与用户名相同
touch /etc/vsftpd_user_conf/upload
touch /etc/vsftpd_user_conf/download
8、每个FTP虚拟用户都可以独立设置其权限
vi /etc/vsftpd_user_conf/upload
anon_world_readable_only=NO 可读可下载
anon_upload_enable=YES 可上传
anon_mkdir_write_enable=YES 可创建和删除文件夹
anon_other_write_enable=YES 可文件改名和删除文件
local_root=/home/ftpsite/upload 指定upload的宿主目录
download_enable=NO 禁止下载
(注意:请先到/home/ftpsite下面去创建upload文件夹)本回答被提问者采纳
参考技术B 请搜索你的LINUX 版本+你要用的FTP版本
网上从来不缺这样的教程.

不同的版本的LINUX 不同的FTP,具体操作过程不同.

Linux中配置ftp传输

 

ftp的配置及使用

1.安装ftp:

  yum install -y vsftpd

       

出现如图所示,则表示安装成功

      

2.关闭防火墙:

  service iptables stop

      

3.创建一个用户用于ftp传输(或者使用已存在的)

  adduser hxc

4.设置密码

  passwd hxcftp  (回车再输入两遍密码)

5.切换到ftp的配置目录:

  cd /etc/vsftpd/

6.编辑该目录下的文件user_list :

  vim user_list

        

7.编辑里面的内容,将需要的用户添加进该文件夹中,这里增加hxc用户作为ftp使用,使用命令:cat user_list 查看是否添加成功

       

8.再编辑该目录下的配置文件:

  vim vsftpd.conf 

  在该配置文件中增加userlist_deny=NO  后保存退出:

        

9.重启ftp服务:

  service vsftpd restart

       

10.在windows的命令窗口中输入命令:ftp 连接的IP地址  回车

      

如果不知道连接的地址,在Linux中输入:ifconfig  查看

       

11.然后输入用户名及密码,登陆即可

     

如果出现如下错误500 OOPS: cannot change directory:/home/xxx 500 OOPS: child died

    

关于该问题的解决方案https://www.cnblogs.com/sun-flower1314/p/9574732.html

 

使用 ftp 传输文件至Linux服务器查看:https://www.cnblogs.com/sun-flower1314/p/11226339.html

谢谢!!

 希望各位给出宝贵意见,不甚感激!!

 

以上是关于如何在linux上配置ftp 及创建 ftp用户的主要内容,如果未能解决你的问题,请参考以下文章

技术指南CentOS安装FTP及配置用户

FTP虚拟用户及ssl加密配置

linux ftp 添加用户及权限管理

FTP 站点及配置

配置Vsftpd下的虚拟用户

Linux网络——FTP原理及配置