从一台服务器到另一台服务器的 SSHFS 文件

gla*_*kou 6 server ssh filesystem sshfs file-sharing

我试图找到将文件从一台服务器传输到另一台服务器的最安全方式。

我有以下架构:

建筑学

目前我正在使用主用户salamis来挂载目录。

原始目录中的文件是通过 PHP 文件管理器创建的elfinder

不幸的是,我不能够moverenamedelete从任何文件安装目录通过PHP。我得到许可被拒绝。

1)是不是因为我使用salamis而不是安装文件系统www-data

2) 将文件系统安装在Server 2as上是否安全www-data?如果是,我怎样才能做到这一点?www-data没有密码,我无法使用su -m www-data. 我明白了authentication failure

3)你能想到更好的架构吗?

Gil*_*il' 2

SSHFS 是一个FUSE文件系统。这些由用户态进程管理,该进程以安装文件系统的用户身份运行:sshfs您运行的进程同时充当文件系统驱动程序。默认情况下,大多数 FUSE 文件系统只允许挂载用户访问内部文件。

\n\n

为了能够通过 sshfs 访问文件,您需要三件事:

\n\n
    \n
  1. 在 server1 上通过 ssh 进行身份验证的用户必须能够访问这些文件。
  2. \n
  3. 尝试访问 server2 上的 sshfs 文件系统的用户必须具有必要的访问权限。
  4. \n
  5. 必须允许尝试访问 server2 上的 sshfs 文件系统的用户访问该文件系统。
  6. \n
\n\n

正如我上面所写,只有安装用户才具有最后的权限。您可以通过添加-o allow_usersshfs命令行来放松这一点,但这并不能解决其他两个问题。请注意,仅当包含或您以 root 身份运行时才-o allow_user生效。/etc/fuse.confuser_allow_usersshfs

\n\n

在 上server2,您需要sshfswww-data用户身份运行(您必须授予其访问 SSH 私钥的权限),或者启用allow_user并安排本地www-data访问其所需的文件。有几种方法可以做到这一点:通过uid选项,或通过传递-o default_permissions,或通过传递-o umask 770,gid=www-data。如果启用allow_user,请确保您最终不会允许www-data访问超出应有的文件,并且不会最终允许其他用户查看或修改他们不应该访问的文件。运行sshfsaswww-data具有简单的优点,您更有可能不会意外地过于宽容。

\n\n

对于问题 #1,您需要 ssh 进入www-data上的帐户server1,或者允许您使用的帐户访问这些文件。不允许远程登录系统帐户(例如 )有一些好处www-data,因为这会导致审核效果不佳(您无法知道谁实际使用了该帐户)。然而,这并不是不可能的,而且设置起来也更容易一些。如果您不想允许远程登录该www-data帐户,请将salamis\xc2\xb9 添加到www-data组中,确保使用该选项server1安装了文件系统acl(如果需要,将其添加到相关条目中/etc/fstab),并添加对\ 的文件的ACL :www-data

\n\n
setfacl -d -m group:www-data:rwx -R /path/to/www-root\nsetfacl -m group:www-data:rwx -R /path/to/www-root\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xc2\xb9如果那是您在 上的帐户server1,我从您的问题中不明白是否salamis是 上的用户server1、 上的用户server2,还是两者兼而有之。

\n


And*_*ist 0

1)是的,就像Gilles回答的那样,您使用的登录ID是创建文件的默认所有者。对于大多数协议来说都是如此。

2) www-data 用户没有密码,这是正确的。但是,您可以为 www-data 提供临时密码,并使用命令 ssh-copy 将萨拉米斯证书复制到 www-data。完成此操作后,萨拉米可以登录并挂载为 www-data,无需输入任何密码。(您必须拥有使用 ssh-keygen 构建的证书。)

3)另一种可能的解决方案是在两个服务器之间rsync文件。Rsync 使用与 ssh/sftp/sshfs 相同的安全基础设施,您可以像 2 中那样使用 ssh-copy。通过 rsync,您可以让 www-data 从 salami 获取文件。使用 ssh-copy 让您有机会编写同步脚本,/etc/cron.[dayly|hourly] 中的一行在大多数情况下就足够了。Rsync 很强大,如果萨拉米斯服务器出现任何问题,您的应用程序仍然可以使用您同步的最后一个文件运行,您的应用程序不会因网络而减慢速度,但萨拉米斯中的文件更改之间会有延迟-目录和服务器上。您还可以考虑使用 VCS(例如 bzr),并从存储库中获取文件。这为您提供了对源代码的良好修订控制。