为什么这个用户不能删除这个文件?

时间:2015-08-04 13:32:53

标签: linux permissions

如果我这样做:

ls -al /usr/local/bin/kill-all-sales-apps

我明白了:

-r-xr-xr--  1 jenkins root   68 Aug  4 12:10 kill-all-sales-apps

如果我sudo to root然后su到jenkins,我应该可以删除它,是吗?

有关目录及其父目录的其他相关信息:

drwxr-xr-x  2 root    root 4096 Aug  4 12:11 .
drwxr-xr-x 10 root    root 4096 May  7 17:20 ..

如果我这样做:

groups jenkins

然后我看到用户“jenkins”已添加到“root”组:

jenkins : jenkins root run-server-software

但如果我:

 rm /usr/local/bin/kill-all-sales-apps

我明白了:

rm: remove write-protected regular file ‘/usr/local/bin/kill-all-sales-apps’? y
rm: cannot remove ‘/usr/local/bin/kill-all-sales-apps’: Permission denied

为什么许可被拒绝?

1 个答案:

答案 0 :(得分:3)

对于为什么 jenkins用户无法删除,jenkins用户需要对您要删除的文件的父文件夹具有写权限。这是因为您实际上是从父文件夹中删除目录条目。

  

通常,在大多数文件系统上,删除文件需要写入   父目录的权限(并按顺序执行权限)   首先进入目录)。 (注意,令人困惑   对于初学者来说,文件本身的权限是无关紧要的。然而,   GNU rm要求确认是否有写保护文件   删除,除非使用-f选项。)

Source: Wikipedia - Rm_(Unix)

所以试试跑......

ls -ld /usr/local/bin

确保jenkins用户对/ usr / local / bin

具有写权限

另一种方法是修改sudoers以通过sudo仅为该文件提供jenkins用户sudo权限。这是一个示例,为用户提供 joe 从他没有写入权限的目录中对文件/usr/local/src/noperms/hi.txt进行sudo rm的显式权限。但限制他删除该目录中的任何其他内容。

例如:

[root@joeyoung.io ~]# mkdir -p /usr/local/src/noperms
[root@joeyoung.io ~]# chmod -R 455 /usr/local/src/noperms
[root@joeyoung.io ~]# touch /usr/local/src/noperms/hi.txt
[root@joeyoung.io ~]# echo "hi" >> /usr/local/src/noperms/hi.txt
[root@joeyoung.io ~]# chmod 455 /usr/local/src/noperms/hi.txt
[root@joeyoung.io ~]# su - joe
[joe@joeyoung.io ~]$ cat /usr/local/src/noperms/hi.txt
hi
[joe@joeyoung.io ~]$ rm /usr/local/src/noperms/hi.txt
rm: remove write-protected regular file `/usr/local/src/noperms/hi.txt'? y
rm: cannot remove `/usr/local/src/noperms/hi.txt': Permission denied
[joe@joeyoung.io ~]$ exit
[root@joeyoung.io ~]# visudo
[root@joeyoung.io ~]# diff -Nur /tmp/sudoers.orig /etc/sudoers
--- /tmp/sudoers.orig   2015-08-04 17:17:24.020781442 +0200
+++ /etc/sudoers        2015-08-04 17:24:21.258274163 +0200
@@ -101,6 +101,7 @@
 ##
 ## Allow root to run any commands anywhere
 root            ALL=(ALL)       ALL
+joe        ALL=(root)      NOPASSWD: /bin/rm /usr/local/src/noperms/hi.txt

 ## Allows members of the 'sys' group to run networking, software,
 ## service management apps and more.
[root@joeyoung.io ~]# su - joe
[joe@joeyoung.io ~]$ sudo /bin/rm /usr/local/src/noperms/hi.txt
[joe@joeyoung.io ~]$ exit
[root@joeyoung.io ~]# ls -al /usr/local/src/noperms/hi.txt
ls: cannot access /usr/local/src/noperms/hi.txt: No such file or directory
[root@joeyoung.io ~]# ls -al /usr/local/src/noperms/