在服务器上运行了一个 NextCloud,系统是 Centos 7,服务器程序使用的 Apache,以 daemon 组 daemon 用户运行着。现在是以 root 用户登录到服务器,执行 Veracrypt 挂载卷命令挂载 HD1。
[root@izj6ca50pk1lwyt73uqjmdz ~] veracrypt hd1
Enter mount directory [default]: /mnt/veracrypt
Enter password for /home/hd1: ****
Enter PIM for /home/hd1:
Enter keyfile [none]:
Protect hidden volume (if any)? (y=Yes/n=No) [No]: no
挂载后,root 用户可以访问 veracrypt 卷中的内容,都没有问题。
现在在 Netxcloud 中增加一个外部存储,设置存储模式为本地,路径为 /mnt/veracrypt,并对指定一些用户组可见。
在 Nextcloud 登录后,发现能列举出加载的这个外部存储,但是无法创建和删除文件,也不能列举子目录。
想来这就是因为 veracrypt 是 root 挂载的,apache 是 daemon:daemon 没有足够的权限,而 veracrypt 的挂载方式不是直接使用 mount,因此也无法传递 umask 参数。
尝试使用 chown 修改 /mnt/vercrypt 为 daemon:daemon 并没有成功。
后来尝试登陆到切换到 daemon 用户去挂载 veracrypt 卷,因为 daemon 是应用程序用户,不能直接登陆,所以先要修改 /etc/passwd:
找到 daemon 用户所在行
daemon:x:2:2:daemon:/home:/bin/bash
保存后退出。
然后 su - 切换到 root 用户,执行 passwd daemon 修改 daemon 用户的密码,这样就可以是用 su - daemon 切换到 daemon 用户了,但是挂载 Veracrypt 卷还是会报 is not in the sudoers file 的错误。
执行 visudo 编辑 /etc/sudoers,追加 daemon ALL=(ALL) ALL。
再次执行 veracrypt hd1 去挂载卷,按上面步骤操作后,成功挂载。
但是这样一来就多了个可以可登陆到服务器的新用户了,可以修改 /etc/ssh/sshd_config ,只允许 root 用户登录:AllowUsers aliyun,安全的前提是你已经禁止了密码模式了,只允许使用密钥模式登录。
另外有一点没有验证,如果直接使用 passwd daemon 修改 daemon 的密码,然后执行 sudo -H -u daemon bash -c 'veracrypt hd1' 能不能直接挂载。
要查看 daemon:daemon 有没有权限对挂载卷进行读写,切换到 /mnt 目录执行 ls -al 看一下就知道了。
[root@izj6ca50pk1lwyt73uqjmdz mnt]# ls -al
total 16
drwxr-xr-x. 4 root root 4096 Feb 2 11:48 .
dr-xr-xr-x. 18 root root 4096 Feb 5 14:44 ..
drwxr-xr-x 2 root root 4096 Jan 31 14:29 oss1
drwx------ 4 daemon daemon 4096 Jan 1 1970 veracrypt
说起这个 OSS 卷,不错这就是 阿里云 OSS,之前 nextcloud 也是不能直接访问,因为也是 root 用户去挂载的,不过 阿里云 OSS mount 工具是可以传递 umask 等参数的。
ossfs YOUR_OSS_NAME /mnt/oss1 -ourl=oss-cn-beijing-internal.aliyuncs.com -ouid=2 -ogid=2 -oumask=000 -o allow_other -odefault_permission=777
对于查看 apache 的 ouid 和 ogid 也很简单,执行 id daemon 就可以了。
[root@izj6ca50pk1lwyt73uqjmdz mnt]# id daemon
uid=2(daemon) gid=2(daemon) groups=2(daemon)
然后遇到了一个坑,我的 OSS 是归档模式,归档模式意味着好写不好读。
比如我用 vim 创建一个 demo.txt 然后写入 Test,再次编辑就会出现 OSS 连接超市的问题,cat 一下也不行(傲娇脸)。
要读取需要手动解冻文件,然后等一分钟后才能读取,OSS 的挂载工具不支持自动解冻。所以如果需要频繁写入读取最好选择标准或者低频模式,如果只是内网挂载,也不存在流量费用问题,选标准模式就好了。