制限された権限を持つ特定のユーザーでファイルをアトミックに生成する方法

制限された権限を持つ特定のユーザーでファイルをアトミックに生成する方法

次のコマンドをアトミ​​ックな1行コマンドに変換してみてください。可能ですか?

echo foo | sudo -u sun tee bar.private
chmod 600 bar.private

ベストアンサー1

新しく作成されたファイルの権限はumaskプロセスによって変更され、逆に機能します。置くumaskでは明らか生成された権限から。したがって、umaskをに設定すると、ほとんど0077のユーティリティは特権ファイルを生成します0600

デフォルトでは、sudoは実行環境でより厳密なumaskを継承するため、次のことができます。

echo foo | (umask 0077; sudo -u sun tee bar.private)

そしてファイルは権限を使用して作成されます0600

実際にsudoビット単位の演算を実行します。そして環境にあるumaskと環境に設定されたumask構成ファイルumaskオプション、デフォルト0022)。したがって、デフォルトではteeumaskでは実行できず、0000代わりに使用されます0022。しかし、ここではこれをさらに厳しくし、効果がありました。

もちろん、設定ではumaskを別の値に設定するか、を使用してより許容できるようにすることができ、umask_overrideそれを変更できるいくつかのPAMモジュールもあります。この場合、sudoを使用してumaskセットでシェルを実行し、次のコマンドを実行できます。

echo foo | sudo -u sun sh -c 'umask 077; tee bar.private'

おすすめ記事