権限が拒否されました: ディレクトリにcd

権限が拒否されました: ディレクトリにcd

Chromebook を使用しており、シェル経由で Android コンテナ内を移動したいと考えています。コンテナはパス にマウントされています。ディレクトリに入ろう/run/containers/android_XXXXXとすると、 と表示されます。 コマンドを として実行しようとしましたが、何らかの理由でコマンドにアクセスできなくなります。 ディレクトリで を実行しましたが、ダメでした。cdPermission Deniedsudocdchmod u+x

ここからどのような手順を踏めばよいでしょうか?

statディレクトリを実行すると、次の結果が返されます。

  File: ‘android_XXXXXX/’
  Size: 80              Blocks: 0          IO Block: 4096   directory
Device: fh/15d  Inode: 59640       Links: 3
Access: (0700/drwx------)  Uid: (655360/ UNKNOWN)   Gid: (655360/ UNKNOWN)
Context: u:object_r:tmpfs:s0
Access: 2016-10-31 04:04:52.680000040 +0000
Modify: 2016-10-31 04:04:52.200000040 +0000
Change: 2016-10-31 04:44:54.990001186 +0000
 Birth: -

答え1

このディレクトリは、drwx------uid が (パスワード ファイルにリストされていない) であるユーザーだけが655350読み取ったり、入ることができるようになっています。

sudo cdコマンドが見つからないのはcd予想通りで、これはシェルに組み込まれています。組み込まれていない場合は機能しません。現在のシェルのプロセス ID が 54000 で、/bin/cd コマンドを実行した場合、PID は 54309 になる可能性があります。このコマンドはプロセス 54309 のディレクトリを変更し、終了します。プロセス 54000 は元のディレクトリに残ります。

chmod u+x権限を変更しますuser (owner)

あなたが望むのはsudo chmod go+rx /run/containers/android_XXXXX

答え2

@icarus が述べたような権限の確認に加えて、ACL (アクセス制御リスト) もgetfacl確認して、基本的なファイル アクセス権限を上書きするルールがないことを確認する必要があります。

注意:getfaclシステムに存在しない場合は、おそらく問題ではありません。


問題にならないはずの ACL の例。

$ getfacl test/
# file: test/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

これは、標準の POSIX アクセス ルール以外の追加の ACL ルールが適用されていないことを示します。ls -ald権限に関しては、 の出力と一致していることがわかります。( の-d引数は、lsディレクトリの内容ではなく、ディレクトリ自体を表示するように指示します。)

$ ls -ald test/
drwxr-xr-x 2 root root 4096 May  8 19:11 test/

問題を引き起こす可能性がある ACL の例。

$ getfacl test/
# file: test/
# owner: root
# group: root
user::rwx
user:mc:r--
group::r-x
mask::r-x
other::r-x
$ ls -ald test/
drwxr-xr-x+ 2 root root 4096 May  8 19:11 test/

この場合、 の出力を見るとls -ald、問題があるとは思えません。ただし、ACL ルールは POSIX ルールよりも優先されるため、mc他の権限セットによって に実行権限が与えられているにもかかわらず、ユーザーには実行権限がないため、ユーザーはディレクトリに変更できませんmc

ただし、注意すべき点として、所有者の権限は他のすべての ACL ルールよりも優先されるようで、グループ所有者の権限についても同様であると思われます。

Arch WikiにはACLに関する詳しい情報があります。https://wiki.archlinux.org/title/アクセス制御リストそれらについてさらに詳しく知りたい場合は。


getfacl当然ながら、それが問題であるかどうかを常に確認したくない、または確認するのを忘れる場合があります。幸いなことに、ls -alは追加の ACL ルールが適用されたときにそれを通知します。 の出力を確認するとls -al、ACL ルールが適用されている場合は常に、許可ビットのリストの最後に が表示され+、それ以外の場合は表示されません (少なくとも私の短いテストではそうでした)。

TLDR:+の権限リストにが表示される場合はls -al、アクセス制御リスト ( getfacl) を確認してください。

関連情報