私の要件
私のpythonサーバーはRHELで通常のユーザーとして実行されますが、アクセスできない場所にファイル/ディレクトリを作成する必要があります。また、ランダムな UID/GID でこれらのファイルを chown する必要があります
私のアプローチ
機能のみの環境でこれを試してみてください。setuid はありません。cap_chown および cap_dac_override 機能を利用しようとしています。しかし、systemctlのような環境で動作させる方法が完全に失われています
現在、サービスファイルには次のものがあります。
#cat /usr/lib/systemd/system/my_server.service
[Service]
Type=simple
SecureBits=keep-caps
User=testuser
CapabilityBoundingSet=~
Capabilities=cap_dac_override,cap_chown=eip
ExecStart=/usr/bin/linux_capability_test.py
そして、バイナリ自体に続きます:
# getcap /usr/bin/linux_capability_test.py
/usr/bin/linux_capability_test.py = cap_chown,cap_dac_override+ei
しかし、これは、スクリプトでは決して機能しないと言っています。 非ルートプロセスが Linux の「特権」ポートにバインドする方法はありますか?
現在の設定では、実行中のプロセスに対して私が持っている機能は次のとおりです。
# ps -ef | grep lin
testuser 28268 1 0 22:31 ? 00:00:00 python /usr/bin/linux_capability_test.py
# getpcaps 28268
Capabilities for `28268': = cap_chown,cap_dac_override+i
しかし、そのスクリプト内から /etc/ にファイルを作成しようとすると:
try:
file_name = '/etc/junk'
with open(file_name, 'w') as f:
os.utime(file_name,None)
「許可が拒否されました」で失敗します
それがうまくいかないのは私にとって同じケースですか?ここで python-prctl モジュールを使用して動作させることはできますか?