美文网首页阿里云我用 LinuxLinux
解决Apache无法访问Veracrypt挂载卷的问题

解决Apache无法访问Veracrypt挂载卷的问题

作者: 天兵公园 | 来源:发表于2018-02-05 15:55 被阅读35次

    在服务器上运行了一个 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 的挂载工具不支持自动解冻。所以如果需要频繁写入读取最好选择标准或者低频模式,如果只是内网挂载,也不存在流量费用问题,选标准模式就好了。

    相关文章

      网友评论

        本文标题:解决Apache无法访问Veracrypt挂载卷的问题

        本文链接:https://www.haomeiwen.com/subject/gqxizxtx.html