3

Как вы можете видеть ниже, пользователь root не может удалить каталог myapp, но может записывать и удалять файлы в этом каталоге. Файловая система - ext4. Это проблема файловой системы? У вас есть идеи по этому поводу?

root@vm4923:/opt/tomcat/webapps# ls -l | grep myapp
drwxr-xr-x  2 root root     4096 Feb 17 14:30 myapp
-rw-r--r--  1 root root 17544487 Dec 18 12:59 myapp.war

root@vm4923:/opt/tomcat/webapps# rm -rf myapp
rm: cannot remove 'myapp': Permission denied

root@vm4923:/opt/tomcat/webapps# sudo rm -rf myapp
rm: cannot remove 'myapp': Permission denied

root@vm4923:/opt/tomcat/webapps# ls -l myapp/
total 0

root@vm4923:/opt/tomcat/webapps# echo "jsdkfjslkdj" > myapp/testfile

root@vm4923:/opt/tomcat/webapps# ls -l myapp/
total 4
-rw-r--r-- 1 root root 12 Feb 17 14:38 testfile

root@vm4923:/opt/tomcat/webapps# ls -lh | grep myapp
drwxr-xr-x  2 root root 4.0K Feb 17 14:38 myapp
-rw-r--r--  1 root root  17M Dec 18 12:59 myapp.war

root@vm4923:/opt/tomcat/webapps# ls -l myapp/
total 4
-rw-r--r-- 1 root root 12 Feb 17 14:38 testfile

root@vm4923:/opt/tomcat/webapps# rm -rf myapp
rm: cannot remove 'myapp': Permission denied

root@vm4923:/opt/tomcat/webapps# ls -l myapp/
total 0
root@vm4923:/opt/tomcat/webapps# ls -lh | grep myapp
drwxr-xr-x  2 root root 4.0K Feb 17 14:39 myapp
-rw-r--r--  1 root root  17M Dec 18 12:59 myapp.war
root@vm4923:/opt/tomcat/webapps# 

@Fiximan

# ls -l | grep webapps
drwxrwxrwx 9 root root  4096 Jan 27 21:41 webapps

Вывод @jcbermu lsattr после выдачи команды # chattr -i examp :

# lsattr 
-------------e-- ./myapp
-------------e-- ./host-manager
-------------e-- ./myapp.war
-------------e-- ./examples
-------------e-- ./docs
-------------e-- ./examp
-------------e-- ./examp.war
-------------e-- ./ROOT
-------------e-- ./manager

Решение (редактировать)

Наконец, основной причиной проблемы были атрибуты ext4 (не разрешения) родительского каталога.

root@vm4923:/opt/tomcat# lsattr | grep webapps
----i--------e-- ./webapps

Удалив атрибут i из webapps я смог удалить каталог myapp с помощью команды rm -rf .

root@vm4923:/opt/tomcat# chattr -i webapps

root@vm4923:/opt/tomcat# lsattr | grep webapps
-------------e-- ./webapps

root@vm4923:/opt/tomcat# cd webapps/

root@vm4923:/opt/tomcat/webapps# ls
ROOT  docs  examp  examp.war  examples  host-manager  manager  myapp  myapp.war

root@vm4923:/opt/tomcat/webapps# ls myapp
testdir

root@vm4923:/opt/tomcat/webapps# rm -rf myapp

root@vm4923:/opt/tomcat/webapps# ls
ROOT  docs  examp  examp.war  examples  host-manager  manager  myapp.war

Спасибо вам, ребята, за ваши усилия!

3 ответа3

6

Чтобы объединить оба ответа:

проверьте, есть ли в родительском каталоге webapps - i атрибуты a или

lsattr | grep webapps

Затем удалите их через

chattr -i -a webapps
3

Будучи пользователем root, проверьте атрибуты файлов, выполнив следующую команду:

lsattr 

Вывод должен быть таким:

-----------------e- ./.thisfolder/.
-----------------e- ./.thisfolder/somefile

если вы заметили , и i или удалить их:

chattr -i [filename]
chattr -a [filename]

chattr позволяет в файловых системах ext2, ext3 и ext4 изменять атрибуты, которые переопределяют списки ACL (chmod, chown, setfacl ...), обеспечивая вам жесткий контроль над файлами.

Наиболее распространенные атрибуты:

  • (A) Не обновляйте время

  • (S) синхронные обновления

  • (а) добавить только

  • (г) нет свалки

  • (я) неизменным

  • (j) регистрация данных

  • (t) нет слияния хвостов

lsattr просто перечисляет эти атрибуты.

2

Это распространенное заблуждение, что для удаления каталога /a /b /c необходимо иметь разрешение на запись в /a /b /c. Наличие этого права дает вам возможность управлять СОДЕРЖАНИЕМ /a /b /c, то есть записывать / изменять / удалять файлы в нем.

Следовательно, чтобы удалить /a /b /c, вы должны иметь флаг записи на /a /b

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .