本文服务器基于centos7,客户端Windows10。文中讲述了FTP和SSH两个协议的基本配置和使用:

FTP

SSH

FTP

FTP(File Transfer Protocol),文件传输协议,是一个比较古老的基于TCP,用于不同计算机间传递文件的协议。

安装

# 判断是否安装过ftp服务或客户端
yum list installed | grep ftp

# vsftpd是服务端,ftp是客户端
yum install vsftpd ftp;

ftp配置文件位于/etc/vsftpd目录下,/etc/vsftpd目录结构如下:

/etc/vsftpd
|-- chroot_list
|-- ftpusers
|-- user_list
|-- vsftpd.conf
`-- vsftpd_conf_migrate.sh

其中,vsftpd.conf是主配置文件;ftpusers是黑名单,该文件中的用户不允许登录系统;user_list是黑白名单,根据vsftpd.conf中的配置决定user_list是白名单还是黑名单;chroot_list,根据vsftpd.conf中的配置决定该文件中的用户在登录时是否执行chroot操作。

chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 /,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 / 位置。有关chroot的更多内容,可参阅:理解 chroot一文。

配置用户登录权限

ftpusers是黑名单,文件中指定的用户不允许登录FTP服务器,通常是为了防止一些权限很高的用户做一些破坏性的事情,比如:root。查看ftpusers文件中的内容,可以看到默认会将一些特殊的账户写入到该文件中:

# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

在vsftpd.conf中设置user_list黑白名单:

# 是否启用user_list文件配置
userlist_enable=YES
# 上面设置为YES时,该配置为NO表示user_list为白名单,YES则为黑名单
userlist_deny=NO

在vsftpd.conf中设置是否允许匿名/本地用户登录及是否运行写入:

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is . You may wish to change this to ,
# if your users expect that ( is used by most other ftpd's)
local_umask=

匿名登录的用户名为ftp,密码为空,登陆后的位置是/var/ftp

chroot

在vsftpd.conf中配置chroot选项。以下配置,实现了除chroot_list_file中指定的用户之外其余所有用户均执行chroot操作。即,登录FTP服务器后,将用户家目录设置为根目录。这样,可以实现登录FTP后无法切换到上层目录的效果,因为家目录自己是最顶层的根目录。

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES

chroot_list_enable表示是否启用chroot_list_file配置,chroot_list中的用户不受chroot_local_user设置的影响,属于例外情况,即:

  • chroot_local_user=YES

该设置表示所有用户登录FTP服务器时都执行chroot操作,但chroot_list中指定的用户除外

  • chroot_local_user=NO

该设置表示所有用户登录FTP服务器时均不执行chroot操作,但chroot_list中指定的用户除外

这里,我们将chroot_local_user设为YES,用户wjchi放到chroot_list文件中:

  • 使用wjchi登录FTP服务器并查看当前目录,会显示家目录

-bash-4.2$ ftp localhost
Trying ::...
Connected to localhost (::).
(vsFTPd 3.0.)
Name (localhost:wjchi): wjchi
Please specify the password.
Password:
Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
"/home/wjchi"
ftp>
  • 使用xfh登录FTP并查看当前目录,会显示根目录

-bash-4.2$ ftp localhost
Trying ::...
Connected to localhost (::).
(vsFTPd 3.0.)
Name (localhost:wjchi): xfh
Please specify the password.
Password:
Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
"/"
ftp>

⚠️ 这里虽然显示的是根目录,但操作的实际上是用户xfh的家目录:/home/xfh。上传/下载文件都是基于/home/xfh目录的。这里的根目录可阻止用户继续跳转到上级目录。

SCP vs SFTP

SCP(Secure copy)与FTP/SFTP都可以实现在不同计算机之间进行文件传输。二者之间的区别,可参考:

What's the difference between SCP and SFTP?

Compared to the earlier SCP protocol, which allows only file transfers, the SFTP protocol allows for a range of operations on remote files – it is more like a remote file system protocol.

SCP仅仅用于文件的传输,SFTP除文件传输外还可以与远程访问进行一定的交互:

sftp> pwd
Remote working directory: /home/wjchi
sftp> ls -al
drwxr-xr-x wjchi root Jan : .
drwxr-xr-x root root Jan : ..
-rw------- wjchi wjchi Jan : .bash_history
drwxrwxr-x wjchi wjchi Jan : .cache
drwxrwxr-x wjchi wjchi Jan : .config
drwx------ wjchi wjchi Jan : .ssh
-rw------- wjchi wjchi Jan : .viminfo
-rw-rw-r-- wjchi wjchi Jan : file
sftp>

SFTP vs FTP

以下内容摘录自知乎:sftp与ftp是否没有区别?

ftp是一个文件传输服务,设计它的目的就是为了传输文件。它有独立的守护进程,使用20,21两个端口,20是数据链路的端口,21是控制链路的端。

sftp也是用来传输文件的,但它的传输是加密的,是ssh服务的一部分,没有单独的守护进程,是ssh服务的一部分,可以看做是ssh服务文件传输方案。和ssh一样,使用22端口。

FTP is often secured with SSL/TLS (FTPS) or replaced with SSH File Transfer Protocol (SFTP).

此外,FTP/FTPS有主动模式和被动模式,SFTP则不区分主动模式、被动模式。

SSH

SSH(Secure Shell)是一种加密的网络传输协议,和FTP一样,SSH也是C/S架构。通常,Linux发行版中内置了SSH的实现,如OpenSSH

目录结构

客户端公钥通常放在登录用户的家目录authorized_keys文件中,完整路径:~/.ssh/authorized_keys

# 生成密钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa # 将客户端生成的user用户的公钥发送到服务器上
ssh-copy-id -i ~/.ssh/pub_key user@host

centos中.ssh目录中主要包含以下几个文件:

[root@VM_0_2_centos ~]# ls -al ~/.ssh
total
drwx------ root root Jan : .
dr-xr-x---. root root Jan : ..
-rw------- root root Dec : authorized_keys
-rw-r--r-- root root Dec : known_hosts
[root@VM_0_2_centos ~]#
authorized_keys中用户存放客户端的公钥,known_hosts中存放已认证主机地址的指纹信息。一台计算机既可以是SSH客户端,也可以是SSH服务器,所以可以同时存在authorized_keys和known_hosts两个文件。

Windows中关于SSH的配置默认放在c:\users\userId\.ssh文件夹中,主要包含以下几个文件:

C:\Users\WenJun\.ssh>dir
驱动器 C 中的卷是 OS
卷的序列号是 60EC-5E31 C:\Users\WenJun\.ssh 的目录 // : <DIR> .
// : <DIR> ..
// : config
// : , id_rsa
// : id_rsa.pub
// : , id_rsa_wjchi
// : id_rsa_wjchi.pub
// : known_hosts

id_rsa/id_rsa.pubid_rsa_wjchi/id_rsa_wjchi.pub是两对私钥/公钥文件。config文件中的内容如下:

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host centos
HostName remote_server_ip
User wjchi
# 用户的私钥文件地址,默认使用当前目录中的id_rsa
IdentityFile C:\Users\WenJun\.ssh\id_rsa_wjchi

登录

使用SSH登录服务器有两种方式:

  • 用户名密码

  • 公钥/私钥

有关SSH登录的更多内容,可参阅:图解SSH原理一文。根据config中的配置我们可以直接使用ssh Host的方式通过公钥/私钥认证的方式登录远程服务器:

ssh centos
Last login: Thu Jan :: from 123.45.67.890
-bash-4.2$ whoami
wjchi
-bash-4.2$

通常在安装git for windows客户端时,会一起安装ssh、ssh-keygen、sftp、scp等客户端工具

配置

SSH的配置文件位于/etc/ssh目录中

-bash-4.2$ ls -al /etc/ssh
total
drwxr-xr-x. root root Jan : .
drwxr-xr-x. root root Jan : ..
-rw-r--r-- root root Aug : moduli
-rw-r--r-- root root Aug : ssh_config
-rw------- root root Jan : sshd_config
-rw------- root root Dec : ssh_host_dsa_key
-rw-r--r-- root root Dec : ssh_host_dsa_key.pub
-rw------- root root Dec : ssh_host_ecdsa_key
-rw-r--r-- root root Dec : ssh_host_ecdsa_key.pub
-rw------- root root Dec : ssh_host_ed25519_key
-rw-r--r-- root root Dec : ssh_host_ed25519_key.pub
-rw------- root root Dec : ssh_host_rsa_key
-rw-r--r-- root root Dec : ssh_host_rsa_key.pub
-bash-4.2$

其中,ssh_config是对客户端的配置,sshd_config是对服务器端的配置(一台计算机既可以作为客户端,又可以做为服务器)。可以在sshd_config中限制root用户直接通过SSH连接到服务器:

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries
#MaxSessions #PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

推荐阅读

理解 chroot

图解SSH原理

Linux使用ssh超时断开连接的真正原因

sftp与ftp是否没有区别?

Differences between SFTP and “FTP over SSH”

Linux中两个重要的基础服务的更多相关文章

  1. Linux中通过ssh将客户端与服务端的远程连接

    前提需要:1.在VMware中装上两台linux虚拟机,本博客使用的都是CentOS 7.2.两部虚拟机可以通过命令ping通.3.两部虚拟机中已经通过yum本地仓库安装了sshd服务. 首先  1. ...

  2. linux中两个缓冲区

    不同于Windows,Linux系统里存在两个剪切板:一个叫做选择缓冲区(X11 selection buffer),另一个才是剪切板(clipboard). 01)选择缓冲区(缓冲内容在其他位置可用 ...

  3. linux中mysql连接不上,服务启动失败等问题解决

    confluence问题解决方式 1)针对confluence访问页面报500与连接失败等问题 首先我们登陆部署confluence的服器 10.15.4.115 2)重启mysql服务,发现重启失败 ...

  4. Linux中两台主机配置互信关系

    服务名:sshd 客户端配置文件:/etc/ssh/ssh_config 服务端配置文件:/etc/ssh/sshd_config sshd服务需要重启才会生效 service sshd restar ...

  5. linux 中两个文档怎么对比内容是否一致

    可以用diff命令对比文档内容.[语法]: diff [参数] 文件1 文件2[说明]: 本命令比较两个文本文件,将不同的行列出来-b 将一串空格或TAB 转换成一个空格或TAB-e 生成一个编辑角本 ...

  6. 在linux中,如何增加、修改、删除、暂停和冻结用户名

    在Linux中,如何增加.修改.删除.暂停和冻结用户名 在操作增加.修改和删除用户名前,先认识linux中两个最重要的文件,它们就是账号管理最重要文件“/etc/passwd”与“etc/shadow ...

  7. Linux系统学习 二十、SAMBA服务—介绍、安装、端口

    1.简介 网络数据文件共享服务器 可以和Windows中的网上邻居通用 数据共享的方法: Windows中最常用的是“网上邻居”.网上邻居使用的文件系统是CIFS(通用互联网文件系统)协议进行数据共享 ...

  8. Linux中的基础

    前言: 这里介绍Linux基础管理.主要包括.Linux中的帮助命令(man.help).系统基础(开机.关机.重启) 一.Linux中的帮助命令. 1.内部命令: #help 命令名 例如:help ...

  9. SOA 架构中的ESB是更好的应用于异构系统集成整合还是用于统一服务调用/基础服务实施

    一.讨论主题与观点 写一篇文章.发现一次自觉得有意思的SOA架构方面的讨论,源于昨天AgileEAS.NET SOA 平台群(113723486)里几个群友的一次关于ESB的一次讨论. 大家的讨论观点 ...

随机推荐

  1. linux 不用 ioctl 的设备控制

    有时控制设备最好是通过写控制序列到设备自身来实现. 例如, 这个技术用在控制台驱动 中, 这里所谓的 escape 序列被用来移动光标, 改变缺省的颜色, 或者进行其他的配置任 务. 这样实现设备控制 ...

  2. 2019-3-1-获取-Nuget-版本号

    title author date CreateTime categories 获取 Nuget 版本号 lindexi 2019-3-1 9:27:6 +0800 2019-02-25 15:51: ...

  3. linux I/O 端口分配

    如同你可能希望的, 你不应当离开并开始抨击 I/O 端口而没有首先确认你对这些端口有 唯一的权限. 内核提供了一个注册接口以允许你的驱动来声明它需要的端口. 这个接口中 的核心的函数是 request ...

  4. Javascript中那些你不知道的事之-- false、0、null、undefined和空字符串

    话不多说直接进入主题:(如果有写的不对的地方欢迎指正) 我们先来看看他们的类型分别是什么: typeof类型检测结果 结论:false是布尔类型对象,0是数字类型对象,null是object对象,un ...

  5. 微软软件开发技术二十年回顾-API篇(转)

    二. API篇 随着Windows操作系统开始占据主导地位,开发Windows平台下的应用程序成为人们的需要.当然,这也为传统的DOS程序员提供了一种新的编程方法-一种不受设备限制并由事件驱动的编程方 ...

  6. spring MVC 核心配置

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  7. Struts2标签库常用标签(转)

    struts2标签讲解 要使用Struts2的标签,只需要在JSP页面添加如下一行定义即可:<%@ taglib prefix="s" uri="/struts-t ...

  8. C++的特殊预处理定义#、##和#@

    c/c++的预处理定义: 一.Stringizing Operator (#) 在c和c++中数字标志符#被赋予了新的意义,即字符串化操作符.其作用是:将宏定义中的传入参数名转换成用一对双引号括起来的 ...

  9. numpy :: 计算特征之间的余弦距离

    余弦距离在计算相似度的应用中经常使用,比如: 文本相似度检索 人脸识别检索 相似图片检索 原理简述 下面是余弦相似度的计算公式(图来自wikipedia): 但是,余弦相似度和常用的欧式距离的有所区别 ...

  10. 20191024-3 互评Alpha阶段作品

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9860 本组对构建之法组评价的博客链接:https://www.cnblog ...