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


19

可能重复:
Linux目录权限

我正在与一些第三方开发人员合作,我想授予SFTP(或FTP)对他们正在工作的网站的根文件夹的访问权限,即'/var/www/html/website_abc'以便他们可以将文件上传到那里。请注意,我将其他网站托管在同一EC2实例上,例如'/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]”作为用户名登录SFTP(或FTP),对吗?
  • 用户“ adeveloper”无权访问“ / var / www / html /”或我的EC2实例中的任何其他目录
  • 私钥文件呢?
    • 我是否将我的私钥文件传递给第三方开发人员-建议这样做吗?
    • 有没有办法为他们生成不同的私钥文件,或者允许他们使用用户名和密码登录?

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

说明:

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

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


1
对不起,@ lain,但您一定误解了我。我想您可能会花时间做比做这样的错误判断更有意义的事情。也许,如果您仔细阅读了我的问题,您真的会认为它与SSH / SFTP的关系比Linux文件/文件夹的权限更多,或者说两者之间也是一个困惑(为什么我感到困惑?我不知道,这就是为什么)我需要帮助)。这与您认为的其他线程不完全相同。无论如何,我设法使用OpenSSH实现了我的目标。我仍在学习Tom H建议的chroot和一些搜索结果。谢谢
ericn

“我也得知我永远都不要放弃AWS给我的私钥文件”为什么.....
Michael Bailey

Answers:


11

默认情况下,提供远程外壳程序(例如ssh或telnet)或提供诸如sftp这样的命令的交互式远程会话的服务,允许本地用户切换到其有权访问的任何目录,并检索其有权访问的任何文件的副本。

作为一般的安全配置,这很不幸,因为有许多文件和目录在世界范围内是必需的。例如,这里我是某个远程CentOS机器上的非root用户。

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

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

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

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

Unix系统提供chroot命令,该命令使您可以/将用户的身份重置到文件系统层次结构中的某个目录,在该目录中,用户无法访问“上层”文件和目录。

但是,根据您的情况,应该提供一个由远程Shell服务实现的虚拟chroot。sftp可以很容易地配置为使用文件系统中的配置将本地用户限制为文件系统的特定子集。

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

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

这些东西需要Opensh-server迟于4.8 ?,所以可能需要CentOS 6.2。

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

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

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

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

关于共享密钥

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

永不放弃您的私钥,这就是为什么它称为私有;-)

传统的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


到目前为止,我还无法弄清楚chroot,但我仍在学习中,尚未放弃。我设法使用OpenSSH达到了上述目标。再次感谢
ericn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.