$ ls ~yifei/notes/

云时代的个人存储搭建

Posted on:

Last modified:

昨天想用 iPad 上的 GoodReader 看一本书,但是从 iCloud 同步的时候出了些问题,进度始终为零。 由于国内糟糕的网络环境,这种同步失败的问题时有发生。虽然可以直接通过 WiFi 把书从电脑上传 过来,但是因为偶尔需要在另一个 iPad 上查看,为了同步进度,还是最终决定还是自己搭建一套云存储设施。

ftp 与 webdav

ftp 协议有诸多问题,现在用的已经很少了。WebDav 协议基于 HTTP,相比 FTP 有不少有点,可以 参见文章 1。另外不少开源的网盘客户端也支持 webdav。NextCloud 支持 webdav,后面会讲到

sftp 和 sshfs

sftp 则和 ftp 是完全独立的两个东西,虽然最终目的是一样的。好比海豚和鲨鱼都是在海里的生物, 但是前者是哺乳动物,而后者是鱼类。sftp 基于 ssh 协议。

sshfs 相比 sftp 则更近了一步,通过 sftp 把远程的文件系统直接映射到本地,从而无缝衔接。

搭建

sftp 直接基于 linux 的用户和文件权限系统。

  1. 添加相应的用户和分组,以用户名 sftp,分组名 ftpaccess 为例。

    % sudo groupadd ftpaccess % sudo useradd -m sftp -g ftpaccess -s /usr/sbin/nologin % sudo passwd sftp # 更改密码 % sudo mkdir /var/sftp % sudo chown root /var/sftp # 这一步非常坑,切记不可省略,后面讲为什么 % sudo mkdir -p /var/sftp/files % sudo chown sftp:ftpaccess /var/sftp/files

  2. 修改 /etc/ssh/sshd_config 文件

注释掉这一行 Subsystem sftp /usr/lib/openssh/sftp-server

然后在文件的结尾添加

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory /var/sftp  # 这里可以随便指定你想要的顶级目录
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication yes

ssh 的安全配置要求 ChrootDirectory 本身必须是 root 所有的,所以登录的根目录我们是不可写的,但是可以在新建的目录中读写。

  1. 重启 ssh 服务

    % sudo systemctl restart ssh

可以使用客户端连接啦~ 如果需要使用 publickey 登录的话,只需要像普通的用户一样,把文件传到 ~sftp 的对应目录就可以了。

使用 sshfs mount 到本地

% brew install sshfs
% brew cask install osxfuse
% sshfs -o allow_other,defer_permissions -o volname=sftp_files sftp@your.example.com:/files $HOME/sftp_files

私人云盘

owncloud 和 nextcloud 两个有严重的同步问题,放弃这俩了。

考虑一下 syncthing

参考资料

  1. https://stackoverflow.com/questions/11216884/which-file-access-is-the-best-webdav-or-ftp
  2. SSHFS
  3. 搭建 sftp 服务器
  4. sftp 的一个坑
  5. OwnCloud 丢文件的问题
  6. NextCloud 丢文件的问题
  7. https://v2ex.com/t/833084

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.