如何将具有 SFTP/FTP 访问权限的用户添加到 Amazon EC2 Centos 上的“/var/www/html/website_abc”文件夹?

eri*_*icn 19 centos ftp sftp amazon-ec2 amazon-web-services

可能重复:
Linux 目录权限

我正在与一些第三方开发人员合作,我想授予 SFTP(或 FTP)访问他们正在处理的网站的根文件夹的权限,'/var/www/html/website_abc'以便他们可以将文件上传到那里。请注意,我在同一个 EC2 实例上托管我的其他网站,例如'/var/www/html/website_xyz'.

只是为了强调我在 1 个 EC2 实例上使用多个网站,网站的结构如下:

/var/www/html/
/var/www/html/website_abc
...
/var/www/html/website_xyz

我的目标如下:

  • 用户“adeveloper”可以访问“/var/www/html/website_abc”,并且只能访问“/var/www/html/website_abc”
    • 我想用户 'adeveloper' 将使用 'adeveloper@[my elastic IP]' 作为登录 SFTP(或 FTP)的用户名,对吗?
  • 用户“adeveloper”无权访问“/var/www/html/”或我的 EC2 实例中的任何其他目录
  • 私钥文件呢?
    • 我是否将我的私钥文件传递给第三方开发人员 - 这样做是否可取?
    • 有没有办法为他们生成不同的私钥文件或允许他们使用用户名和密码登录?

我已经进行了搜索,但大多数人都在谈论如何通过 SFTP 访问 EC2,而我已经能够使用 WinSCP。

说明:

  • 我需要“开发人员”才能上传/var/www/html/website_abc具有“写”权限的内容
  • 我需要“adeveloper”对 下的任何文件/目录没有“写”权限/var/www/html/,理想情况下甚至没有“读”权限
  • 然而,这里似乎有一个大问题:
    • /var/www/html/已经拥有权限 777,因为这是我的 DocumentRoot 文件夹。那么,如何阻止“adeveloper”访问我的其他网站?

部分解决 了我使用 OpenSSH 设法实现了我的目标(我在 /var/www/html/website_abc/ 中创建了 .ssh 文件夹并生成私钥并将其提供给第三方开发人员)。我还了解到我永远不应该提供 AWS 给我的私有密钥文件。仍在学习 chroot。

Tom*_*Tom 11

默认情况下,提供远程 shell(如 ssh 或 telnet)或交互式远程会话的服务(如 sftp)允许本地用户切换到他们有权访问的任何目录,并检索他们有权访问的任何文件的副本。

作为一般的安全配置,这是不幸的,因为有许多文件和目录必须是世界可读的。例如,我是某个远程 CentOS 机器上的非 root 用户;

$ cd /etc
-bash-3.2$ ls -1
acpi
adjtime
aliases
...
Run Code Online (Sandbox Code Playgroud)

例如,我可以访问很多东西,理想情况下,您希望限制某些您希望提供本地访问权限的未知用户。

这是我查看/etc/passwd文件中配置的所有本地用户;

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
Run Code Online (Sandbox Code Playgroud)

Unix 系统提供了chroot允许您/将用户重置到文件系统层次结构中的某个目录的命令,在那里他们无法访问“更高级别”的文件和目录。

但是,在您的情况下,提供由远程 shell 服务实现的虚拟 chroot 是合适的。sftp 可以很容易地配置为使用

因此,在你的情况,你想chrootadeveloper用户进入/var/www/html/website_abc目录。

您可以为您的用户设置一个 chroot 目录,以将他们限制在子目录中,/var/www/html/website_abc如下所示/etc/ssh/sshd_config

这个东西需要4.8之后的openssh-server?,所以可能需要CentOS 6.2

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)

(未测试,请参阅man sshd_config以确认语法)

然后将这些用户添加到 sftp 组;

 groupadd sftp
 usermod -d /var/www/html/website_abc adeveloper
 usermod -G sftp adeveloper
Run Code Online (Sandbox Code Playgroud)

关于共享密钥

您应该为 adeveloper 用户创建一个额外的密钥对,并将其发送给您的顾问。(或者,让他们发送您的公钥并将其添加到 authorized_keys 文件中adeveloper

永远不要放弃你的私钥,这就是为什么它被称为 private ;-)

传统的 ftp 替代品

vsftp/proftp 等也支持 chroot 配置,但在现代,基于 ssh 的配置是正常方式,对 ftp 的支持只是历史性的。

这里有几个教程链接;
http://www.techrepublic.com/blog/opensource/chroot-users-with-openssh-an-easier-way-to-confine-users-to-their-home-directories/229

http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny