2015-08-04 3 views
2

Если я:Почему этот пользователь не может удалить этот файл?

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

Я вижу:

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

Если я Судо к корню, а затем су Дженкинс, я должен быть в состоянии удалить это, да?

Другая важная информация о каталоге и его родителя:

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 : 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

может быть, он в директории, в которой вы не можете получить доступ? – fedorqui

+0

Если я su, чтобы стать пользователем jenkins, а затем я начинаю набирать «kill-all-sa», а затем я нажимаю кнопку TAB для автозаполнения, оболочка правильно autocompletes имя команды.Это не должно быть возможным, если пользователь jenkins не имеет доступа к каталогу, в котором живет сценарий kill-all-sales-apps. – lars

+0

Уверен, у jenkins есть разрешение на просмотр папки, но имеет ли он разрешение на запись? Разрешение на создание и удаление файлов следует за каталогом, а не с файлом. – trentcl

ответ

3

Что касается Почему пользователь jenkins не может удалить, пользователю jenkins нужны права на запись в родительскую папку файла, который вы хотите удалить. Это связано с тем, что вы фактически удаляете записи каталога из родительской папки.

Обычно, на большинстве файловых систем, удаление файла требуется написать разрешения на родительском каталоге (и разрешения на выполнение, чтобы , чтобы войти в каталог в первую очередь). (Обратите внимание, что, смутно для начинающих, разрешения на сам файл не имеет значения. Однако, GNU гт запрашивает подтверждение, если защищенный от записи файл должен быть удален, если не используется опция -f.)

Source: Wikipedia - Rm_(Unix)

Так попробуйте запустить ...

ls -ld /usr/local/bin 

И убедитесь, что пользователь Дженкинс разрешения на запись в/USR/местные/бен

Другой способ сделать это - изменить sudoers, чтобы дать jenkins пользователю sudo разрешения для rm только этого файла через sudo. Вот пример, дающий пользователю joe явное разрешение sudo rm на файл /usr/local/src/noperms/hi.txt из каталога, в котором у него нет прав на запись. Но ограничение его от удаления чего-либо еще в этом каталоге.

Например:

[[email protected] ~]# mkdir -p /usr/local/src/noperms 
[[email protected] ~]# chmod -R 455 /usr/local/src/noperms 
[[email protected] ~]# touch /usr/local/src/noperms/hi.txt 
[[email protected] ~]# echo "hi" >> /usr/local/src/noperms/hi.txt 
[[email protected] ~]# chmod 455 /usr/local/src/noperms/hi.txt 
[[email protected] ~]# su - joe 
[[email protected] ~]$ cat /usr/local/src/noperms/hi.txt 
hi 
[[email protected] ~]$ 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 
[[email protected] ~]$ exit 
[[email protected] ~]# visudo 
[[email protected] ~]# 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. 
[[email protected] ~]# su - joe 
[[email protected] ~]$ sudo /bin/rm /usr/local/src/noperms/hi.txt 
[[email protected] ~]$ exit 
[[email protected] ~]# ls -al /usr/local/src/noperms/hi.txt 
ls: cannot access /usr/local/src/noperms/hi.txt: No such file or directory 
[[email protected] ~]# ls -al /usr/local/src/noperms/ 
+4

Хотя вы можете дать jenkins разрешение на запись в/usr/local/bin, это похоже на плохую идею. – Joshua

+0

@ Joshua Я согласен. Добавлена ​​альтернатива для этого через sudo, но ограничение доступа пользователя jenkins к простому удалению одного файла. –

Смежные вопросы