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

可能重复:
Linux目录权限

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

只是为了强调我在一个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 @ [我的弹性IP]作为用户名login到SFTP(或FTP),对不对?
  • 用户“adeveloper”无法访问我的EC2实例中的“/ var / www / html /”或任何其他目录
  • 私钥文件怎么样?
    • 我是否将私钥文件传递给第三方开发人员?build议这样做吗?
    • 有没有办法为他们生成不同的私钥文件,或者允许他们使用用户名和密码login?

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

澄清:

  • 我需要'adeveloper'能够上传东西到'写'权限的/var/www/html/website_abc
  • 我需要'adeveloper'对于/var/www/html/下的任何文件/目录不具有“写入”权限,理想上甚至不具有“读取”权限
  • 但是,这里似乎有一个很大的问题:
    • /var/www/html/已经具有权限777,因为这是我的DocumentRoot文件夹。 那么,如何阻止“adeveloper”访问我的其他网站呢?

部分解决我pipe理使用OpenSSH(我创build.ssh文件夹内/ var / www / html / website_abc /和生成私钥,并提供给第三方开发人员)实现了我的目标。 我还了解到,我永远不应该给予AWS给我的私钥文件。 还在学习chroot。

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

作为一般的安全configuration,这是不幸的,因为有许多文件和目录是世界上可读的必要的。 例如,这里是我在某些远程CentOS盒子上的非root用户;

 $ cd /etc -bash-3.2$ ls -1 acpi adjtime aliases ... 

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

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

 $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ... 

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

但是在你的情况下,它将适合提供由远程shell服务实现的虚拟chroot。 sftp可以很容易的configuration,以限制本地用户使用configuration文件系统的特定子集

因此在你的情况下,你想将adeveloper用户chroot/var/www/html/website_abc目录中。

你可以为你的用户设置一个chroot目录,像/etc/ssh/sshd_config这样将它们限制在子目录/var/www/html/website_abc ;

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

 Match Group sftp ChrootDirectory %h AllowTcpForwarding no 

(未经testing,请参阅man sshd_config以确认语法)

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

  groupadd sftp usermod -d /var/www/html/website_abc adeveloper usermod -G sftp adeveloper 

关于共享密钥

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

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

传统的FTP替代品

vsftp / proftp等也支持chrootconfiguration,但是在这个现代的日子里,基于ssh的configuration是正常的方式,并且对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