SCP 和 SFTP
安全复制 (SCP) 是一种通过 安全 Shell 连接传输文件的协议。 SSH 文件传输协议 (SFTP) 是一种相关协议,也依赖于安全 shell 后端。 这两种协议都允许安全的文件传输,加密密码和传输的数据。 然而,SFTP 协议具有额外的功能,例如,恢复中断的传输或远程文件操作(如删除)。
安全文件传输协议 (SFTP)
安装和配置 OpenSSH。 运行后,SFTP 默认可用。
使用 sftp 程序或 SSHFS 访问文件。 许多标准的 FTP 程序也应该可以工作。
带 chroot 监狱的安全文件传输协议 (SFTP)
系统管理员可以使用 openssh 将一部分用户限制在 chroot 监狱中,从而限制他们对特定目录树的访问。 这对于简单地共享一些文件而不授予完全系统访问权限或 shell 访问权限非常有用。 具有这种类型设置的用户可以使用 SFTP 客户端(如 filezilla)在 chroot 监狱中上传/下载文件。
设置文件系统
创建一个监狱目录
# mkdir -p /var/lib/jail
可选地,将要共享的文件系统绑定挂载到此目录。 在此示例中,将使用 /mnt/data/share
。 它由 root 拥有,并且具有八进制权限 755。
# mount -o bind /mnt/data/share /var/lib/jail
/etc/fstab
中添加条目,以使绑定挂载在重启后仍然存在。创建一个非特权用户
创建 share 用户并设置一个安全的密码
# useradd -g sshusers -d /var/lib/jail foo # passwd foo
设置 OpenSSH
将以下内容添加到 /etc/ssh/sshd_config
的末尾,以启用共享并强制执行限制
/etc/ssh/sshd_config
... Match group sshusers ChrootDirectory %h X11Forwarding no AllowTcpForwarding no PasswordAuthentication yes ForceCommand internal-sftp
重启 sshd.service
以重新读取配置文件。 有关在使用 chroot 时正确配置密钥的信息,请参阅 SFTP chroot,否则会遇到权限被拒绝的问题。
测试实际上是否强制执行了限制,方法是尝试通过 shell 进行 ssh 连接。 ssh 服务器应返回有关设置的礼貌通知
$ ssh foo@someserver.com
foo@someserver.com's password: This service allows sftp connections only. Connection to someserver.com closed.
安全复制协议 (SCP)
安装、配置和启动 OpenSSH。 它包含用于传输文件的 scp 实用程序。
安装其他软件包可以获得更多功能,例如下面描述的 rsshAUR 或 scponly。
-O
选项才能使用旧版 SCP 协议。通用用法
Linux 到 Linux
从远程主机复制文件到本地主机 SCP 示例
$ scp username@from_host:file.txt /local/directory/
从本地主机复制文件到远程主机 SCP 示例
$ scp file.txt username@to_host:/remote/directory/
从远程主机复制目录到本地主机 SCP 示例
$ scp -r username@from_host:/remote/directory/ /local/directory/
从本地主机复制目录到远程主机 SCP 示例
$ scp -r /local/directory/ username@to_host:/remote/directory/
从远程主机复制文件到远程主机 SCP 示例
$ scp username@from_host:/remote/directory/file.txt username@to_host:/remote/directory/
Linux 到 Windows
使用 Windows 程序,例如 WinSCP
Scponly
Scponly 是一个受限的 shell,用于允许用户进行 scp/sftp 访问,并且仅允许 scp/sftp 访问。 此外,可以设置 scponly 以将用户 chroot 到特定目录中,从而提高安全级别。
对于现有用户,只需将用户的 shell 设置为 scponly
# usermod -s /usr/bin/scponly username
添加 chroot 监狱
该软件包附带一个用于创建 chroot 的脚本。 要使用它,请运行
# /usr/share/doc/scponly/setup_chroot.sh
- 提供答案
- 检查
/path/to/chroot
是否具有root:root
所有者和r-x
其他人的权限 - 将所选用户的 shell 更改为
/usr/bin/scponlyc
- sftp-server 可能需要一些 libnss 模块,例如 libnss_files。 将它们复制到 chroot 的
/lib
路径。
上传到 Chroot 监狱根目录
出于安全原因,设置为 chroot 目录的目录必须由 root 拥有,并且只有 root 具有对其的写入权限,否则 sftp/ssh 连接将被拒绝。 这当然意味着普通用户无法将文件上传到根目录。 为了在不损害安全性的前提下解决此问题,您可以在 chroot 目录中创建一个文件夹,普通用户或组对其具有写入权限,例如
# cd /var/lib/jail # mkdir uploads # chown :sshusers uploads # chmod 730 uploads
chmod 770
允许 sshusers 查看内容。某些使用 SFTP 的应用程序在执行操作(例如上传文件)时不允许输入子目录,并且会尝试将文件上传到 chroot 基本目录(这将被拒绝)。 为了强制这些应用程序使用特定的子目录,您可以将以下内容附加到 “ForceCommand” 选项
/etc/ssh/sshd_config
... Match group sshusers ... ForceCommand internal-sftp -d /uploads
连接的用户随后将其起始目录更改为指定的子目录(请记住重启 sshd 服务器)。