当前位置: 首页>>技术教程>>正文


如何在NTFS(或FAT32)分区上使用’chmod’?

, , ,

问题描述

我有一个需要在NTFS分区上执行的脚本。脚本的权限设置为600。

我试图通过运行chmod 755 script.sh来修改权限,chmod 755 script.sh不报告故障或任何事情 – 但它也不会更改文件的权限:

$ stat script.sh

  File: `script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

$ chmod 755 script.sh
$ stat script.sh

  File: `script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

正如你所看到的,它保持不变。

最佳解决方法

该模式由分区的挂载选项决定(不能通过chmod更改)。

对于文件上的’755’和目录上的’777’,您可以使用类似

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever

次佳解决方法

相反的是大多数人认为,NTFS是一个POSIX-compatible¹文件系统,并且可以对NTFS使用权限。

要启用此功能,您需要一个“用户映射文件”,或者在安装时只需提供permissions选项(当不需要与Windows兼容时)。这将映射系统上的linux用户与用户标识(如NTFS /Windows)在内部使用它们。

有关一些信息和一些示例,请参阅ntfs-3g manpage。如果您需要更多信息,请参阅ntfs-3g advanced documentation about ownership and permissions

(请注意,这在FAT文件系统上不起作用。)

¹是的,它也可以存储在linux /unix中有效但不在Windows下有效的文件名,支持符号链接&硬链接等。

第三种解决方法

对于NTFS分区,使用fstab中的permissions选项。

首先卸载ntfs分区。

使用blkid标识您的分区UUID

sudo blkid

然后编辑/etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

并为ntfs分区添加或编辑一行

# change the "UUID" to your partition UUID
UUID=12102C02102CEB83 /media/windows ntfs-3g auto,users,permissions 0 0

制作一个安装点(如果需要)

sudo mkdir /media/windows

现在挂载分区

mount /media/windows

我给你的选项auto将在引导时自动挂载分区,users允许用户挂载和挂载。

然后你可以在ntfs分区上使用chown和chmod。

第四种方法

除了在htorque的回答中设置fmask和/或dmask之外,如果你想在驱动器上执行脚本,我还必须设置”exec”挂载选项。

所以这个例子是:

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever

第五种方法

您始终可以显式调用脚本解释器,在这种情况下,不需要执行权限。如果脚本使用bash,可以通过查看脚本的第一行进行验证,只需运行即可

bash script.sh

请注意,该脚本在同一分区上调用其他脚本或二进制文件,这不起作用。还要注意,该策略不适用于二进制文件,而不是用Bash脚本,Perl,Python或类似文件编写的文本脚本文件。

第六种方法

根据NTFS-3G文档的Ownership and Permissions部分,我们可以使用安装选项来控制文件访问和创建。这些组合非常复杂(请参阅那里的两个表格)。此外,我不读,并得到所有的人。例如,我不知道是否在compile-time中选择了POSIX ACL,还是不知道NTFS-3G二进制包中是否选择了POSIX ACL。但是我出来的最好的方法是使用User Mapping文件和一些安装选项来近似Windows和Linux之间文件所有权和权限的可信映射。


警告:这只是在双启动Windows 8和Kubuntu 14.04之间共享NTFS数据分区(Windows上的驱动器D:)的最佳选择。这些说明记录在仔细的回顾中,但未经彻底测试。再次重复整个过程太令人厌倦和乏味。因此,请自行承担风险。但是,如果你这样做,分享你的经验。如果您决定按照说明进行操作,请在实际演示前全面阅读以获得完整的说明。祝你好运!


好吧,你走吧!详细的说明由三部分组成。第1部分应在Windows上执行,而第2部分在Linux上执行。第3部分是测试。

第1部分

NTFS-3G文档的User Mapping部分指定了两个版本来设置Windows和Linux之间的用户映射,一个Windows版本和一个Linux版本。我的经验是,Linux版本错过了。 Linux帐户未映射到我的Windows帐户,但某个未知帐户出现在SID下。结果是一团糟,因为这个未知的帐户拥有我Windows帐户的所有文件的所有权。在这种情况下,除非您拥有管理权限才能恢复您的所有权,否则Windows帐户下的文件将无法访问。但是,即使你在使用,它仍然是一个错误的映射。这意味着,后来在Linux上创建的任何文件都将分配给Windows上的未知帐户,而Windows上的那些文件将分配给Linux上的根(如果我没有记错的话)。所以在Windows上,您需要重新获得所有权,并在Linux上更改所有权。这不是我们所期望的。经过几次无望的尝试来解决这个问题,我放弃了,转向Windows版本。那个工作。从NTFS-3G文档的相关部分摘录的详细说明如下:

  1. 下载usermap工具,将它解压到某处(在我的情况下为驱动器C:),在NTFS分区之外(我的驱动器为D:)更好。

  2. 打开Windows命令行。切换到usermap工具的提取目录tools(默认情况下)。然后运行以下命令:

    C:\tools> mapuser > UserMapping
    

    这会生成一个模板并将其重定向到名为UserMapping的文件。用文本编辑器打开文件,比如记事本,你应该看到以下几行:

    # Generated by usermap for Windows, v 1.1.5
    # For Windows account "Account" in domain "Domain"
    # Replace "user" and "group" hereafter by matching Linux login
    user::SID
    :group:SID
    

    据推测,第一个SID应该是你的用户SID,而第二个是你的组SID。您可以分别通过命令whoami /userwhoami /groups检查它们。

  3. 确保SID正确后,按照注释中的说明进行操作,即将user::SID行中的user更改为用户名,将:group:SID行中的group更改为Linux上的主组名。在Ubuntu上,它们是一样的。此外,在user::SID行的第一个冒号后面添加您的Linux组名称。所以这条线应该看起来像user:group:SID。看来如果不这样做,在Windows上创建的文件将被分配给Linux上的user:root

  4. 保存文件。将它移动到名为.NTFS-3G(如果不存在的话,创建它)在NTFS分区上共享(在我的情况下,驱动器D:)。

  5. 这一步是在第3部分中测试的。在共享NTFS分区上,创建一个新目录和一个新文件。

第2部分

现在启动到Linux。 sudo编辑文件/etc/fstab。将共享NTFS分区的行添加或修改为以下内容:

UUID=...    /data    ntfs    defaults,umask=077,utf8    0    0

关键是设置umask(dmaskfmask也可以工作但未经测试)。选一个你喜欢的umask值,虽然我选了077。看起来没有这个设置,o将为newly-created文件提供完整的权限。

保存文件。现在sudo mount或重新安装(sudo umount然后sudo mount)共享的NTFS分区(在我的情况下是/data):

$ sudo mount /data

第3部分

现在(仍然在Linux上)cd到挂载点(在我的情况下,/data),ls -l那里的文件。检查他们的所有权和权限是否分别与您在UserMapping文件中指定的权限和您在/etc/fstab中设置的umask(权限和umask需要一些补充计算的匹配,请参阅man (1) umask获取更多信息)相匹配。如果他们这样做,恭喜,一半的目标已经实现。否则,可怜你。询问Ubuntu或Windows。

然后创建一个新目录和一个新文件。 ls -l检查他们的所有权和权限。像往常一样,所有权应该是您的用户名和主要组。权限应该与umask匹配。现在重新启动计算机并启动到Windows。在共享的NTFS分区上找到刚在Linux上创建的目录和文件。检查他们的属性,看他们是否被分配到您的Windows帐户。如果是,恭喜,你们都完成了。否则,运气不好。询问Windows或Ubuntu。

EOF

第七种方法

旧线程,我知道,但仍然相关并缺少一个特定的用例提示,它由各种其他论坛/线程上的不同建议组成,并在Ubuntu GNOME 13.04上进行了测试,我需要一个外部驱动器来存放Steam库。

例如,当NTFS分区位于外部USB驱动器上时(这意味着分区在连接时即刻挂载),则可以使用以下方法使udev装入具有执行权限的ntfs分区。

打开终端窗口,然后执行:

$ sudo nano /etc/udev/rules.d/90-usb-disks.rules

然后粘贴这行应该是一个空白/新文件(如果没有,然后退出nano并重新发布命令,但开始文件名称与更高的数字像91 -…):

ENV{ID_FS_TYPE}=="ntfs", ENV{ID_FS_TYPE}="ntfs-3g"

然后保存并关闭。拔下驱动器,然后在终端上执行:

$ sudo service udev restart

接下来,将驱动器重新插入并享受:)

第八种方法

所有步骤:

  1. 安装ntfs-3g

    sudo apt-get install -y ntfs-3g
    
  2. 卸载NTFS分区:

    sudo umount /mnt/windows
    
  3. 使用ntfs-3g.usermap生成UserMapping文件:

    sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFS
    

    要么

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. 重新安装NTFS分区以添加UserMapping文件:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. 更新您的fstab文件:

    sudo vim /etc/fstab
    

    更新安装线:

    1. 备份您当前的安装线!复制该行并在开始时添加#以对其进行评论。

    2. 更改下一个:UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0

    3. 接下来是:UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0(使用ntfs-3g并且只使用default选项)

    它应该看起来像这样:

    #UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0 UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0

  6. 最后,使用fstab重新安装:

    sudo umount /mnt/windows
    sudo mount -a
    

为每个NTFS分区做一次!

使用WINDOWS操作系统警告!

我用Windows 7+检查它,并且权限影响Windows操作系统!我在Windows分区上更改了我的主目录的权限,当我再次使用Windows时,我可以看到用户已损坏!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/473.html,未经允许,请勿转载。