Веб-версияОткрыть в Telegram

СообщениеВ прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно поднять привилегии нельзя.

13 июля 2026
P
Ссылка
нажмите — покажем
В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно поднять привилегии нельзя. Чтобы не потерять уровень доступа текущего процесса, нужно выполнять понижение в дочернем процессе. Для этого можно использовать os.fork(). # example.py from pathlib import Path import os import sys import pwd def example(username): # получаем pwd юзера по имени try: pw_record = pwd.getpwnam(username) except KeyError: raise Exception(f"User {username} not found") return # создаем форк процесса pid = os.fork() if pid == 0: # если мы в дочернем процессе - сбрасываем привилегии os.setgid(pw_record.pw_gid) os.setuid(pw_record.pw_uid) # создаем файл от имени другого юзера Path('user-file.txt').touch() sys.exit(0) else: # родительский процесс, создаем файл от имени исходного юзера Path('root-file.txt').touch() os.waitpid(pid, 0) example('paul') # проверяем владельца файлов print('user-file.txt', Path('user-file.txt').owner()) print('root-file.txt', Path('root-file.txt').owner()) Теперь запустите скрипт от root. У файлов будут разные владельцы. ~$ sudo python example.py user-file.txt paul root-file.txt root PS. В дочернем процессе os.fork() вернёт 0, чтобы можно было понять в каком процессе продолжает исполняться код. В родительском это будет реальный PID. Это написано в документации. # tricks
4 · 662 ·

Рядом в ленте

PPython Заметки - ЧатА представь как живется одинесникам. Там все ключевые слова постоянно спорят с повседневностью😖.ССергей КелерНу, я про компенсацию заявленных минусов.
это сообщение
PPython ЗаметкиУ меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Собираю обычно через Pynstaller/Nuitka. И вот этапы борьбы поиска удобногоССергей КелерЕсть же qemu/kvm. Зачем городить огород? Если хотите обвязку, то самое простое - libvirt. Если надо гуй, то aqemu.

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем