Chromebook を使用しており、シェル経由で Android コンテナ内を移動したいと考えています。コンテナはパス にマウントされています。ディレクトリに入ろう/run/containers/android_XXXXX
とすると、 と表示されます。 コマンドを として実行しようとしましたが、何らかの理由でコマンドにアクセスできなくなります。 ディレクトリで を実行しましたが、ダメでした。cd
Permission Denied
sudo
cd
chmod 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
) を確認してください。