以下に示すように、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
#chattr -i Exampコマンドを発行した後の@jcbermu lsattrの出力:
# 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
属性を削除することで、rm -rf
コマンドを使用してmyapp
ディレクトリを削除できるようになりました。
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
頑張ってくれてありがとう!
rootであることは、次のコマンドを発行するファイルの属性を確認します。
lsattr
出力は次のようになります。
-----------------e- ./.thisfolder/.
-----------------e- ./.thisfolder/somefile
気づいたら、i
またはa
で削除してください。
chattr -i [filename]
chattr -a [filename]
chattr ext2、ext3、およびext4ファイルシステムで、ACL(chmod、chown、setfacl…)をオーバーライドする属性を変更して、ファイルを厳密に制御できます。
最も一般的な属性は次のとおりです。
(A)時間を更新しないでください
(S)同期更新
(a)追加のみ
(d)ダンプなし
(i)不変
(j)データジャーナリング
(t)テールマージなし
lsattr単にそれらの属性をリストします。
ディレクトリ/ a/b/cを削除するには、/ a/b/cへの書き込み権限が必要であるというのはよくある誤解です。その権利を持つことで、/ a/b/cのコンテンツを操作することができます。つまり、その下のファイルを書き込み/変更/削除します。
したがって、/ a/b/cを削除するには、/ a/bに書き込みフラグが必要です。