RAIDiator OSでのext3ファイルシステムのrootユーザーとして、ディレクトリ内の1つのファイルのみのアクセス権が拒否されました


9

私は、Debianに基づいていると思う「ストレージ」という名前のReadyNASボックスを持っています。rootとしてsshでログインできます。Webサーバーを再構成しようとしていますが、理解できないファイルアクセス許可の問題が発生しています。/etc/frontview/apache/apache.pemrootとしても何もできません!同じディレクトリ内の他のファイルと比較して、特別な権限がないようで、それらを操作できます。

storage:~# whoami 
root
storage:~# cd /etc/frontview/apache/   
storage:/etc/frontview/apache# ls -lah apache.pem*         
-rw-------    1 admin    admin        4.0k Jul 10  2013 apache.pem
-rw-------    1 admin    admin        4.0k Jun  9 05:57 apache.pem.2017-02-04
-rw-------    1 admin    admin        1.5k Jun  9 05:57 apache.pem.orig
storage:/etc/frontview/apache# touch apache.pem            
touch: creating `apache.pem': Permission denied
storage:/etc/frontview/apache# touch apache.pem.2017-02-04 
storage:/etc/frontview/apache# rm -f apache.pem
rm: cannot unlink `apache.pem': Operation not permitted

このファイルの特別な点で、変更できないのは何ですか?削除できません。権限を変更できません。所有者を変更することはできません。

ディレクトリは問題ないようです。空き容量があり、読み取り専用でマウントされていません。実際、同じディレクトリ内の他のファイルを編集できます。

# ls -ld /etc/frontview/apache
drwxr-xr-x    8 admin    admin        4096 Jun  9 05:44 /etc/frontview/apache
# df /etc/frontview/apache
Filesystem           1k-blocks      Used     Available Use% Mounted on
/dev/hdc1            2015824        504944   1510880   26% /

ls -ld /etc/frontview/apacheおよびの出力も表示してくださいdf /etc/frontview/apache。多分フォルダはマウントされたディスクスペースにありroますか?
Ned64

その情報を質問に追加しました。それはすべて私には問題なく見えます。いずれにせよ、それが問題だったとしても、そのディレクトリ内の他のすべてのファイルを編集できるとは思えません。
Stephen Ostermiller 2017年

@RunCMDタイトルとタグに、より具体的な情報を追加しました。ファイルシステムはext3としてリストされているため、ext3は不変をサポートしているように見えます # mount/dev/hdc1 on / type ext3 (rw,noatime)
Stephen Ostermiller

1
Solarisはext3もARM cpuもサポートしていないため、おそらくSolarisベースではありません。
alanc 2017年

1
質問からSolarisを削除しました。詳細については、Debian Etchに基づいている可能性があります。
Stephen Ostermiller 2017年

回答:


9

私は問題を見つけました。「不変」属性がそのファイルに設定されました。 ls表示されません。それを表示するには、別のコマンドが必要です。

# lsattr apache.pem*
----i--------- apache.pem
-------------- apache.pem.2017-02-04
-------------- apache.pem.orig

不変ビットを削除したら、そのファイルを編集できます。

# chattr -i apache.pem
# touch apache.pem

1
「ホットネットワークの質問」でこの質問をクリックして、拡張属性を確認するように指示しましたが、すでにそうしていると思います。(IDKがGNUにls属性を一覧表示するオプションがない理由。忘れてしまいますが、属性を照会するためのシステムコールでさえ移植性がないため、別のユーティリティで実装する方がおそらく簡単でした。)
Peter Cordes

@PeterCordes同意する。「ファイルの上書きからのアップグレードを停止する」のようなものをグーグルした後で、私はそのビットを設定したと確信していますが、それは何年も前であり、そうすることを明らかに忘れていました。lsそのビットを示した場合、または私が使用した他のコマンドのいずれかに、アクセス許可が拒否された理由についてより役立つ(具体的な)エラーメッセージがあった場合、それは良いことです。
Stephen Ostermiller 2017年

すべてはtouchそれが試みシステムコールが(ということであることを知っているopen("apache.pem", O_WRONLY|O_CREAT|..., 0666))で失敗しましたEACCESS。(strace -efile touch apache.pemそれが行うファイル関連のシステムコールを確認するために使用します)。そのシステムコールのマニュアルページに記載されているように、EACCESSには多くの考えられる理由があり、それらの多くはファイル自体ではなく親ディレクトリに関係しています。ファイルシステムやOSが異なるため、システムコールがエラーを返した理由を正確に推測するコードを記述するのは非常に困難です...
Peter Cordes

とにかく、普遍的な慣習は、何かが失敗したときに、エラーコード(errno)のエラー文字列を検索して出力するというものです。(C標準ライブラリperror関数または同等のものを使用)。これは、ユーザーが問題をすばやく見つけるためのヒントとして常に十分ではないまれなケースの1つですが、ほとんどの場合、問題は非常にうまく機能します。(特に、straceどの操作がエラーを生成したかについて疑いがある場合と組み合わせた場合)完璧ではありませんが、はるかに悪化する可能性があります(Google Windowsにエラーコードが表示されるMS Windowsを参照してください)
Peter Cordes

で遊んでいたところchattr +irm foo(なしの-f)プロンプトに気づきましたrm: remove write-protected regular file ‘foo’。なぜなら faccessat(AT_FDCWD, "/var/tmp/foo", W_OK) = -1 EACCES (Permission denied)。POSIXではrm、書き込み保護されたファイルを削除する前に、デフォルトでプロンプトを表示する必要があります。そのため、最初にチェックを行います。したがって、を使用していなかった場合、大きな手がかりがより速く得られるでしょうrm -f。:/ access(3)は、カーネルが実際に書き込み用に開いているかのようにアクセス許可を確認するように要求するため、ACLと属性を取得します。
Peter Cordes 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.