ファイルのインポートに実行権限が必要ない理由は何ですか? [コピー]

ファイルのインポートに実行権限が必要ない理由は何ですか? [コピー]

誰かが尋ねたAsk Ubuntuに関する質問permission deniedBashシェルに入ると、なぜこれが起こりますか?

/etc/profile

ファイルに実行権限がないためです。ルートであっても実行できません(sudo /path/to/file/with/no/execute/bits自動エラーで失敗sudo /path/to...: command not found)。私も根を知っていますできる実行ビットなしでディレクトリに入り、実行不可能なファイルの実行を絶対禁止するのは特別です。チャットではEliah Kaganは、ルートが実行不可能なファイルを実行できない理由は、ルートを保護するためであると信じています。(おそらく誤って危険なコードが実行されたからです)。

私は誰かがそれを実行したい理由が気になり、/etc/profile誰かがそれを実行したい場合は実際にsourceそれをしたいと思いました(環境変数とシェル変数を設定する設定ファイルなので)。その後、source通常のファイルには実行権限が必要ないことに気づきました。代わりに、source現在のシェルでファイルを実行してください!ファイルには任意のコマンドを含めることができ、. file直接実行されます。

実行権限を制限すると、潜在的に危険なコードが誤って実行されるのを防ぐことができますが、なぜsourceこのコマンドを使用して実行できないファイルを実行できますか?

答え1

実行不可能なファイルを実行すると失敗しそうではありません。故意に潜在的に危険なコードが誤って実行されるのを防ぎます。これは意味の一部にすぎません。 「ファイル、スクリプト、またはELFインタプリタの実行権限が拒否されると」execve失敗します。EACCES(引用しています。LinuxexecveのマンページPOSIX例:「新しいプロセスイメージファイルのパスプレフィックスにリストされているディレクトリに対する検索権限が拒否されたか、新しいプロセスイメージファイルに対する実行権限が拒否されました」を置かなかった。自分で離れています。

私の考えでは、説明はやや単調です。実行と調達の仕様が異なる。直接実行するには、カーネルが与えられたコマンドを実行し、実行権限を適用する必要があります。ファイルを取得するとは、実際にファイルを読み取って実行することを意味します。bashマンページ「検索されたファイルはPATH実行可能ファイルである必要はありません」と明確に指定されています。POSIX と「しかし、一般的なコマンド検索とは異なり、指すユーティリティは実行可能である必要はありません。 」(.と同じですsource。)

バイナリが実行可能でなくても、バイナリを取得するために使用されたのと同様の技術を使用して実行できます。

$ cp /bin/ls .
$ chmod 644 ls
$ /lib64/ld-2.26.so ./ls

先行は達成するのが難しい~のよりPOSIXとの比較はbash興味深いです。非POSIXモードでパスなしで引数が与えられた場合、POSIXモードは現在のディレクトリで検索しようとします。 POSIXではこれを禁止します。source.sourcePATH

いくつかの以前の実装は現在のディレクトリから検索します。文書、値があってもそれを許可しないでください。この動作は、ユーザーがトロイの木馬に対する脆弱性を回避しようとする可能性があるという懸念のため、このPOSIX.1-2008ボリュームでは省略されました。指す外の

sourceただし、パスのある引数はどの.ような場合でも処理されるため、現在の議論では実際には大きく変わりません。 (実際に何かを試すときは、驚きをsource避けるために、常にパス、相対パスをパラメータとして使用する必要があります。source返品あなたのPATH。というファイルを作成し、inを使ってファイルをインポートtestsource testbash何を意味するのかを確認してください。 )

関連情報