标签 FTP 下的文章

本文中,介绍在 Linux shell 中如何使用 ftp 命令。包括如何连接 FTP 服务器,上传或下载文件以及创建文件夹。尽管现在有许多不错的 FTP 桌面应用,但是在服务器、SSH、远程会话中命令行 ftp 命令还是有很多应用的。比如。需要服务器从 ftp 仓库拉取备份。

步骤 1: 建立 FTP 连接

想要连接 FTP 服务器,在命令上中先输入ftp然后空格跟上 FTP 服务器的域名 'domain.com' 或者 IP 地址

例如:

ftp domain.com

ftp 192.168.0.1

ftp [email protected]

注意: 本例中使用匿名服务器。

替换下面例子中 IP 或域名为你的服务器地址。

FTP 登录

步骤 2: 使用用户名密码登录

绝大多数的 FTP 服务器是使用密码保护的,因此这些 FTP 服务器会询问'username'和'password'.

如果你连接到被称作匿名 FTP 服务器(LCTT 译注:即,并不需要你有真实的用户信息即可使用的 FTP 服务器称之为匿名 FTP 服务器),可以尝试anonymous作为用户名以及使用空密码:

Name: anonymous
Password:

之后,终端会返回如下的信息:

230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

登录成功。

FTP 登录成功

步骤 3: 目录操作

FTP 命令可以列出、移动和创建文件夹,如同我们在本地使用我们的电脑一样。ls可以打印目录列表,cd可以改变目录,mkdir可以创建文件夹。

使用安全设置列出目录

ftp> ls

服务器将返回:

200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
directory list
....
....
226 Directory send OK.

打印目录

改变目录:

改变目录可以输入:

ftp> cd directory

服务器将会返回:

250 Directory succesfully changed.

FTP中改变目录

步骤 4: 使用 FTP 下载文件

在下载一个文件之前,我们首先需要使用lcd命令设定本地接受目录位置。

lcd /home/user/yourdirectoryname

如果你不指定下载目录,文件将会下载到你登录 FTP 时候的工作目录。

现在,我们可以使用命令 get 来下载文件,比如:

get file

文件会保存在使用lcd命令设置的目录位置。

服务器返回消息:

local: file remote: file
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for file (xxx bytes).
226 File send OK.
XXX bytes received in x.xx secs (x.xxx MB/s).

使用FTP下载文件

下载多个文件可以使用通配符及 mget 命令。例如,下面这个例子我打算下载所有以 .xls 结尾的文件。

mget *.xls

步骤 5: 使用 FTP 上传文件

完成 FTP 连接后,FTP 同样可以上传文件

使用 put命令上传文件:

put file

当文件不再当前本地目录下的时候,可以使用绝对路径:

put /path/file

同样,可以上传多个文件:

mput *.xls

步骤 6: 关闭 FTP 连接

完成FTP工作后,为了安全起见需要关闭连接。有三个命令可以关闭连接:

bye
exit
quit

任意一个命令可以断开FTP服务器连接并返回:

221 Goodbye

需要更多帮助,在使用 ftp 命令连接到服务器后,可以使用help获得更多帮助。


via: https://www.howtoforge.com/tutorial/how-to-use-ftp-on-the-linux-shell/

译者:VicYu 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在本教程中,我将会介绍如何搭建你自己的FTP服务。但是,首先我们应该来的学习一下FTP是什么。

FTP是什么?

FTP 文件传输协议 File Transfer Protocol 的缩写。顾名思义,FTP用于计算机之间通过网络进行文件传输。你可以通过FTP在计算机账户间进行文件传输,也可以在账户和桌面计算机之间传输文件,或者访问在线软件归档。但是,需要注意的是多数的FTP站点的使用率非常高,可能需要多次重连才能连接上。

FTP地址和HTTP地址(即网页地址)非常相似,只是FTP地址使用ftp://前缀而不是http://

FTP服务器是什么?

通常,拥有FTP地址的计算机是专用于接收FTP连接请求的。一台专用于接收FTP连接请求的计算机即为FTP服务器或者FTP站点。

现在,我们来开始一个特别的冒险,我们将会搭建一个FTP服务用于和家人、朋友进行文件共享。在本教程,我们将以vsftpd作为ftp服务。

VSFTPD是一个自称为最安全的FTP服务端软件。事实上VSFTPD的前两个字母表示“ 非常安全的 very secure ”。该软件的构建绕开了FTP协议的漏洞。

尽管如此,你应该知道还有更安全的方法进行文件管理和传输,如:SFTP(使用OpenSSH)。FTP协议对于共享非敏感数据是非常有用和可靠的。

使用 rpm 安装VSFTPD:

你可以使用如下命令在命令行界面中快捷的安装VSFTPD:

dnf -y install vsftpd

使用 deb 安装VSFTPD:

你可以使用如下命令在命令行界面中快捷的安装VSFTPD:

sudo apt-get install vsftpd

在Arch 中安装VSFTPD:

你可以使用如下命令在命令行界面中快捷的安装VSFTPD:

sudo pacman -S vsftpd

配置FTP服务

多数的VSFTPD配置项都在/etc/vsftpd.conf配置文件中。这个文件本身已经有非常良好的文档说明了,因此,在本节中,我只强调一些你可能进行修改的重要选项。使用man页面查看所有可用的选项和基本的 文档说明:

man vsftpd.conf

根据文件系统层级标准,FTP共享文件默认位于/srv/ftp目录中。

允许上传:

为了允许ftp用户可以修改文件系统的内容,如上传文件等,“write\_enable”标志必须设置为 YES。

write_enable=YES

允许本地(系统)用户登录:

为了允许文件/etc/passwd中记录的用户可以登录ftp服务,“local\_enable”标记必须设置为YES。

local_enable=YES

匿名用户登录

下面配置内容控制匿名用户是否允许登录:

# 允许匿名用户登录
anonymous_enable=YES
# 匿名登录不需要密码(可选)
no_anon_password=YES
# 匿名登录的最大传输速率,Bytes/second(可选)
anon_max_rate=30000
# 匿名登录的目录(可选)
anon_root=/example/directory/

根目录限制(Chroot Jail)

( LCTT 译注:chroot jail是类unix系统中的一种安全机制,用于修改进程运行的根目录环境,限制该线程不能感知到其根目录树以外的其他目录结构和文件的存在。详情参看chroot jail

有时我们需要设置根目录(chroot)环境来禁止用户离开他们的家(home)目录。在配置文件中增加/修改下面配置开启根目录限制(Chroot Jail):

chroot_list_enable=YES 
chroot_list_file=/etc/vsftpd.chroot_list

“chroot\_list\_file”变量指定根目录限制所包含的文件/目录( LCTT 译注:即用户只能访问这些文件/目录)

最后你必须重启ftp服务,在命令行中输入以下命令:

sudo systemctl restart vsftpd

到此为止,你的ftp服务已经搭建完成并且启动了。


via: http://itsfoss.com/set-ftp-server-linux/

作者:alimiracle 译者:cvsher 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

大家好,这篇文章是介绍Lftp以及如何在Linux操作系统下安装的。Lftp是一个基于命令行的文件传输软件(也被称为FTP客户端),由Alexander Lukyanov开发并以GNU GPL协议许可发行。除了FTP协议外,它还支持FTPS,HTTP,HTTPS,HFTP,FISH,以及SFTP等协议。这个程序还支持FXP,允许数据绕过客户端直接在两个FTP服务器之间传输。

它有很多很棒的高级功能,比如递归镜像整个目录树以及断点续传下载。传输任务可以安排在稍后的时间段计划执行,可以限制带宽,可以创建传输列表,还支持类似Unix shell的任务控制。客户端还可以在交互式或自动脚本里使用。

安装Lftp

在运行lftp之前,我们需要确定它已经正确安装在我们的Linux发行版中了。下面是在常见Linux发行版中安装lftp的一些命令。

Ubuntu 14.04 LTS

在Ubuntu 14.04 LTS以及它的衍生版中,我们可以通过apt管理程序安装lftp。要安装它,我们需要使用sudo权限在shell或终端里运行下面的命令。

$ sudo apt-get install lftp

ubuntu install lftp

CentOS/Fedora/RHEL

因为在Fedora,CentOS和RHEL的软件仓库里也能找到lftp,我们可以用yum管理程序来安装它。

$ sudo yum install lftp

fedora lftp

Arch Linux

在Arch Linux安装包仓库里也有,我们可以简单地使用pacman来安装它。

$ sudo pacman -S lftp

archlinux install lftp

OpenSuse

OpenSuse系统里的包管理软件Zypper可以用来安装lftp。下面是在OpenSuse机器上用来安装的命令。

$ sudo zypper install lftp

opensuse lftp install

登录

要登录到ftp服务器或sftp服务器,我们首先需要知道所要求的认证信息,比如用户名,密码,端口。

之后,我们可以通过lftp来登录。

$ lftp ftp://linoxide@localhost

ftp login

如果需要指定登录端口,我们可以按下面的方式加上去。

$ lftp ftp://linoxide@localhost:21

ftp login with ports

导航

我们可以用ls命令来列出文件和目录,用cd命令进入到目录。

ls and cd

上传和下载文件

我们可以用pget命令来从远端服务器下载文件。

> pget linspeed.svg

pget lftp

我们可以用put命令来上传文件到远端服务器。

> put linoxide.tar

upload with put

要恢复之前只下载了一部分的文件/目录,我们可以用-c开关:

> mirror -c Directory

>pget -c linoxide.tar

> put -c upload.tar

使用镜像命令

我们可以用mirror命令来下载所指定的整个目录。

> mirror remote local

download with mirror

还可以做反向镜像(mirror -R),可以用来上传或更新本地目录树到服务器上。

> mirror -R local remote

upload or update with mirror reverse

要恢复之前下载了一部分的文件/目录,我们可以用-c开关:

> mirror -c Directory

下载队列

我们可以在lftp里使用queue的选项,这样我们可以像基于GUI的客户端那样挨个下载队列里选择的文件。下面举个例子。

为了避免队列自动开始传输,我们可以这样做:

> queue stop

现在,我们添加任务到队列。

> queue mirror "directory"

> queue pget "file.tar"

在建立好队列后,我们再运行queue start命令。

> queue start

可以运行下面的命令移除整个队列。

> queue -d

分块下载

下面是一个把一个文件分成3块来下载的例子,你可以根据自己的需要调整。

使用pget命令分块功能的方式是pget -n 3 file.tar,里面的3是分块的数目。

> pget -n 3 file.tar

使用mirror命令分块功能的方式是mirror --use-pget-n=3 directory,里面的3是分块的数目。

> mirror --use-pget-n=3 linxoxide

我们可以用jobs -v命令来查看每个独立分块的下载速度以及整体速度。

停止,继续或删除一次传输任务

要取消传输我们可以按下Ctrl+C。而要恢复下载我们可以像下面那样使用-c (--continue)开关。

> mirror -c directory

要删除一次正在正在传输的任务我们可以用kill命令,而要删除所有任务我们可以使用下面那样的kill all命令。

> kill

> kill all

退出

要从lftp退出,我们需要在终端或lftp交互接口中运行exit命令。

> exit

总结

哇!我们已经成功地安装了lftp并学会了它的一些基础的主要使用方式。lftp是一个非常棒的命令行ftp客户端,它支持许多额外的功能以及很酷的特性。它比其他普通ftp客户端多了很多东西。好吧,你要是有任何问题,建议,反馈,请在下面的评论区里留言。谢谢!享用lftp吧 :-)


via: http://linoxide.com/linux-how-to/setup-lftp-command-line-ftp/

作者:Arun Pyasi 译者:zpl1025 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Linux系统管理员应该很熟悉CLI环境,因为通常在Linux服务器中是不安装GUI的。SSH可能是Linux系统管理员通过远程方式安全管理服务器的最流行协议。在SSH命令中内置了一种叫SCP的命令,用来在服务器之间安全传输文件。

以下命令可以解读为:用“username account”“拷贝 source file name”到“destination host”上的“destination folder”里。

SCP命令的基本语法

scp source_file_name username@destination_host:destination_folder

SCP命令有很多可以使用的参数,这里指的是每次都会用到的参数。

用-v参数来提供SCP进程的详细信息

不带参数的基本SCP命令会在后台拷贝文件,除非操作完成或者有错误出现,否则用户在界面上是看不到任何提示信息的。你可以用“-v”参数来在屏幕上打印出调试信息,这能帮助你调试连接、认证和配置的一些问题。

pungki@mint ~/Documents $ scp -v Label.pdf [email protected]:.

部分输出

Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: password
[email protected]'s password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
Sending file modes: C0770 3760348 Label.pdf
Sink: C0770 3760348 Label.pdf
Label.pdf 100% 3672KB 136.0KB/s 00:27
Transferred: sent 3766304, received 3000 bytes, in 65.2 seconds
Bytes per second: sent 57766.4, received 46.0
debug1: Exit status 0

从源文件获取修改时间、访问时间和模式

-p”参数会帮到把预计的时间和连接速度会显示在屏幕上。

pungki@mint ~/Documents $ scp -p Label.pdf [email protected]:.

部分输出

[email protected]'s password:
Label.pdf 100% 3672KB 126.6KB/s 00:29

用-C参数来让文件传输更快

有一个参数能让传输文件更快,就是“-C”参数,它的作用是不停压缩所传输的文件。它特别之处在于压缩是在网络传输中进行,当文件传到目标服务器时,它会变回压缩之前的原始大小。

来看看这些命令,我们使用一个93 Mb的单一文件来做例子。

pungki@mint ~/Documents $ scp -pv messages.log [email protected]:.

部分输出

Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
[email protected]'s password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380425711
Sending file timestamps: T1323853868 0 1380425711 0
messages.log 100% 93MB 58.6KB/s 27:05
Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds
Bytes per second: sent 58758.4, received 15.6
debug1: Exit status 0

不用“-C”参数来拷贝文件,结果用了1661.3秒,你可以比较下用了“-C”参数之后的结果。

pungki@mint ~/Documents $ scp -Cpv messages.log [email protected]:.

部分输出

Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
[email protected]'s password:
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: channel 0: new [client-session]
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380428748
Sending file timestamps: T1323853868 0 1380428748 0
Sink: T1323853868 0 1380428748 0
Sending file modes: C0600 97517300 messages.log
messages.log 100% 93MB 602.7KB/s 02:38
Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds
Bytes per second: sent 54813.9, received 97.0
debug1: Exit status 0
debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09
debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48

看到了吧,压缩了文件之后,传输过程在162.5秒内就完成了,速度是不用“-C”参数的10倍。如果你要通过网络拷贝很多份文件,那么“-C”参数能帮你节省掉很多时间。

有一点我们需要注意,这个压缩的方法不是适用于所有文件。当源文件已经被压缩过了,那就没办法再压缩很多了。诸如那些像.zip.rarpictures.iso的文件,用“-C”参数就没什么意义。

选择其它加密算法来加密文件

SCP默认是用“AES-128”加密算法来加密传输的。如果你想要改用其它加密算法来加密传输,你可以用“-c”参数。我们来瞧瞧。

pungki@mint ~/Documents $ scp -c 3des Label.pdf [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

上述命令是告诉SCP3des algorithm来加密文件。要注意这个参数是“-c”(小写)而不是“-C“(大写)。

限制带宽使用

还有一个很有用的参数是“-l”参数,它能限制使用带宽。如果你为了拷贝很多文件而去执行了一份自动化脚本又不希望带宽被SCP进程耗尽,那这个参数会非常管用。

pungki@mint ~/Documents $ scp -l 400 Label.pdf [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 50.3KB/s 01:13

在“-l”参数后面的这个400值意思是我们给SCP进程限制了带宽为50 KB/秒。有一点要记住,带宽是以千比特/秒 (kbps)表示的,而8 比特等于1 字节

因为SCP是用千字节/秒 (KB/s)计算的,所以如果你想要限制SCP的最大带宽只有50 KB/s,你就需要设置成50 x 8 = 400

指定端口

通常SCP是把22作为默认端口。但是为了安全起见SSH 监听端口改成其它端口。比如说,我们想用2249端口,这种情况下就要指定端口。命令如下所示。

pungki@mint ~/Documents $ scp -P 2249 Label.pdf [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 262.3KB/s 00:14

确认一下写的是大写字母“P”而不是“p“,因为“p”已经被用来保留源文件的修改时间和模式(LCTT 译注:和 ssh 命令不同了)。

递归拷贝文件和文件夹

有时我们需要拷贝文件夹及其内部的所有文件/子文件夹,我们如果能用一条命令解决问题那就更好了。SCP用“-r”参数就能做到。

pungki@mint ~/Documents $ scp -r documents [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00

拷贝完成后,你会在目标服务器中找到一个名为“documents”的文件夹,其中就是所拷贝的所有文件。“documents”是系统自动创建的文件夹。

禁用进度条和警告/诊断信息

如果你不想从SCP中看到进度条和警告/诊断信息,你可以用“-q”参数来静默它们,举例如下。

pungki@mint ~/Documents $ scp -q Label.pdf [email protected]:.

[email protected]'s password:
pungki@mint ~/Documents $

正如你所看到的,在你输入密码之后,没有任何关于SCP进度的消息反馈。进度完成后,你也看不到任何提示。

用SCP通过代理来拷贝文件

代理服务器经常用于办公环境,SCP自然是没有经过代理方面的配置的。当你的环境正在使用代理,那么你就必须要“告诉”SCP与代理关联起来。

场景如下:代理的地址是10.0.96.6,端口是8080。该代理还实现了用户认证功能。首先,你需要创建一个“~/.ssh/config”文件,其次把以下命令输入进该文件。

ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth

接着你需要创建一个同样包括以下命令的“~/.ssh/proxyauth”文件。

myusername:mypassword

然后你就可以像往常一样使用SCP了。

请注意corkscrew可能还没有安装在你的系统中。在我的Linux Mint中,我需要首先先用标准Linux Mint安装程序来安装它。

$ apt-get install corkscrew

对于其它的一些基于yum安装的系统,用户能用以下的命令来安装corkscrew。

# yum install corkscrew

还有一点就是因为“~/.ssh/proxyauth”文件中以明文的格式包含了你的“用户名”和“密码”,所以请确保该文件只能你来查看。

选择不同的ssh\_config文件

对于经常在公司网络和公共网络之间切换的移动用户来说,一直改变SCP的设置显然是很痛苦的。如果我们能放一个保存不同配置的ssh\_config文件来匹配我们的需求那就很好了。

以下是一个简单的场景

代理是被用来在公司网络但不是公共网络并且你会定期切换网络时候使用的。

pungki@mint ~/Documents $ scp -F /home/pungki/proxy_ssh_config Label.pdf

[email protected]:.
[email protected]'s password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

默认情况下每个用户会把“ssh\_config”文件放在“~/.ssh/config“路径下。用兼容的代理创建一个特定的“ssh\_config”文件,能让你切换网络时更加方便容易。

当你处于公司网络时,你可以用“-F”参数,当你处于公共网络时,你可以忽略掉“-F”参数。

以上就是关于SCP的全部内容了,你可以查看SCPman页面来获取更多内容,请随意留下您的评论及建议。


via: http://www.tecmint.com/scp-commands-examples/

作者:Pungki Arianto 译者:ZTinoZ 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

某些环境中,系统管理员想要允许极少数用户在可以传输文件到Linux机器中,但是不允许使用 SSH。要实现这一目的,我们可以使用SFTP,并为其构建chroot环境。

SFTP & chroot背景:

SFTP是指SSH文件传输协议(SSH File Transfer protocol)或安全文件传输协议(Secure File Transfer Protocol),它提供了可信数据流下的文件访问、文件传输以及文件管理功能。当我们为SFTP配置chroot环境后,只有被许可的用户可以访问,并被限制到他们的家目录中,换言之:被许可的用户将处于牢笼环境中,在此环境中它们甚至不能切换它们的目录。

在本文中,我们将配置RHEL 6.XCentOS 6.X中的SFTP Chroot环境。我们开启一个用户帐号‘Jack’,该用户将被允许在Linux机器上传输文件,但没有ssh访问权限。

步骤:1 创建组

[root@localhost ~]# groupadd  sftp_users

步骤:2 分配附属组(sftp\_users)给用户

如果用户在系统上不存在,使用以下命令创建( LCTT 译注:这里给用户指定了一个不能登录的 shell,以防止通过 ssh 登录):

[root@localhost ~]# useradd  -G sftp_users  -s /sbin/nologin  jack
[root@localhost ~]# passwd jack

对于已经存在的用户,使用以下usermod命令进行修改:

[root@localhost ~]# usermod –G sftp_users  -s /sbin/nologin  jack

注意:如果你想要修改用户的默认家目录,那么可以在useradd和usermod命令中使用‘-d’选项,并设置合适的权限

步骤:3 现在编辑配置文件 “/etc/ssh/sshd\_config”

# vi /etc/ssh/sshd_config
#comment out the below line and add a line like below
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

# add Below lines  at the end of file
  Match Group sftp_users
  X11Forwarding no
  AllowTcpForwarding no
  ChrootDirectory %h                      
  ForceCommand internal-sftp

此处:

  • Match Group sftp\_users – 该参数指定以下的行将仅仅匹配sftp\_users组中的用户
  • ChrootDirectory %h – 该参数指定用户验证后用于chroot环境的路径(默认的用户家目录)。对于用户 Jack,该路径就是/home/jack。
  • ForceCommand internal-sftp – 该参数强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令。

重启ssh服务

# service sshd restart

步骤:4 设置权限:

[root@localhost ~]# chmod 755 /home/jack
[root@localhost ~]# chown root /home/jack
[root@localhost ~]# chgrp -R sftp_users /home/jack

如果你想要允许jack用户上传文件,那么创建一个上传文件夹,设置权限如下:

[root@localhost jack]# mkdir /home/jack/upload
[root@localhost jack]# chown jack. /home/jack upload/

步骤:5 现在尝试访问系统并进行测试

尝试通过ssh访问系统

正如下图所示,用户jack通过SFTP登录,而且因为chroot环境不能切换目录。

现在进行上传和下载测试,如下图:

正如上图所示,jack用户的上传下载功能都工作得很好。


via: http://www.linuxtechi.com/configure-chroot-sftp-in-linux/

原文作者:Pradeep Kumar

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

vsftpd非常安全的文件传输协议守护进程) 是Unix/Linux系统中的一个安全快速的FTP服务器。 在这篇指导教程中,让我们看看在openSUSE 13.1中怎样使用vsftpd来配置一个基本的FTP服务器。

安装 vsftpd

作为root用户登录然后输入以下命令。

# zypper in vsftpd

启动 vsftpd 服务然后通过设置使它在每次系统重启时自动启动。

# systemctl enable vsftpd.service
# systemctl start vsftpd.service

配置 vsftpd

为ftp用户新建一个文件夹。

# mkdir /srv/ftp

创建一个名为 ftp-users 的组。

# groupadd ftp-users

让我们来创建一个叫unixmen的示例用户 并设置其主目录为 /srv/ftp 组为 ftp-users

# useradd -g ftp-users -d /srv/ftp/ unixmen

为新用户设置密码。

# passwd unixmen

使ftp主目录 /srv/ftp/ 可以被ftp用户所访问。

# chmod 750 /srv/ftp/
# chown unixmen:ftp-users /srv/ftp/

编辑 vsftpd.conf 文件

# nano /etc/vsftpd.conf

设置如下的更改。

[...]
#Uncomment and  Set YES to enable write.
write_enable=YES
[...]
# Uncomment and Set banner name for your website
ftpd_banner=Welcome to Unixmen FTP service.
[...]
# Uncomment
ls_recurse_enable=YES
[...]
# Uncomment and set YES to allow local users to log in.
local_enable=YES
[...]
# To disable anonymous access, set NO.
anonymous_enable=NO
[...]
# Uncomment to enable ascii download and upload.
ascii_upload_enable=YES
ascii_download_enable=YES
[...]
## Add at the end of this  file ##
use_localtime=YES

保存并退出文件。

测试本地FTP服务器

首先 让我们按如下步骤尝试登录FTP服务器

# ftp localhost
Trying ::1:21 ...
Connected to localhost.
220 (vsFTPd 3.0.2)
Name (localhost:root): unixmen
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

正如你在上面所输出的那样, 我们能够用unixmen用户登录到ftp服务器。

测试远程FTP服务器

默认 openSUSE 内置的防火墙不允许远程系统登录FTP。所以让我们允许vsftpd服务通过suse的防火墙。然后我们需要打开: Yast -> 安全性与用户 -> 防火墙.

在防火墙界面,进入 允许服务. 在区域选择下拉框中,选择 外部区域 在服务允许下拉框中,选择 vsftpd 服务器 然后点击添加。

单击下一步并关闭Yast控制中心

现在尝试从远程系统连接FTP。

我试着从我的ubuntu桌面系统登录FTP服务器。

sk@sk:~$ ftp 192.168.1.53
Connected to 192.168.1.53.
220 (vsFTPd 3.0.2)
Name (192.168.1.53:sk): unixmen
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

正如你在上面输出中所看到的,我能够连接到ftp服务器。如果不允许vsftpd服务通过防火墙,你将会得到一个连接超时的报错。

从浏览器连接

打开你的浏览器并导航到ftp://ip-address/。输入ftp用户名和密码。

使用FileZilla连接到FTP服务器

对于新手来说,在命令行模式下工作可能会很烦恼。所以让我们来安装一个叫Filezilla的图形化的FTP客户端。它可以让我们登陆FTP变得更加简单:

几乎所有的发行版在它们的官方软件仓库中都有filezilla客户端。 为了在基于Linux的系统上安装filezilla 需要键入以下的命令:

在基于Ubuntu的系统中:

$ sudo apt-get install filezilla

在Fedora/Redhat系统中:

$ sudo yum install filezilla

在openSUSE中:

# zypper in filezilla

安装完fielzilla后打开它。输入ftp服务器的IP地址、用户名和密码,然后点击快速连接。

为了增加安全性,你可以通过将用户添加到 /etc/vsftpd.chroot\_list文件中来限制特定用户对FTP服务器的访问。

编辑 vsftpd.conf 文件,

nano /etc/vsftpd.conf

设置如下的更改.

[...]
# Uncomment and set YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
[...]

创建 文件 /etc/vsftpd.chroot\_list,

nano /etc/vsftpd.chroot_list

添加你希望能够访问FTP服务器的用户。我添加了用户unixmen

unixmen

重启ftp服务.

# systemctl restart vsftpd.service

现在你能够使用chroot\_list文件中列出的用户来连接到FTP服务器。

如果chroot\_list以外的用户想访问FTP服务器,他们将得到如下错误提示。

500 OOPS: could not read chroot() list file:/etc/vsftpd.chroot_list
ftp: Login failed

就是现在这样,你的FTP服务器已经可以使用了,好好享受吧!


via: http://www.unixmen.com/setup-ftp-server-opensuse-13-1/

译者:zsJacky 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出