可能重复:
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@[my elastic IP]”作为用户名登录 SFTP(或 FTP),对吗?
- 用户“adeveloper”无权访问“/var/www/html/”或我的 EC2 实例中的任何其他目录
- 私钥文件怎么样?
- 我是否将我的私钥文件传递给第三方开发人员 - 这样做是否可取?
- 有没有办法为他们生成不同的私钥文件或允许他们使用用户名和密码登录?
我已经进行过搜索,但大多数人都在谈论如何通过 SFTP 访问 EC2,而我已经能够使用 WinSCP 来访问它。
澄清:
- 我需要“adeveloper”才能上传
/var/www/html/website_abc
具有“写入”权限的内容 - 我需要“adeveloper”对 下的任何文件/目录都没有“写入”权限
/var/www/html/
,理想情况下甚至没有“读取”权限 - 然而,这里似乎有一个大问题:
/var/www/html/
由于这是我的 DocumentRoot 文件夹,因此已经有权限 777。那么,我该如何阻止“adeveloper”访问我的其他网站?
部分解决 我使用 OpenSSH 成功实现了我的目标(我在 /var/www/html/website_abc/ 中创建了 .ssh 文件夹并生成了私钥并将其提供给第三方开发人员)。我还了解到我永远不应该把 AWS 给我的私钥文件交给别人。仍在学习 chroot。
答案1
默认情况下,提供远程 shell(例如 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,以将本地用户限制到文件系统的特定子集:
因此,就您而言,您希望将chroot
用户adeveloper
进入/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
(未经测试,请查看man sshd_config
以确认语法)
然后将这些用户添加到 sftp 组;
groupadd sftp
usermod -d /var/www/html/website_abc adeveloper
usermod -G sftp adeveloper
关于共享密钥
您应该为 adeveloper 用户创建一个额外的密钥对,并将其发送给您的顾问。(或者,让他们向您发送他们的公钥并将其添加到 authorized_keys 文件中adeveloper
)
永远不要放弃你的私钥,这就是为什么它被称为私钥;-)
传统 FTP 替代方案
vsftp/proftp 等也支持 chroot 配置,但在现代,基于 ssh 的配置是正常方式,对 ftp 的支持仅限于历史。
http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny