USBのバイナリファイルへの実行権限の付与

USBのバイナリファイルへの実行権限の付与

実行権限で実行できるバイナリを見つけるために解凍できるtarball(.tar.gz)をユーザーに提供してプログラム全体を起動するデスクトップアプリケーションがあります。これはユーザーのホームディスクで機能しますが、USBや外部HDなどのリムーバブルメディアには機能しません(Windowsでは機能します)。 「r」と「w」で始まり、権限を変更しようとするたびに、次を使用します。chmod ルートに対しても権限が実行権限除外に戻ります。

マウントポイントの現在のマウント情報/dev/sda1 on /media/me/78E1-495A type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

この問題に関する他の投稿があります。Ubuntuに関する質問次のようないくつかの興味深いソリューションがあります。権限変更によるインストールしかし、別の場所に再インストールする必要はありませんか(不完全な回答)?この質問に対する答えは解決策を提供しますmount -o -execで応答、新しいマウントポイントを使用します。実装するオプションですが、デフォルトの非実行オプションは変更されません。

ユーザーシステムの構成ファイルを変更しないソリューションはありますか?

答え1

ファイルシステムタイプvfat(通常のUSBスティック)は、chmodが変更したい権限の保存をサポートしていません。 vfatWindows派生ファイルシステムなので、UNIXファイルの意味を完全にサポートしていないことは驚くべきことではありません。

また、このshowexecオプションは実行ビットをブロックします。マウントマニュアルページによると、

設定されている場合、ファイルの実行許可ビットは、名前拡張子が.EXE、.COM、または.BATの場合にのみ許可されます。デフォルトでは設定されません。

showexec インストールオプションがないと、すべてのファイルが実行可能ファイルとして表示され、chmod -xコマンドはまだ何も実行しない可能性があります。

答え2

ファイルシステムUDF

ディレクトリを書き込んでプログラムを実行できるように、所有権と権限をかなり自由に管理できるファイルシステムUDFを使用できます。

  • UDFにはファイルシステムを修復するためのツールが不足している可能性がありますが、これは欠点ですが、いくつかの利点があります。

  • フリーソフトウェア

  • 修復ツールは、次のリンクを介してWindowsにあります。UDF用fsckツール、ソースコードとして使用できるツールがあります。

  • Ubuntuで作成可能

  • Linuxスタイルのリンクと互換性があります。

  • Linuxスタイルの権限と所有権と互換性があります。個々のファイルの所有権と権限を作成および変更できます(FATおよびNTFSでは不可能)。

  • UDFパーティションはWindows 10でフォーマットするように求められません(Linux ext4ファイルシステムは影響を受け、誤って削除される可能性があります)。

  • UDFを作成して使用するには:USBスティックFATの後続製品としてUDFを使用

    したがって、これを使用するには、USBスティックが次のようになるとします/dev/sdx

    1. パッケージのインストールudftools(UbuntuとDebian)

            sudo apt-get install udftools
      
    2. パーティションを分割したテーブルとパーティションの作成gpartedまたはgnome-disks

    3. ターゲットパーティションの最初のmibibyteを危険にさらすdd(コマンドラインを慎重に確認してください!)

            sudo dd if=/dev/zero of=/dev/sdx1 bs=1M count=1
      
    4. 走るmkudffs

            sudo mkudffs -b 512 --media-type=hd --lvid=my-label /dev/sdx1
      

    UDFでフォーマットした後、USBドライブがFATとして検出されるのを防ぐために、パーティションの最初のMiBバイトを消去して、古いファイルシステム情報(またはその他の残りのデータ)を消去します。

    これは-b 512、UDF仕様で要求されているように、ファイルシステムのブロックサイズをUSBスティックの物理ブロックサイズと同じにするためです。幸いなことに、より適切なブロックサイズのUSBスティックを持っている場合は、それを調整してください。

    これにより、USBスティックをGNU / Linuxだけでなく、現在のバージョンのWindows(以前のバージョンXPの場合は読み取り専用)で読み書きすることができます。残念ながら、Linuxで生成されたこのUDFバージョンはMacOSで管理できません(2020年11月に複数のMacOSバージョンでテスト済み)。

テスト例

USBフラッシュドライブに次のシステムを作成しました。

$ lsblk -o name,size,fstype,label,mountpoint /dev/sdc
NAME    SIZE FSTYPE LABEL     MOUNTPOINT
sdc    57,3G                  
└─sdc1  3,5G udf    work-here /media/olle/work-here

UDFを持つパーティションはマイコンピュータに自動的にマウントされます。

UDFファイルシステムの最上位レベルにディレクトリを作成し(sudoを使用して)、最初の一般ユーザーが所有権と完全な権限を持つようにその所有権と権限を変更しました。

sudodus@bionic64 /media/sudodus/work-here/cd-2-this-dir $ ls -l /media/sudodus/work-here
totalt 0
drwxr-xr-x 2 sudodus sudodus 196 aug  2 23:14 cd-2-this-dir

その後、小さなbashシェルスクリプトを作成し、実行権限を与えました。

chmod +x run-this-file
sudodus@bionic64 /media/sudodus/work-here/cd-2-this-dir $ ls -l
totalt 0
-rwxrwxr-x 1 sudodus sudodus 49 aug  2 23:14 run-this-file

その場所(USBドライブ)で実行できます。

sudodus@bionic64 /media/sudodus/work-here/cd-2-this-dir $ ./run-this-file 
Hello World, I am sudodus

この演習をプライマリコンピュータ(Ubuntu 18.04.6 LTS)で実行し、Ubuntu 22.04 LTSとWindows 11でテストしました。ファイルを作成し、bat次のように実行できます。

.\run.bat

最終コメント

UDFを使用するこのアプローチでは、LinuxとWindowsでパッケージを使用できると思います。

残念ながら、MacOSのためのシームレスな方法はありません。 MacOSで動作する方法が必要な場合は、ユーザーはFAT32またはexFATを必要とし、今回は追加されexecたインストールオプションに従って削除して再インストールする必要があります。このリンク。 「例2(ファイルに対する実行権限を含む...)」まで下にスクロールします。

[よりユーザーフレンドリーにするために]できることは、小さなパーティションでこれらのコマンドを実行し、同じドライブ上のより大きなパーティションのマウントオプションを変更できる小さなシェルスクリプトを持つことです。

sudo bash make-execution-possible

これは実行権限なしで動作します(ただし、シェルスクリプトの場合にのみコンパイルされたプログラムがあるようです)。

関連情報