我有一个奇怪的权限情况,我无法解释。 让我解释我的用户和组,然后显示您的文件夹权限。
drwxrwsr-x. 2 jenkinsuser applog 4096 Jul 15 09:56 . drwxrwxr-x. 13 jenkinsuser jenkinsuser 4096 Jul 15 09:40 .. -rw-r--r--. 1 apache applog 750409 Jul 15 09:56 application.log
我有2个用户apache和jenkinsuser。 两者都是名为applog的组。 我有一个具有上面显示的权限的日志文件夹。 该文件夹具有设置的SGID,因此任何新文件都将该组设置为applog。 正如你所看到的,application.log文件的rw-r -r–是为文件设置的,我知道apache用户是唯一可以写入文件的用户。
作为jenkinsuser,我可以根据applog具有只读权限的事实,使用vi / vim打开文件。 当我保存它(例如:在六)内,它说'readonly' option is set (add ! to override) 。 当我强制保存(例如:w!在vi中)时,它会保存下面显示的新权限。
drwxrwsr-x. 2 jenkinsuser applog 4096 Jul 15 11:24 . drwxrwxr-x. 13 jenkinsuser jenkinsuser 4096 Jul 15 09:40 .. -rw-r--r--. 1 jenkinsuser applog 750448 Jul 15 11:24 application.log
所以我的问题是,为什么jenkinsuser强制保存该文件,如果它没有写入权限? 我错过了什么?
vi已经删除了旧文件,并写了一个新的同名文件。 您有权删除旧文件,因为您可以对包含该文件的目录进行写入访问。 要删除文件,可以通过删除对现有文件的引用来更改(写入)目录inode。 当文件的引用计数为零时,文件系统将释放文件的inode和空间。 接下来,通过将新文件添加到目录,再次写入目录。
为了避免发生这种情况,您需要删除目录上的写入权限。
请注意,您也可能在文件和目录上拥有一些ACL,这些ACL覆盖了您在ls -l看到的权限。 看到了. 在列表的每一行权限的权利? 这表明一些ACL是活动的。 要查看它们,请运行getfacl /dir/name 。