Мое требование
Мой сервер python работает как обычный пользователь на RHEL, но ему нужно создавать файлы/каталоги в местах, к которым у него нет доступа. Также необходимо сделать chown для этих файлов со случайным UID/GID.
Мой подход
Попробуйте это в среде только для возможностей, без 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
Но здесь говорится, что он никогда не будет работать со сценариями: to-privived-ports-1024-on-l#414258">Есть ли способ привязки процессов без полномочий root к привилегированным портам в 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, чтобы он заработал?