“chmod g+w” 不起作用:使用 fstab 中的 file_mode 和 dir_mode 将 NAS 上的权限添加到组(Ubuntu 16.04.4 LTS)

“chmod g+w” 不起作用:使用 fstab 中的 file_mode 和 dir_mode 将 NAS 上的权限添加到组(Ubuntu 16.04.4 LTS)

背景

我是一个 PLEX 媒体服务器 (PMS) 的忠实用户。我在卧室的 Mac Mini 上运行 PMS 和 uTorrent。uTorrent 将媒体从互联网下载到我家局域网上的 2Tb WDMyCloud NAS (NAS),然后 PMS 将媒体从 NAS 流式传输到我家局域网和互联网上的客户端。一切都运行良好。

我想减少噪音,增加额外的存储空间,并安排好东西,以减少能源消耗(Raspberry PI 3 不够用)。所以我回收了一台较旧的(但还不算旧)i5 SONY Vaio 笔记本电脑(“SONY”)和一个 1.5Tb USB 硬盘。

所以现在我正在使用:

  1. SONY 运行 Ubuntu Core 16.04.4 LTS,截至 2018 年 3 月 2 日已全面更新升级,具体如下:

    stefano@SONY:/$ uname -a
    Linux SONY 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    

它无需任何 GUI 即可运行。我根据需要通过有线 LAN(无 wifi)ssh 进入它。

  1. 我的 2Tb WDMyCloud NAS,运行 Debian 如下:

    WDMyCloud:/dev# uname -a
    Linux WDMyCloud 3.2.26 #1 SMP Thu Jul 9 11:14:15 PDT 2015 wd-2.4-rel armv7l GNU/Linux
    
  2. 我更老的 1.5Tb USB 硬盘显示为“Story_1_5Tb_2”(“STORY”)。它插入 NAS,因此显示如下:

    WDMyCloud:/dev# lsblk -f        
    NAME    FSTYPE            LABEL       MOUNTPOINT
    sda                                   
    |-sda1  linux_raid_member             
    | `-md1 ext3                          /
    |-sda2  linux_raid_member             
    | `-md1 ext3                          /
    |-sda3  swap                          [SWAP]
    |-sda4  ext4                          /DataVolume
    |-sda5                                
    |-sda6                                
    |-sda7                                
    `-sda8                                
    sdb                                   
    `-sdb1  ntfs              Story 1.5Tb /var/media/Story_1_5Tb_2
    

现在的情况

在 SONY 上存在以下用户:

stefano@SONY:/home/plex$ cut -d: -f1 /etc/passwd
root
daemon
[...]
nobody
[...]
stefano
plex
debian-transmission

这些用户已被添加到该组中mediaserver

stefano@SONY:/home/plex$ getent group mediaserver | awk -F: '{print $4}'
stefano,plex,debian-transmission,daemon,nobody

NAS(WDMyDrive)上的本机存储和 1.5Tb USB 硬盘(Story_1_5Tb_2)已按如下方式安装:

stefano@SONY:/home/plex$ ls -l
total 0
drwxr-xr-x 2 plex mediaserver 0 Mar  2 12:00 story
drwxr-xr-x 2 plex mediaserver 0 Mar  2 10:50 WDMyCloud

stefano@SONY:/home/plex$ ls -l story
total 0
drwxr-xr-x 2 plex mediaserver 0 Mar  1 13:40 Shared [A]
drwxr-xr-x 2 plex mediaserver 0 Mar  1 13:40 Shared [B]
drwxr-xr-x 2 plex mediaserver 0 Feb 25 23:02 System Volume Information
-rwxr-xr-x 1 plex mediaserver 0 Feb 28 06:49 temp.ts
drwxr-xr-x 2 plex mediaserver 0 Mar  2 09:49 Shared [C]
drwxr-xr-x 2 plex mediaserver 0 Mar  1 18:19 Shared [D]

stefano@SONY:/home/plex$ ls -l WDMyCloud
total 0
drwxr-xr-x 2 plex mediaserver 0 Feb 24 09:19 Shared [E]
drwxr-xr-x 2 plex mediaserver 0 Feb 21 12:32 Shared [F]
drwxr-xr-x 2 plex mediaserver 0 Feb 21 12:29 Shared [G]
drwxr-xr-x 2 plex mediaserver 0 Nov 20  2016 Shared [H]
[other shares]

SONY 的外观/etc/fstab如下:

  GNU nano 2.5.3              File: /etc/fstab                                  

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sdb1 during installation
UUID=6e54f9e7-5579-437b-9e7d-5f76b3fe146e /               ext4    errors=remount-ro 0       1
# swap was on /dev/sdb5 during installation
UUID=59f57e49-82e9-4be3-b53a-1a65c0e771ae none            swap    sw              0       0


# These are the mounts needed to let PLEX find the media shared in WDMyCloud and Story_1.5Tb
#
//WDMyCloud/Public /home/plex/WDMyCloud cifs _netdev,uid=plex,gid=mediaserver,rw,guest 0
#
//WDMyCloud/Story_1_5Tb_2 /home/plex/story cifs _netdev,uid=plex,gid=mediaserver,rw,guest 0
  • 我分配了股份所有权uid=plex这样 PMS 就可以在 NAS 和 STORY 上运行
  • 允许gid=mediaserver这样stefano,plex,debian-transmission,daemon,nobody也可以运行
  • 选择指定的原因相同rw(读写)作为挂载选项

WDMyCloud 共享(安装在 中/home/plex/WDMyCloud)对应于PublicNAS 上的一个文件夹,如下所示:

WDMyCloud:/DataVolume/shares# ls -l
total 32
drwxrwxrwx+ 12 root share 4096 Mar  2 10:50 Public
drwxrwxrwx+  2 root share 4096 Mar  8  2017 SmartWare
drwxrwxrwx+  2 root share 4096 Mar  2 10:39 Stefano
lrwxrwxrwx   1 root share    24 Mar  2 10:43 Story_1_5Tb_2 -> /var/media/Story_1_5Tb_2
drwxrwxrwx+  2 root share 4096 Mar  8  2017 TimeMachineBackup

什么有效

  1. 轻如羽毛,Ubuntu 核心在我 4 岁的 SONY i5 上像火箭一样飞行。
  2. PMS 运行在一个毫无必要的操作系统上,转码和流传输非常顺畅。它无缝识别网络共享(NAS 和 STORY)并能够对其进行操作。在需要时,无论我从哪里访问其 Web 界面,它都可以移动、添加和删除文件。
  3. 网络也很棒,PMS 可以传输到互联网和我家 LAN 之外。
  4. 安装 Transmission 后,守护程序会在启动时启动,并且可以访问 Web 界面:我可以从 Web 界面加载种子和磁力链接。当我加载它们时,Transmission 会访问互联网并尝试下载。

很好,但是...

什么不起作用

不知为何,我无法让 Transmission 撰写故事。

...所以:

  1. Trasmission 守护进程启动
  2. 可以从家庭局域网内访问 Web 界面(暂时不需要打开路由器上的其他门),并且
  3. 我可以添加种子,但是...

...种子无法下载,因为“没有权限“。

显然,用户debian-transmission(我认为他就是那个人)无权在故事上写作。

我尝试过

  1. chmod Symbolic --> 无济于事

    plex@SONY:/home/plex$ ls -l
    total 0
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 12:00 story
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 10:50 WDMyCloud
    
    plex@SONY:/home/plex$ ls -l /home/plex/story
    total 0
    drwxr-xr-x 2 plex mediaserver 0 Mar  1 13:40 Shared [A]
    drwxr-xr-x 2 plex mediaserver 0 Mar  1 13:40 Shared [B]
    drwxr-xr-x 2 plex mediaserver 0 Feb 25 23:02 System Volume Information
    -rwxr-xr-x 1 plex mediaserver 0 Feb 28 06:49 temp.ts
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 09:49 Shared [C]
    drwxr-xr-x 2 plex mediaserver 0 Mar  1 18:19 Shared [D]
    
    plex@SONY:/home/plex$ sudo chmod -R g+w /home/plex/story
    [sudo] password for plex: 
    
    plex@SONY:/home/plex$ ls -l
    total 0
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 12:00 story
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 10:50 WDMyCloud
    
    plex@SONY:/home/plex$ ls -l /home/plex/story
    total 0
    drwxr-xr-x 2 plex mediaserver 0 Mar  1 13:40 Shared [A]
    drwxr-xr-x 2 plex mediaserver 0 Mar  1 13:40 Shared [B]
    drwxr-xr-x 2 plex mediaserver 0 Feb 25 23:02 System Volume Information
    -rwxr-xr-x 1 plex mediaserver 0 Feb 28 06:49 temp.ts
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 09:49 Shared [C]
    drwxr-xr-x 2 plex mediaserver 0 Mar  1 18:19 Shared [D]
    
  2. chmod Absolute --> 无济于事

    plex@SONY:/home/plex$ sudo chmod -R 0770 /home/plex/story
    
    plex@SONY:/home/plex$ ls -l
    total 0
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 12:00 story
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 10:50 WDMyCloud
    
  3. 我甚至尝试设置 Setuid - 我想如果 Transmission 可以读取和执行 STORY 上的文件,那么如果文件被赋予所有者权限,它也可以写入和删除它。当然,这是一个很渺茫的尝试...它不起作用

    plex@SONY:/home/plex$ sudo chmod -R u+s /home/plex/story
    
    plex@SONY:/home/plex$ ls -l
    total 0
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 12:00 story
    drwxr-xr-x 2 plex mediaserver 0 Mar  2 10:50 WDMyCloud
    
  4. 然后我读到这可能是ntfs 文件系统使用 cifs 安装的 STORY。据我了解,Linux 通常只能从 ntfs 文件系统读取,并且需要 ntfs-3g。

另一个可能性很小,因为我要么可以在 ntfs 文件系统上写入,要么不能。在我的例子中uid=plex可以写入,但 的成员gid=mediaserver不能:这很奇怪。

但我Story_1_5Tb_2删除/etc/fstab尝试过ntfs-3g--> 无济于事。

plex@SONY:/home/plex/story$ sudo ntfs-3g //WDMyCloud/Story_1_5Tb_2 /home/plex/story
[sudo] password for plex: 
ntfs-3g: Failed to access volume '//WDMyCloud/Story_1_5Tb_2': No such file or directory

ntfs-3g 2015.3.14AR.1 integrated FUSE 28 - Third Generation NTFS Driver
        Configuration type 7, XATTRS are on, POSIX ACLS are on

Copyright (C) 2005-2007 Yura Pakhuchiy
Copyright (C) 2006-2009 Szabolcs Szakacsits
Copyright (C) 2007-2015 Jean-Pierre Andre
Copyright (C) 2009 Erik Larsson

Usage:    ntfs-3g [-o option[,...]] <device|image_file> <mount_point>

Options:  ro (read-only mount), windows_names, uid=, gid=,
          umask=, fmask=, dmask=, streams_interface=.
          Please see the details in the manual (type: man ntfs-3g).

Example: ntfs-3g /dev/sda1 /mnt/windows

News, support and information:  http://tuxera.com

由于位置没有改变,也许 rtfs-3g 无法识别网络挂载?

为什么 chmod 不起作用?...并且为什么安装-o gid=mediaserver,rw也不起作用?

STORY 驱动器是一个 USB 硬盘,采用 ntfs 格式并插入 NAS。我可以访问它,并且uid=plex作为它的所有者,我可以拥有一切:读取、执行和写入。一切都通过有线(电缆,而不是 wifi)局域网连接。我真的需要能够允许 Transmission(“uid=debian-transmission”)在 STORY 驱动器上写入。

问题是,安装在我卧室的 Mac Mini 上的 uTorrent 仍然可以访问 STORY - 为什么 SONY 上的 Transmission 不行?我做错了什么?

答案1

我改变了我的等/fstab这样它就可以按如下方式挂载网络共享:

//WDMyCloud/Story_1_5Tb_2 /home/plex/story cifs _netdev,guest,uid=plex,gid=mediaserver,rw,iocharset=utf8,file_mode=0770,dir_mode=0770 0 0

具体来说,我在字符串中添加了以下选项:

,iocharset=utf8,file_mode=0770,dir_mode=0770,

这为“uid=mediaserver”组的成员提供了对网络共享的完全读取、写入和执行权限。“Uid=plex”在修改之前就已经拥有了所有这些权限;我选择根本不向“其他”用户授予任何权限。

现在,如果我 ls -l 安装 STORY 的文件夹,我会得到:

drwxrwx--- 2 plex mediaserver 0 Mar 3 09:53 story

因此,Transmission(“uid=mediaserver”组的成员)成功保存了其下载内容:圆满结局!

现在,我明白了这些选项的作用(“绝对”值与修改模式,这使得整个事情几乎不言自明),我不明白为什么我之前所做的(设置uid和gid)不够/不正确,也不明白为什么执行修改模式具有 sudo 权限无法解决问题。实际上,此选项与 chmode 的相似性使它看起来像某种修改模式在挂载时执行,那么为什么修改模式执行完之后没解决?

相关内容