次のコマンドをアトミックな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
)。したがって、デフォルトではtee
umaskでは実行できず、0000
代わりに使用されます0022
。しかし、ここではこれをさらに厳しくし、効果がありました。
もちろん、設定ではumaskを別の値に設定するか、を使用してより許容できるようにすることができ、umask_override
それを変更できるいくつかのPAMモジュールもあります。この場合、sudoを使用してumaskセットでシェルを実行し、次のコマンドを実行できます。
echo foo | sudo -u sun sh -c 'umask 077; tee bar.private'