web-dev-qa-db-ja.com

ファイルのアクセス許可を変更できません

いくつかのシェルファイルを作成するか、USBストレージデバイスにコピーするたびに、それらを実行可能にすることができません。

Test.shを作成すると、デフォルトのファイルパーミッションは644になりますが、実行すると

chmod 777 test.sh

エラーレポートはなく、echo $?も「0」を返します。しかし、それでもls -lは許可を644として示しており、./test.shとして実行することはできません。

2
SHW

はい、これは、デバイスがVFATなどのその種の権限設定をサポートしないファイルシステムでフォーマットされている場合に発生する可能性があります。そのような場合、umaskはfstab(または同等のホットプラグ)の設定からその場で作成されます。

詳細については、おそらくmanmountを参照してください。たとえば、VFATの場合、次のようになります。

脂肪のマウントオプション

id = valueおよびgid = value

すべてのファイルの所有者とグループを設定します。 (デフォルト:現在のプロセスのuidとgid。)

mask = value

Umask(存在しないアクセス許可のビットマスク)を設定します。デフォルトは、現在のプロセスのumaskです。値は8進数で示されます。

等.

10
Ulrich Schwarz

ファイルシステムがnoexecオプションでマウントされているようです。このオプションは、アクセス許可のすべての実行ビットが設定されていないかのように動作することにより、そのファイルシステムでプログラムを実行することを禁止します。 userマウントオプションを使用する場合(または一部のユーザーインターフェイスが内部で使用する場合)、noexecで明示的にオフにしない限り、execはオンになります。

ほとんどのUSBスティックは、MSDOSから派生したVFATファイルシステムを使用します。このファイルシステムには、アクセス許可の概念がありません。ファイルシステムをマウントするときにのみアクセス許可ビットを指定できます。これらのアクセス許可は、そのファイルシステム上のすべてのファイルに適用されます。

スクリプトを実行する権限がない場合は、インタプリタを明示的に呼び出します。

sh /media/stick/test.sh

動的にリンクされたバイナリの場合は、ダイナミックリンカを呼び出します。

/lib/ld-linux.so.2 /media/stick/myprog