以下问题:我们运行一个 CentOS 网络服务器,并希望授予外部承包商访问权限,该承包商只需要访问我们的网络文件夹“/var/www”即可修改/上传文件。
我尝试设置 SFTP 监禁(根据以下文档:http://www.thegeekstuff.com/2012/03/chroot-sftp-setup/),但由于以下原因,我无法使其工作:整个 webfolder 已像在 CentOS 中一样分配了 Apache 用户 apache:apache。但 SFTP 需要具有 root:root 所有权,否则会出现以下错误:
致命:chroot 目录组件“/var/www/”的所有权或模式错误 [postauth] 那么我该如何设置 SFTP 或其他解决方案以保持“www”文件夹 apache:apache 拥有并允许其他用户访问它?
除了 SFTP 之外还有其他选项可以解决这个问题吗?或者 SFTP 是正确的做法吗?
预先感谢您的帮助!
答案1
我最终使用 SFTP 解决了上述问题。主要问题在于文件权限。我执行了以下步骤(运行 CentOS 7.2):
文件夹权限 设置了以下文件权限。包括粘性位(代码后解释)。
sudo find /var/www/html/ -type f -exec chmod 664 {} \;
sudo find /var/www/html/ -type d -exec chmod 775 {} \;
sudo find /var/www/html/ -type d -exec chmod g+s {} \; # Set SGID in order to keep group for newly created files
sudo chown -R apache:webmasters /var/www/html/website/data/ # As data directory must be writable by apache
chown root:root /var/www/
创建组和用户
为外部提供商创建用户并设置新密码。
groupadd webmasters
useradd -g webmasters -d /var/www/ -s /sbin/nologin externalProvider
passwd externalProvider
在 sshd_config 中设置 sftp-server 子系统
vim /etc/ssh/sshd_config
注释掉现有的子系统并添加:
Subsystem sftp internal-sftp
添加 sshd_config 末尾
Match Group sftpusers
Match Group webmasters
ChrootDirectory /var/www/
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
重启 sshd 服务
systemctl restart sshd
通过 SFTP 登录测试连接
sftp externalProvider@hostname
安全
SELinux 正在强制执行,并且从未出现过与此 SFTP 设置有关的问题。