无法访问我 5 分钟前刚进入的目录

无法访问我 5 分钟前刚进入的目录

我使用的是 Linux/Debian。在下面的一系列命令中,我位于目录中temp_dir4。我将 Google 存储桶安装到该目录,然后更改了权限,否则当我运行时,我会收到权限被拒绝的错误ls

kylefoley@kfoley76:/mnt/disks/temp_dir4$ sudo -i chmod o+rx -R /mnt/disks/temp_dir4
kylefoley@kfoley76:/mnt/disks/temp_dir4$ sudo gcsfuse deduction1 /mnt/disks/temp_dir4
Using mount point: /mnt/disks/temp_dir4
Opening GCS connection...
Opening bucket...
Mounting file system...
File system has been successfully mounted.
kylefoley@kfoley76:/mnt/disks/temp_dir4$ ls

接下来,我在另一个目录上运行了一个程序,这是一个 Python 程序,它只会读取目录中的文件。这个程序是:

lst1 = os.listdir('/mnt/disks/temp_dir4/')
print (lst1)

我收到以下错误:

File "fix_mistakes.py", line 1733, in <module>
    temp17()
  File "fix_mistakes.py", line 1729, in temp17
    lst1 = os.listdir('/mnt/disks/temp_dir4/')
PermissionError: [Errno 13] Permission denied: '/mnt/disks/temp_dir4/'

然后我尝试返回该目录并更改权限,但是却无法做到:

kylefoley@kfoley76:/mnt/disks$ sudo -i chmod o+rx -R /mnt/disks/temp_dir4
kylefoley@kfoley76:/mnt/disks$ cd temp_dir4
-bash: cd: temp_dir4: Permission denied

kylefoley@kfoley76:/mnt/disks$ sudo -i chmod a+w /mnt/disks/temp_dir4
kylefoley@kfoley76:/mnt/disks$ cd temp_dir4
-bash: cd: temp_dir4: Permission denied

另外,我需要更改 temp_dir4 的权限,以便当我运行该 python 程序时不会遇到另一个权限被拒绝错误。

答案1

我没有经验gcsfuse 根本但我知道一些一般的事实:

  1. 在目录上挂载任何内容都不会影响已经使用该目录的程序。您ls从 shell 继承了其工作目录,这是不是已安装的文件系统。但是,如果您执行了ls "$PWD"(相当于ls /mnt/disks/temp_dir4)或cd "$PWD",那么您可能会命中,Permission denied因为现在/mnt/disks/temp_dir4指的是已安装的文件系统。

  2. gcsfuse用途保险丝, 用户空间中的文件系统。如果您以 方式挂载,root则它将适用于root;除非您使用allow_other(请参阅)。这是正常的chownchmod不适用于 FUSE。工具的文档内容如下:

    如果您知道自己在做什么,您可以使用allow_otherfuse 支持的 mount 选项以及gcsfuse 支持的--uid和标志来覆盖这些行为。请注意,这可能会带来安全隐患!--gid

    要了解安全隐患,请阅读这个答案

    示例命令:

    sudo mount -t gcsfuse -o rw,allow_other,uid=1001,gid=1001 deduction1 /mnt/disks/temp_dir4
    

    其中-t gcsfuse告诉mount使用mount.gcsfuse。您原来的命令作为gcsfuse可执行文件只是一个方便的替代方法(虽然我不确定它是否允许您传递allow_other;它应该)。

    但是,如果要仅为当前用户挂载文件系统,则以当前用户身份挂载就足够了(而且更安全!)(无需)sudo。在用户空间是允许普通用户安装它。已经提及的文档状态:

    重要提示:您应该gcsfuse以使用文件系统的用户身份运行,而不是以 root 身份运行。同样,目录也应该归该用户所有。请勿使用sudo上述任一步骤,否则您将面临权限问题。

    因此,卸载您挂载的文件系统root(如果仍然挂载):

    sudo fusermount -u /mnt/disks/temp_dir4
    

    然后只需将其作为您的用户安装即可:

    gcsfuse deduction1 /mnt/disks/temp_dir4
    

    如果成功,那么您的用户将能够使用该文件系统。

相关内容