如果我这样做:
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
为什么许可被拒绝?
答案 0 :(得分:3)
对于为什么 jenkins用户无法删除,jenkins用户需要对您要删除的文件的父文件夹具有写权限。这是因为您实际上是从父文件夹中删除目录条目。
通常,在大多数文件系统上,删除文件需要写入 父目录的权限(并按顺序执行权限) 首先进入目录)。 (注意,令人困惑 对于初学者来说,文件本身的权限是无关紧要的。然而, GNU rm要求确认是否有写保护文件 删除,除非使用-f选项。)
所以试试跑......
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/