+rw -x権限を使用してファイルをディレクトリに移動し、ディレクトリ内のファイルの名前を変更できるUNIXシステムはありますか?

+rw -x権限を使用してファイルをディレクトリに移動し、ディレクトリ内のファイルの名前を変更できるUNIXシステムはありますか?

私はUNIX / LINUXファイルシステムがどのように機能するかをよりよく理解しようとしています。

Linuxのファイルシステム

inodeと比較して、ディレクトリ構造にはファイルに関する制限された情報が含まれています。ファイルのinode番号、名前、名前の長さのみが保存されます。

info '(coreutils) File permissions'
  1. ファイルを読み取る権限です。ディレクトリの場合、これはディレクトリの内容を一覧表示する権限を意味します。
  2. ファイルを書き込み(変更)する権限。ディレクトリの場合、これはディレクトリからファイルを作成および削除する権限を意味します。
  3. ファイルを実行する権限です(プログラムとして実行)。ディレクトリの場合、これはディレクトリ内のファイルにアクセスする権限を意味します。

権限readwriteディレクトリへの読み取りと書き込みを意味するため、x ls名前だけは提供されません。 inode:ファイル権限などとデータを読み取ることができるため、名前を事前に知ってファイルにアクセスできますxaccess files

しかし、なぜシステム(正確にはLinux Mint 20、私が覚えているかによると、多くのUNIXが同じように動作しますが、すべてのオペレーティングシステムではない)が動作する理由は次のとおりです。

ls -lad 1
drw-rw-rw- 2 alex alex 60 Oct  5 10:55 1
mv ./test ./1
mv: cannot stat './1/test': Permission denied
mv 1/2 1/3
mv: failed to access '1/3': Permission denied

mvフォルダにファイルを+rw -x作成してpermission denied? - ディレクトリに記録し、システムはファイルとディレクトリ名へのハードリンクを記録し、rその名前のファイルがすでに存在することを確認できます(mvファイル名を変更すると同様の結果が得られます)。 。ユースケースは、ファイルをディレクトリにドラッグアンドドロップできますが、後でアクセスまたは変更することはできません。それがうまくいかない理由はありますか?これを可能にするUNIXシステムはありますか?

次に追加:

コメントによると: man 'rename(2)'

エラーEACCES oldpathまたはnewpathを含むディレクトリへの書き込み権限が拒否されたか、oldpathまたはnewpathのパスプレフィックスの1つを含むディレクトリに対する検索権限が拒否されたか、oldpathがディレクトリで書き込み権限が許可されていません。 )。 (path_solution(7)も参照してください。)

その後、質問は次のようになります。名前の変更 システムコールに newpath プレフィックスの最後の部分に対する検索権限が必要なのはなぜですか。名前が存在するか、代替が許可されているかどうかを確認する方が簡単ですが、検索権限なしで作成できますが、名前が存在するかどうかを確認するために読み取り権限があれば書き込むことができるようです。

ベストアンサー1

ファイルをディレクトリに移動するには、ディレクトリの内容(X権限など)を列挙できる必要があります。

ウィキペディアから:実行権限は、ファイルを実行する権限を与えます。ディレクトリに設定すると、実行権限は検索権限として解釈されます。ファイル名がわかっている場合は、ファイルの内容とメタ情報へのアクセスを許可しますが、読み取りも設定しない限り、ディレクトリ内のファイルは一覧表示されません。

詳細については、ここをクリックしてください。https://www.hackinglinuxexpose.com/articles/20030424.html

man renameat2(システムコールのmv使い方)から:

       EACCES Write permission is denied for the directory containing
              oldpath or newpath, or, search permission is denied for
              one of the directories in the path prefix of oldpath or
              newpath, or oldpath is a directory and does not allow
              write permission (needed to update the ..  entry).  (See
              also path_resolution(7).)

Linuxでは少なくとも実行権限が必要で、LinuxはほとんどPOSIXと互換性があるため、他のすべてのUnixも同じように動作すると思います。

私はこれが少し直観にずれていると言いたいのですが、それはまさにそれです。

+rw -x権限を使用してファイルをディレクトリに移動し、ディレクトリ内のファイルの名前を変更できるUNIXシステムはありますか?

私はそのようなUnixは知りませんが、MacOS、Linux、FreeBSDだけを使ってきました。

おすすめ記事