ファイル名に許可される文字をどのように制限できますか?

ファイル名に許可される文字をどのように制限できますか?

フォローアップUnix/Linux/POSIX ファイル名の変更: 制御文字 (改行文字など)、先行ダッシュ、その他の問題*、方法がありますか?禁止する一般的なLinuxカーネル/ファイルシステムで問題のある名前のファイルを作成しますか?これは低レベルで適用される必要があるため、rootアクセスによる設定変更以外の変更はこれらのファイル名を生成できません。たとえば、ファイルシステムドライバに、制御文字、改行、その他の文字(名前の先頭のハイフンなど)なしで有効なUTF-8シーケンスのみを許可するように指示するマウントオプションが理想的です。

ユースケースは主にセキュリティ強化ですが、ひどいハッキングをせずにコードでファイル名を処理できることです(詳細は上記の記事を参照)。

*:これまでの回答とコメントで提起されたほとんどの事項がこの記事で解決されました。公開する前に確認してください。

答え1

ファイル名を制限するモジュールの提案が1つ以上あります。これは、「Fiking Unix / Linux / POSIX Filenames」の著者であるDavid A. Wheelerが開発したLinuxセキュリティモジュール(LSM)です。

これに関するLWNの記事は次のとおりです。 Safename: 「危険な」ファイル名を制限します。。記事にはパッチを含む電子メールリンクがあります。これは2016年5月のことで、まだ直接試したことがありません。牽引力があるのか​​、最新のカーネルに移植可能なのかはわかりません。しかし、実際のコードでは提案が行われました。

答え2

一般的なLinuxカーネル/ファイルシステムで問題のある名前のファイル生成を無効にする方法はありますか?

まさにここに。

fanotifyユーザーエリアプログラムが監視したいディレクトリツリーでファイル操作を傍受できるようにします。これは、禁止されたファイル名を使用するなどの操作を実行するために使用できます。

カーネル ebpf プローブを使用すると、追加のコンテキスト切り替えオーバーヘッドを推測せずに(ファイルシステムを実装したりカーネルモジュールを追加しなくても)同じことを実行できます。しかし、私はそれを試したことがありません。

記事の作成者は、他の人(特にオペレーティングシステムとユーティリティの作成者)が共有しない問題のあるファイル名について具体的な見解を持っている可能性があるため、あなたが望むことを正確に実行できる既製のツールはないと思います。必要なものが必要ですが、数行のコードで簡単にコーディングできます。

関連情報