![将 NTFS 文件设置为仅从 Linux 读取](https://linux22.com/image/120092/%E5%B0%86%20NTFS%20%E6%96%87%E4%BB%B6%E8%AE%BE%E7%BD%AE%E4%B8%BA%E4%BB%85%E4%BB%8E%20Linux%20%E8%AF%BB%E5%8F%96.png)
我正在尝试将文件夹及其文件设置为只读,这样我就不会意外删除它。
我跑了
chmod -R 444 myfolder/
但是当我右键单击该文件夹并转到“属性”>“权限”时,它仍然显示为读取和写入。我也通过修改文件进行测试,修改成功。
此外,当我尝试将文件管理器 GUI 中的权限更改为只读时,它会立即翻转回读取和写入。
我的印象是 4 表示只读访问权限。它是否正确?
编辑:
我认为我的问题与驱动器的安装方式有关。这是 fstab 条目。
UUID=6F7C5E910607D747 /media/storage1 ntfs-3g uid=1000,gid=1000,umask=0022,auto,rw 0 0
答案1
笔记
这篇文章是在 OP 提供他在 Linux 机器上使用 Windows 文件系统 (NTFS) 的附加信息之前发布的。我的印象是他使用的是本地 Linux 文件系统。
您需要为所有者设置读、写和可执行标志,并为组设置读、可执行标志我的目录。进入该文件夹需要可执行标志。如果没有它,当您尝试cd myfolder
作为属于该组或其他组的用户时,您会收到“权限被拒绝”的信息。
chmod 755 myfolder
是向该组和其他人授予访问权限,或者
chmod 750 myfolder
只是向该组授予访问权限而将其他人拒之门外。
将所有权设置为根和小组用户:
sudo chown root:users myfolder
现在,只有 root 可以在 myfolder 中创建新文件,即。sudo touch mytest
新文件获得所有权root
和组root
。
强制新文件获取组用户,您需要将 SGID 位设置为 myfolder。
这可以通过两种方式完成,其结果是相同的
sudo chmod +s myfolder
(添加 sgid 位)或
sudo chmod 2755 myfolder
(相同 + 用户、组、其他)
做 als -l
应该显示这样的内容:
drwsr-sr-x myfolder # last x optional depending on your others setting
如果你现在sudo touch mytest2
在myfolder
,mytest2 属于,且权限为 644 的root
组users
现有文件位于我的文件夹会被这样对待:
cd myfolder
sudo chown root:users *
sudo chmod 644 *
1 = execute
2 = write
4 = read
读 + 写 = 4 + 2 = 6
PS:root可以替换为任意用户,任意组的用户
更新 应@Rastapopoulos 的要求进一步解释
假设 myfolder 属于汤姆
执行此操作时,chmod -R 444 myfolder/
您将文件夹设置为用户(tom)、组、其他人只读以及其中的所有文件,因此没有人能够进入该文件夹,甚至是tom(root除外),因为它缺少可执行标志。
做chmod 644 myfolder
tom的时候还是进不了文件夹。正确的方法是为 tom 设置读、写、可执行标志,为组/其他设置读可执行标志。
(executable flag = 1)
IE。chmod 755 myfolder
(仅设置我的文件夹的权限,而不是文件的权限)
仅更改以下文件的权限我的文件夹但不是 myfolder 的权限,你会这样做:
chmod 444 myfolder/*
但是您可能仍然想以所有者/汤姆的身份编辑/写入您的文件,所以您宁愿做
chmod 644 myfolder/* (or 640)
答案2
您的更新中的条目/etc/fstab
在这个问题中相当重要:
UUID=6F7C5E910607D747 /media/storage1 ntfs-3g uid=1000,gid=1000,umask=0022,auto,rw 0 0
这意味着它是一个 NTFS 文件系统,并且uid
、gid
和umask
选项基本上会对该磁盘上的所有 Linux 可见权限进行硬编码,独立于真正的 NTFS ACL。本质上,这些挂载选项将赋予一个用户对该文件系统及其所有文件的完全访问权限。普通命令无法更改挂载选项分配的权限。
通过一些一次性工作,您可以改用真正的 NTFS 文件和目录权限。
首先,找到该UUID对应的设备名称:
sudo blkid | grep 6F7C5E910607D747 | cut -d : -f 1
然后卸载该文件系统,然后运行ntfsusermap /dev/<device w/the NTFS filesystem you unmounted>
.它将列出该文件系统上的一些文件,并要求您识别最适合拥有该文件的 Windows 用户/组的用户或组。一旦识别出足够的用户/组,该命令将UserMapping
在当前目录中生成一个文件。 (运行示例:http://jp-andre.pagesperso-orange.fr/ntfsusermap.html)
现在再次挂载 NTFS 文件系统,创建一个与其名称完全相同的目录/media/storage1/.NTFS-3G
,并将UserMapping
文件放入该目录中。再次卸载 NTFS 文件系统,并删除uid
、gid
和umask
选项。
第三次挂载 NTFS 文件系统,现在文件权限将反映真实的 NTFS ACL。现在,您可以使用常用的 Linux 命令修改文件和目录权限,并且当您在 Windows 上使用该文件系统时,这些更改也将有效。
答案3
您可以使用该chattr +i <file>
命令使文件不可变。我还没有测试过这个,但我很确定当底层文件系统是 ntfs 时它会工作。
然后您必须执行chattr -i <file>
以删除不可变标志。
更新:正如评论中所指出的,这只适用于 ext* 文件系统。