关于目录内 RWX 权限的学习疑问

2018-07-16 19:14:33 +08:00
 momokuny
V 站各位大神好,首先很感谢各位大神百忙抽空看小弟的发帖,小弟目前学习到权限部分遇到疑问了,长话短说吧。

我按照书上的理解,目录的 w 权限是跟目录内文档的变动有关系,比如:移动,删除,建立新的文档,等等。
有一点我就不明白了,比如复制一个目录内的文档到另一个目录内,用 cp 命令,目录的权限没有 w,的情况下照样可以复制里面的文档?我也谷歌百度过了,复制操作是只属于 r 权限,不需要用到 w,但不是说好目录内文档的变更是也关 w 的事吗?到这里就有点乱了。
2182 次点击
所在节点    Linux
18 条回复
qianbiTH
2018-07-16 19:23:35 +08:00
这个写估计不是重写了文件吧,只是重置了索引?非专业人士不负责猜测
qianbiTH
2018-07-16 19:28:02 +08:00
就跟 git 的一些机制类似?求大佬解答。你可以试试移动文件,看是否可行
momokuny
2018-07-16 19:33:39 +08:00
@qianbiTH 恩,谢谢,google 了一堆 copy is only read permission,我感觉我是不是自己把简单的问题复杂化了。
mikeguan
2018-07-16 19:37:55 +08:00
应该是没有权限写入文件到没有 w 权限的目录的 权限对 root 相当于都不生效 你是不是用 root 操作的?
likuku
2018-07-16 19:40:01 +08:00
你源和目标混淆了吧

另外,新创建的目录和文件也都有个默认权限的概念
momokuny
2018-07-16 20:17:18 +08:00
@mikeguan 用账户跟 root 都做了一遍,root 就不用说了,它想干啥都行,登陆其中一个账户做的时候,只是不明白为什么目录不需要 w 权限就可以对里面的文档进行复制,仅仅有 r 权限就可以。
qianbiTH
2018-07-16 20:18:05 +08:00
刚试了一下,我的答案纯属放屁,如果目录只有读权限,被拒绝了。4、5 楼成功
mikeguan
2018-07-16 20:31:25 +08:00
@momokuny 这个和文件系统的存储有关 目录是是占用 block 的 里面存的是目录下所有文件名 一个文件名最长 255 字节 超过一个 block 大小自动扩展
目录的写权限 也就是你可以写东西到这个目录 block 里面(类比这个目录就是一个文件 你可以写这个文件即添加一个文件名 删除一个文件名)
目录的读权限也就是你可以读取目录 block 里面的内容 可以看到目录里面的文件名 具体操作权限还看目录下文件设置的权限
你如果从一个只有 rx 权限的目录里面复制一个文件到另一个目录里面 只有你对文件有权限操作就可以
qianbiTH
2018-07-16 20:50:47 +08:00
我再次用非 root 账户进行了操作,命令确实可以执行,不会报错,但是文件并没有被真正的复制到只有读权限的文件夹中。系统是 ubuntu 16.04.4
qianbiTH
2018-07-16 21:15:15 +08:00
我越来越糊涂了,第一回你说的是往只有 r 权限的目录里面复制一个文件。
第二回好像是从只有 r 权限的目录往外复制文件。
第三回附言是只有执行权限。
likuku
2018-07-16 21:59:39 +08:00
"为什么目录可以只用 excute 权限就对里面的文档进行复制操作"

还是表述很混乱啊...

是把此目录里的文档复制到此目录外面?在此目录之下进行原地文件复制黏贴 /就地生成副本?
在此目录之下将某文档复制黏贴进此目录下的某个子目录?在此目录之下的子目录里进行文件的原地生成副本?

这些状况都是很不同的好嘛。是否能写入某处,只和某处目录本身的权限有关,具备 W 权限即可。
likuku
2018-07-16 22:02:08 +08:00
源目录具备 rx 权限,源文件具备 r 权限,即可满足最低读取源的需求。

目标目录具备 wx 权限,目标文件具备 w 权限 (若覆盖的话),即可满足最低写入需求。
momokuny
2018-07-16 22:09:06 +08:00
我统一回复一下回答的各位吧,真的真的很谢谢大家的回复,我已经感受到 V 站满满的热情了。果然光靠文字是很难将东西讲清楚,也许我的文字功底不好,也许我没有把思路理顺再问问题,也许我今天有点不在状态,总之种种原因吧,我直觉告诉我,其实这问题应该没有想象中那么复杂的,V 站发帖不允许发图片,那我就直接把《鸟哥 linux 私房菜》里的一段话全部完整复制过来,问题应该就清晰了,我也知道贴这么一大段话,大家会没耐心看,那我告诉大家直接看表格的最后一行就可以了,那一行就是我的问题了,也就是为什么 /dir1 将 file1 复制到 /dir2 的时候只需要,只需要用到“ x ”权限呢?而不需要也用上‘ w ’权限呢?好吧,以下是完全是书里的内容:

/*

·使用者操作功能與權限
剛剛講這樣如果你還是搞不懂~沒關係,我們來處理個特殊的案例!假設兩個檔名,分別是底下這樣:

/dir1/file1
/dir2
假設你現在在系統使用 dmtsai 這個帳號,那麼這個帳號針對 /dir1, /dir1/file1, /dir2 這三個檔名來說,分別需要『哪些最小的權限』才能達成各項任務? 鳥哥彙整如下,如果你看得懂,恭喜你,如果妳看不懂~沒關係~未來再來繼續學!

操作動作 /dir1 /dir1/file1 /dir2 重點
讀取 file1 內容 x r - 要能夠進入 /dir1 才能讀到裡面的文件資料!
修改 file1 內容 x rw - 能夠進入 /dir1 且修改 file1 才行!
執行 file1 內容 x rx - 能夠進入 /dir1 且 file1 能運作才行!
刪除 file1 檔案 wx - - 能夠進入 /dir1 具有目錄修改的權限即可!
將 file1 複製到 /dir2 x r wx 要能夠讀 file1 且能夠修改 /dir2 內的資料

你可能會問,上面的表格當中,很多時候 /dir1 都不必有 r 耶!為啥?我們知道 /dir1 是個目錄,也是個抽屜!那個抽屜的 r 代表『這個抽屜裡面有燈光』, 所以你能看到的抽屜內的所有資料夾名稱 (非內容)。但你已經知道裡面的資料夾放在哪個地方,那,有沒有燈光有差嘛?你還是可以摸黑拿到該資料夾的!對吧! 因此,上面很多動作中,你只要具有 x 即可! r 是非必備的!只是,沒有 r 的話,使用 [tab] 時,他就無法自動幫你補齊檔名了!這樣理解乎?

*/
qianbiTH
2018-07-16 23:25:45 +08:00
最后一段做了解释,作为仅有执行权限的目录,系统并不能读取然后知道里面的文件名,它对系统就是个黑盒子,但是由于你事先知道了该目录下存在 file1,即你已经知道了路径,而该文件你有读权限,且是对该文件进行复制操作,显然可以成功。如果你复制该目录,应该会提示失败。
我知道那个箱子就在那里,箱子不透明,但是我知道里面有一个唯一的球,可能还有三角板,还有把尺(但是三角形和长条形的东西多了去了),那我就用手放进去摸一摸,找到一样的。
win 的权限管理不一样,但感觉类似隐藏的文件夹,看不到,但是我知道路径的话可以打开。

最后是我自己的理解,不用过于纠结 711 还是 755。这个读的权限对目录来说仅作用于目录内的文件和目录的名称。对文件而言仅作用于文件内的内容。也就是说对于一个只读的目录我可以修改目录名,对于一个只读的文件我可以修改文件名。
momokuny
2018-07-17 00:11:29 +08:00
@qianbiTH 谢谢,解释得很生动形象,该文件有读取权限,对它进行复制操作显然可以成功,当初我就觉得这个目录一定要有‘ w ’,( d-wx------),才可以对里面的文档进行复制操作,因为目录的这个 w 权限涉及太多关于目录下文档的一些操作,比如新建文档,删除文档,更名文档,诸如此类的操作,所以我才觉得复制文档这个操作也是属于目录的‘ w ’的权限,所以才感到奇怪为什么目录没有加‘ w ’也可以复制它里头的文档呢?这样的想法,现在,感觉还好,似乎理解了,当初只是对目录的这个 w 能干些什么,而不理解。
qianbiTH
2018-07-17 00:15:34 +08:00
我的解释可能也不是很对,可能还与文件类型有关。
更复杂的情况暂时不想试了,还有实际执行中会提权什么的(是么?)
qianbiTH
2018-07-17 00:52:52 +08:00
@momokuny 别纠结了,可能涉及到规定和最开始的设计。一米为什么那么长啊,一千克为什么那么重啊。。。或者以后会有答案,我搜的一哥们的:
flynaj
2018-07-18 12:13:10 +08:00
账户可能有特权,例如 root。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/471358

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX