LINUX.ORG.RU

опция DynamicUser=true в systemd service, не могу писать в файл с правами 777

 , , ,


0

1

Привет.

Создаю скрипт и файл в папке /opt/1/ с правами 777:

sudo mkdir -p  /opt/1/
sudo chmod -R 777 /opt/1/
echo 'hey' >/opt/1/1.txt
chmod 777 /opt/1/1.txt

vodka@vodka-PC:~$ ll /opt/1/1.txt
-rwxrwxrwx 1 vodka vodka 4 мая  1 17:30 /opt/1/1.txt*

Сам скрипт:

vodka@vodka-PC:~$ cat /opt/1/2.py
#!/usr/bin/python3
my_file=open("/opt/1/1.txt", 'w')
my_file.write('i am not OK')
my_file.close

Создаю сервис и делаю так, чтобы от запускался от пользователя и группы, которых на самом деле не существует (elena\temnikova) с опцией DynamicUser=true:

[Unit]
Description=Hey

[Service]
Type=oneshot
ExecStart=/opt/1/2.py
User=elena
Group=temnikova
StandardOutput=journal
StandardError=journal
DynamicUser=true

[Install]
WantedBy=multi-user.target

Запускаю и получаю ошибку о том, что скрипт не может писать в файл, у которого права 777 (/opt/1/1.txt):

vodka@vodka-PC:~$ sudo systemctl daemon-reload 
vodka@vodka-PC:~$ sudo systemctl start elena
мая 01 17:41:04 vodka-PC systemd[1]: Starting Hey...
мая 01 17:41:04 vodka-PC 2.py[25861]: Traceback (most recent call last):
мая 01 17:41:04 vodka-PC 2.py[25861]:   File "/opt/1/2.py", line 2, in <module>
мая 01 17:41:04 vodka-PC 2.py[25861]:     my_file=open("/opt/1/1.txt", 'w')
мая 01 17:41:04 vodka-PC 2.py[25861]: OSError: [Errno 30] Read-only file system: '/opt/1/1.txt'
мая 01 17:41:04 vodka-PC 2.py[25861]: Error in sys.excepthook:
мая 01 17:41:04 vodka-PC 2.py[25861]: Traceback (most recent call last):
мая 01 17:41:04 vodka-PC 2.py[25861]:   File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 145, in apport_excepthook
мая 01 17:41:04 vodka-PC 2.py[25861]:     os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640), 'wb') as f:
мая 01 17:41:04 vodka-PC 2.py[25861]: OSError: [Errno 30] Read-only file system: '/var/crash/_opt_1_2.py.64592.crash'
мая 01 17:41:04 vodka-PC 2.py[25861]: Original exception was:
мая 01 17:41:04 vodka-PC 2.py[25861]: Traceback (most recent call last):
мая 01 17:41:04 vodka-PC 2.py[25861]:   File "/opt/1/2.py", line 2, in <module>
мая 01 17:41:04 vodka-PC 2.py[25861]:     my_file=open("/opt/1/1.txt", 'w')
мая 01 17:41:04 vodka-PC 2.py[25861]: OSError: [Errno 30] Read-only file system: '/opt/1/1.txt'
мая 01 17:41:04 vodka-PC systemd[1]: elena.service: Main process exited, code=exited, status=1/FAILURE
мая 01 17:41:04 vodka-PC systemd[1]: elena.service: Failed with result 'exit-code'.
мая 01 17:41:04 vodka-PC systemd[1]: Failed to start Hey.

Кто-нибудь может подсказать, что я делаю не так? Спасибо!

★★★

Ответ на: комментарий от anymouze

Нет, а зачем ему рут-права? Файл имеет права 777, как и директория, в которой расположен файл:

vodka@vodka-PC:/lib/systemd$ ll /opt/1/1.txt
-rwxrwxrwx 1 vodka vodka 11 мая  1 17:39 /opt/1/1.txt*
vodka@vodka-PC:/lib/systemd$ ll -d /opt/1
drwxrwxrwx 2 root root 4096 мая  1 18:23 /opt/1/

iljuase ★★★ ()
Последнее исправление: iljuase (всего исправлений: 2)
Ответ на: комментарий от iljuase

ну я точно этого не знаю, но почему в логе скрипт жалуется на read-only filesystem? создай директорию от пользователя и файл в ней и попробуй с ним выполнить скрипт.

anymouze ★★ ()

Надо было добавить вот это:

ReadWritePaths=/opt/1/

Сейчас всё работает.

[Unit]
Description=Hey

[Service]
Type=oneshot
ExecStart=/opt/1/2.py
User=elena
Group=temnikova
StandardOutput=journal
StandardError=journal
DynamicUser=true
RemoveIPC=true
PrivateTmp=true
ReadWritePaths=/opt/1/

[Install]
WantedBy=multi-user.target
iljuase ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.