Re: Соотнесение процесса и поля QoS
Pavel Volkov wrote: > Хочу странного. > Как вы думаете, можно ли добиться, чтобы пакеты, генерируемые избранными > процессами, например Firefox, содержали в заголовке определённое значение > TOS? > По этому признаку я хочу заворачивать их в VPN-интерфейс на роутере. запусти в соседнем namespace с отдельной IPшкой и заворачивай как попало куда попало. > Я налуркал, что в iptables есть таблица owner, где можно матчить по UID, > GID, PID. > Я использую nftables, там есть матчинг по UID, GID. > Может быть при запуске этих процессов как-то менять им GID? LD_PRELOAD тебе в руки. https://unix.stackexchange.com/questions/210982/bind-unix-program-to-specific-network-interface
Re: Соотнесение процесса и поля QoS
On воскресенье, 15 сентября 2019 г. 18:37:11 MSK, Andrey Jr. Melnikov wrote: запусти в соседнем namespace с отдельной IPшкой и заворачивай как попало куда попало. Когда-то я так делал, но с какой-то версии Firefox при запуске из сетевого неймспейса стал рисоваться уродливый дифолтный курсор мыши вместо моего красивого.
Re: Соотнесение процесса и поля QoS
Pavel Volkov wrote: > Хочу странного. Да нет, идея звучит очень здраво. Но на всякий случай спрошу: > Как вы думаете, можно ли добиться, чтобы пакеты, генерируемые избранными > процессами, например Firefox, содержали в заголовке определённое значение > TOS? По этому признаку я хочу заворачивать их в VPN-интерфейс на роутере. SOCKS proxy не проще настроить, не? Или у вас процессы недоверенные? Ну тогда можно в сочетании с мандатным контролем — чтобы никуда, кроме него, не подключались (остается, правда, проблема с утечками DNS). > Может быть при запуске этих процессов как-то менять им GID? Но я бы хотел, > чтобы создаваемые ими файлы всё-таки имели исходный GID. В любом случае, что тогда точно не подходит, то это смена GID — процесс ведь вправе поменять группу на основную для пользователя. Тут нужна какая-то изоляция. Под описанное решение — подмена ToS Нетфильтром, подходят cgroups, свойство зовется net_cls.classid. signature.asc Description: PGP signature
Re: Соотнесение процесса и поля QoS
Dmitry Alexandrov <321...@gmail.com> wrote: > Pavel Volkov wrote: >> добиться, чтобы пакеты, генерируемые избранными процессами, например >> Firefox, содержали в заголовке определённое значение TOS? По этому признаку >> я хочу заворачивать их в VPN-интерфейс на роутере. > > SOCKS proxy не проще настроить, не? Или у вас процессы недоверенные? Ну > тогда можно в сочетании с мандатным контролем — чтобы никуда, кроме него, не > подключались (остается, правда, проблема с утечками DNS). Которая, впрочем, в контексте вашего решения и не проблема, поскольку попроцессная выборка не предполагает обработки DNS запросов вообще — они все пойдут прямо. О чем тому, кто возможно будет читать эту ветку в поисках, скажем, средств для обхода цензуры, надо иметь в виду. signature.asc Description: PGP signature
Re: Соотнесение процесса и поля QoS
On понедельник, 16 сентября 2019 г. 04:35:19 MSK, Dmitry Alexandrov wrote: SOCKS proxy не проще настроить, не? Или у вас процессы недоверенные? Ну тогда можно в сочетании с мандатным контролем — чтобы никуда, кроме него, не подключались (остается, правда, проблема с утечками DNS). Я почему-то думал, что в SOCKS нет поддержки UDP, но оказывается в SOCKS 5 её добавили. Тогда он может подойти. В HTTP/3 переходят на UDP, для битторрента тоже полезно будет иметь UDP. Но входящих коннектов с SOCKS не будет, а для битторрента это было бы хорошо. Тут нужна какая-то изоляция. Под описанное решение — подмена ToS Нетфильтром, подходят cgroups, свойство зовется net_cls.classid. Попробую изучить cgroup-ы, а это свойство есть и в v1, и в v2?
Re: Соотнесение процесса и поля QoS
Dmitry Alexandrov <321...@gmail.com> wrote: > [-- text/plain, encoding quoted-printable, charset: utf-8, 51 lines --] > Dmitry Alexandrov <321...@gmail.com> wrote: > > Pavel Volkov wrote: > >> добиться, чтобы пакеты, генерируемые избранными процессами, например > >> Firefox, содержали в заголовке определённое значение TOS? По этому > >> признаку я хочу заворачивать их в VPN-интерфейс на роутере. > > > > SOCKS proxy не проще настроить, не? Или у вас процессы недоверенные? Ну > > тогда можно в сочетании с мандатным контролем ??? чтобы никуда, кроме него, > > не подключались (остается, правда, проблема с утечками DNS). > Которая, впрочем, в контексте вашего решения и не проблема, поскольку > попроцессная выборка не предполагает обработки DNS запросов вообще ??? они > все пойдут прямо. Для тех, кому боязно за свои DNS-запросы - давно придумали DoH/DoT (DNS-over-HTTPS/DNS-over-TLS). > О чем тому, кто возможно будет читать эту ветку в поисках, скажем, средств > для обхода цензуры, надо иметь в виду. Эм, те кому нада "обход блокировок без СМС" - найдут в гуглях более "простые" решения. Те, кто может добраться до antizapret.info/api.php - им это уже и не надо.
Re: Соотнесение процесса и поля QoS
Pavel Volkov wrote: > On понедельник, 16 сентября 2019 г. 04:35:19 MSK, Dmitry Alexandrov wrote: >> SOCKS proxy не проще настроить, не? > > Но входящих коннектов с SOCKS не будет, а для битторрента это было бы хорошо. Стоп. Это разные задачи, и к ним разные решения. Для битторента — это значит для сервера; а раз для сервера — значит вопрос «чем заменить попользовательский контроль доступа» неактуален, ведь он все равно по-хорошему будет запускаться от своего пользователя, а возможно и в своем пространстве сетевых имен, как т. Мельников предлагает. >> Тут нужна какая-то изоляция. Под описанное решение — подмена ToS >> Нетфильтром, подходят cgroups, свойство зовется net_cls.classid. > > Попробую изучить cgroup-ы, а это свойство есть и в v1, и в v2? Нет, это в первых. А в Дебиан уже по-умолчанию вторые завезли? Тогда там само-то по себе все еще удобнее: возиться вручную с цифирью (а classid это число), если надо много разных классов создавать, уже не надо, можно буквами писать. Но есть и одно большое но: Систем-д. Он предъявляет монопольное право на распоряжение к-группами. Оно и на первые предъявлял, просто net_cls от него был свободен. А ко вторым, как вы знаете, все контроллеры слили в один, так что вот так по-простому: $ # по-умолчанию доступ закрыт $ curl detectportal.firefox.com curl: (7) Failed to connect to detectportal.firefox.com port 80: No route to host # # создаем к-группу # mkdir /sys/fs/cgroup/net_cls/inet # # разрешаем кому надо (здесь — всем) добавлять в нее процессы и убирать обратно # chmod a+w /sys/fs/cgroup/net_cls/inet/tasks /sys/fs/cgroup/net_cls/tasks # # указываем Нетфильтру ее членов пропускать # echo 1 > /sys/fs/cgroup/net_cls/inet/net_cls.classid # iptables -A OUTPUT -m cgroup --cgroup 1 -j ACCEPT # ip6tables -A OUTPUT -m cgroup --cgroup 1 -j ACCEPT $ # добавляем текущий шелл в разрешительную к-группу $ echo $$ > /sys/fs/cgroup/net_cls/inet/tasks $ # она наследуется $ curl detectportal.firefox.com success ...уже не сделаешь. Надо какой-то огород городить, чтобы при логине создавалось по своему ‘inet’у на каждого пользователя, причем вместе с отдельными правилами для Нетфильтра (хотя по делу они нафиг и не нужны). signature.asc Description: PGP signature
Re: Соотнесение процесса и поля QoS
"Andrey Jr. Melnikov" wrote: > Dmitry Alexandrov <321...@gmail.com> wrote: >> [-- text/plain, encoding quoted-printable, charset: utf-8, 51 lines --] > >> Dmitry Alexandrov <321...@gmail.com> wrote: >> > Pavel Volkov wrote: >> >> добиться, чтобы пакеты, генерируемые избранными процессами, например >> >> Firefox, содержали в заголовке определённое значение TOS? По этому >> >> признаку я хочу заворачивать их в VPN-интерфейс на роутере. >> > >> > SOCKS proxy не проще настроить, не? Или у вас процессы недоверенные? Ну >> > тогда можно в сочетании с мандатным контролем ??? чтобы никуда, кроме >> > него, не подключались (остается, правда, проблема с утечками DNS). > >> Которая, впрочем, в контексте вашего решения и не проблема, поскольку >> попроцессная выборка не предполагает обработки DNS запросов вообще ??? они >> все пойдут прямо. > > Для тех, кому боязно за свои DNS-запросы - давно придумали DoH/DoT «Боязно» — это уже про что-то другое: про опасение засветить свой DNS-сервер, а значит и свое местоположение. И в таком случае шифрование никак не в помощь, тут нужны именно что раздельные запросы. Для такого действительно без сетевых нэймспэйсов не обойтись. Я же говорил про подделку DNS — и для противодействия ей лишняя сложность в виде DNS-over-TCP и уж тем более, прости господи, DNS-over-HTTP не обязательна — можно просто завернуть весь DNS трафик в туннель. Может даже быстрее выйдет. >> О чем тому, кто возможно будет читать эту ветку в поисках, скажем, средств >> для обхода цензуры, надо иметь в виду. > > Эм, те кому нада "обход блокировок без СМС" - найдут в гуглях более "простые" > решения. Я, честно говоря, не понял вашего недовольства. Вы полагаете, что мое замечание было настолько очевидно для всякого, кто хоть немного преодолел уровень «бесплатно без СМС», что как-то глупо было даже его озвучивать? > Те, кто может добраться до antizapret.info/api.php - им это уже и не надо. Почему это? Это же просто база зацензуренных в России адресов? Как она тут поможет? Да и зачем она вообще нужна, кроме как хозяевам тем самых зондов для «обхода блокировок без СМС»? signature.asc Description: PGP signature
Re: Соотнесение процесса и поля QoS
On вторник, 17 сентября 2019 г. 14:33:39 MSK, Dmitry Alexandrov wrote: Но входящих коннектов с SOCKS не будет, а для битторрента это было бы хорошо. Стоп. Это разные задачи, и к ним разные решения. Для битторента — это значит для сервера; а раз для сервера — значит вопрос «чем заменить попользовательский контроль доступа» неактуален, ведь он все равно по-хорошему будет запускаться от своего пользователя, а возможно и в своем пространстве сетевых имен, как т. Мельников предлагает. Пока что сервер не нужен, только в перспективе, для начала хочу только браузер. Попробую изучить cgroup-ы, а это свойство есть и в v1, и в v2? Нет, это в первых. А в Дебиан уже по-умолчанию вторые завезли? Да, есть и первые, и вторые. Чтобы systemd использовал и монтировал вторые, надо добавить аргумент ядру: systemd.unified_cgroup_hierarchy=1 Тогда там само-то по себе все еще удобнее: возиться вручную с цифирью (а classid это число), если надо много разных классов создавать, уже не надо, можно буквами писать. Но есть и одно большое но: Систем-д. Он предъявляет монопольное право на распоряжение к-группами. Оно и на первые предъявлял, просто net_cls от него был свободен. А ко вторым, как вы знаете, все контроллеры слили в один, так что вот так по-простому: ...уже не сделаешь. Надо какой-то огород городить, чтобы при логине создавалось по своему ‘inet’у на каждого пользователя, причем вместе с отдельными правилами для Нетфильтра (хотя по делу они нафиг и не нужны). Я предполагаю делать так: $ systemd-run --user --scope --unit=inet.scope my_program При этом запускается my_program, и она засовывается в новую c-группу inet.scope, которая является подгруппой user@1000.service. И даже не нужны рут-права, и файлы от этой группы в /sys/fs/ тоже принадлежат пользователю. Далее я бы хотел добавить примерно такое правило в nftables: # nft add rule filter output meta cgroup <...> ip dscp set <...> Но не пойму, как определить числовой идентификатор группы, который тут требуется. systemd-cgls его не сообщает, а и в /sys/fs/cgroup тоже его нет.
Re: Соотнесение процесса и поля QoS
Dmitry Alexandrov <321...@gmail.com> wrote: > [-- text/plain, encoding quoted-printable, charset: utf-8, 138 lines --] [...] > > Те, кто может добраться до antizapret.info/api.php - им это уже и не надо. > Почему это? Это же просто база зацензуренных в России адресов? Как она тут > поможет? Эмм, потому что случаи "злой работадатель запретил ходить за котекам в вконтактег" и при этом разрешил свои роутеры и прочие прелести - не рассматриваются. > Да и зачем она вообще нужна, кроме как хозяевам тем самых зондов для ??обхода > блокировок без СМС??? Хозяевам - не нужна, они её пишут. Счастливым пользователям тоже не нужна - они её добровольно и без СМС раз-в-час качают. А вот тем, у кого перестал открываться сайт на amazon s3 от кривых ручек и постановлений самого гуманного суда в мире - очень даже нужна. И заявленные в оригинале требования на 99.9% подходят под эту типовую операцию.
Re: Соотнесение процесса и поля QoS
Dmitry Alexandrov <321...@gmail.com> wrote: > [-- text/plain, encoding quoted-printable, charset: utf-8, 138 lines --] > "Andrey Jr. Melnikov" wrote: > > Dmitry Alexandrov <321...@gmail.com> wrote: > >> [-- text/plain, encoding quoted-printable, charset: utf-8, 51 lines --] > > > >> Dmitry Alexandrov <321...@gmail.com> wrote: > >> > Pavel Volkov wrote: > >> >> добиться, чтобы пакеты, генерируемые избранными процессами, например > >> >> Firefox, содержали в заголовке определённое значение TOS? По этому > >> >> признаку я хочу заворачивать их в VPN-интерфейс на роутере. > >> > > >> > SOCKS proxy не проще настроить, не? Или у вас процессы недоверенные? > >> > Ну тогда можно в сочетании с мандатным контролем ??? чтобы никуда, кроме > >> > него, не подключались (остается, правда, проблема с утечками DNS). > > > >> Которая, впрочем, в контексте вашего решения и не проблема, поскольку > >> попроцессная выборка не предполагает обработки DNS запросов вообще ??? они > >> все пойдут прямо. > > > > Для тех, кому боязно за свои DNS-запросы - давно придумали DoH/DoT > ??Боязно?? ??? это уже про что-то другое: про опасение засветить свой > DNS-сервер, а значит и свое местоположение. Да, и кому ты нужен со своим DNS серверои и расположением? > И в таком случае шифрование никак не в помощь, тут нужны именно что > раздельные запросы. Для такого действительно без сетевых нэймспэйсов не > обойтись. Ну ща к наймсепейсам прибудет systemd без котррого не освятится и редхат как папа всего. > Я же говорил про подделку DNS ??? и для противодействия ей лишняя сложность в > виде DNS-over-TCP и уж тем более, прости господи, Про подделку - уже родили DNSSEC, только он мертвенький и синенький какой-то. Ибо - всем на него положить с присвистом. > DNS-over-HTTP не обязательна ??? можно просто завернуть весь DNS трафик в > туннель. Может даже быстрее выйдет. Да? А ты не думал - что DNS-over-HTTPS это такой тунель, только для тех, кому wireguard поднять некуда и он верит дяде? > >> О чем тому, кто возможно будет читать эту ветку в поисках, скажем, средств > >> для обхода цензуры, надо иметь в виду. > > > > Эм, те кому нада "обход блокировок без СМС" - найдут в гуглях более > > "простые" решения. > Я, честно говоря, не понял вашего недовольства. Вы полагаете, что мое > замечание было настолько очевидно для всякого, > кто хоть немного преодолел уровень ??бесплатно без СМС??, что как-то глупо > было даже его озвучивать? Да. > > Те, кто может добраться до antizapret.info/api.php - им это уже и не надо. > Почему это? Это же просто база зацензуренных в России адресов? Как она тут > поможет? В оригинале было - про > Да и зачем она вообще нужна, кроме как хозяевам тем самых зондов для ??обхода > блокировок без СМС??? > [-- application/pgp-signature, encoding 7bit, 11 lines, name: signature.asc > --]
Re: Соотнесение процесса и поля QoS
On вторник, 17 сентября 2019 г. 14:33:39 MSK, Dmitry Alexandrov wrote: # echo 1 > /sys/fs/cgroup/net_cls/inet/net_cls.classid # iptables -A OUTPUT -m cgroup --cgroup 1 -j ACCEPT # ip6tables -A OUTPUT -m cgroup --cgroup 1 -j ACCEPT А, стормозил, classid — это и есть ID группы в терминах нетфильтра. Придётся воспользоваться cgroups первой версии тогда. Не люблю их за изобилие точек монтирования.
Re: Соотнесение процесса и поля QoS
On вторник, 17 сентября 2019 г. 14:33:39 MSK, Dmitry Alexandrov wrote: Но есть и одно большое но: Систем-д. Он предъявляет монопольное право на распоряжение к-группами. Оно и на первые предъявлял, просто net_cls от него был свободен. А ко вторым, как вы знаете, все контроллеры слили в один, так что вот так по-простому: ...уже не сделаешь. И ещё я не учёл 1 обстоятельство. Конечно же, так можно сделать. Ядро позволяет оставить контроллеры cpuset cpu io memory pids в единой иехархии cgroups v2, а net_cls смонтировать отдельно как cgroups v1. # mount -t cgroup -o net_cls,net_prio cgroup /mnt/cgroup_v1/ # mount | grep cgroup cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate) cgroup on /mnt/cgroup_v1 type cgroup (rw,relatime,net_cls,net_prio) # ls -1 /sys/fs/cgroup/ cgroup.controllers cgroup.max.depth cgroup.max.descendants cgroup.procs cgroup.stat cgroup.subtree_control cgroup.threads cpuset.cpus.effective cpuset.mems.effective init.scope system.slice user.slice # ls -1 /mnt/cgroup_v1/ cgroup.clone_children cgroup.procs cgroup.sane_behavior net_cls.classid net_prio.ifpriomap net_prio.prioidx notify_on_release release_agent tasks Единственное неудобство, что не получилось создать точку монтирования в /sys.
Re: Соотнесение процесса и поля QoS
Pavel Volkov wrote: > On вторник, 17 сентября 2019 г. 14:33:39 MSK, Dmitry Alexandrov wrote: >>> Попробую изучить cgroup-ы, а это свойство есть и в v1, и в v2? >> Нет, это в первых. А в Дебиан уже по-умолчанию вторые завезли? > > Да, есть и первые, и вторые. А, ну тогда пока все в порядке. > Чтобы systemd использовал и монтировал вторые, надо добавить аргумент ядру: > systemd.unified_cgroup_hierarchy=1 Ну да, «unified» — это как раз для первых и вторых разом. >> Тогда там само-то по себе все еще удобнее: возиться вручную с цифирью (а >> classid это число), если надо много разных классов создавать, уже не надо, >> можно буквами писать. >> >> Но есть и одно большое но: Систем-д. Он предъявляет монопольное право на >> распоряжение к-группами. Оно и на первые предъявлял, просто net_cls от него >> был свободен. А ко вторым, как вы знаете, все контроллеры слили в один, так >> что вот так по-простому: ...уже не сделаешь. Надо какой-то огород городить, >> чтобы при логине создавалось по своему ‘inet’у на каждого пользователя, >> причем вместе с отдельными правилами для Нетфильтра (хотя по делу они нафиг >> и не нужны). >> > > Я предполагаю делать так: $ systemd-run --user --scope --unit=inet.scope > my_program Не так. Ибо так при запуске следующей программы будет: $ systemd-run --user --scope --unit=inet iceweasel Failed to start transient scope unit: Unit inet.scope already exists. «inet» и прочие именные к-группы для Систем-д должны быть slice’ами, а не scope’ами, то есть либо: $ systemd-run --user --slice=inet --scope iceweasel либо уж службой (ключи подобрать по вкусу): $ systemd-run --user --slice=inet --collect iceweasel $ systemd-run --user --slice=inet --pty --same-dir --wait --collect --service-type=exec bash В любом случае без побочек не обойтись. Так, для logind они больше не будут частью сессии, например. > При этом запускается my_program, и она засовывается в новую c-группу > inet.scope, которая является подгруппой user@1000.service. И даже не нужны > рут-права, и файлы от этой группы в /sys/fs/ тоже принадлежат пользователю. Ну как же не нужны, когда Нетфильтр управляется только им (и в этом весь его смысл)? > Далее я бы хотел добавить примерно такое правило в nftables: # nft add rule > filter output meta cgroup <...> ip dscp set <...> > > Но не пойму, как определить числовой идентификатор группы, который тут > требуется. systemd-cgls его не сообщает, а и в /sys/fs/cgroup тоже его нет. Вот-вот, в этом и затык, я же говорю: нету теперь его. Если с первыми к-группами без Систем-д достаточно было один раз при запуске системы общие правила для Нетфильтра подгрузить, то со вторыми под Систем-д придется для каждого пользователя отдельные заводить, причем не раньше чем этот пользователь залогинится. А как соберется разлогинится — желательно бы удалять, хотя баг, когда иначе при следующей правке правил Нетфильтр выплюнул бы невнятную ошибку [1], вроде бы исправили. [1] https://bugzilla.kernel.org/show_bug.cgi?id=201789 Pavel Volkov wrote: > On вторник, 17 сентября 2019 г. 14:33:39 MSK, Dmitry Alexandrov wrote: >> # echo 1 > /sys/fs/cgroup/net_cls/inet/net_cls.classid >> # iptables -A OUTPUT -m cgroup --cgroup 1 -j ACCEPT >> # ip6tables -A OUTPUT -m cgroup --cgroup 1 -j ACCEPT > > А, стормозил, classid — это и есть ID группы в терминах нетфильтра. Придётся > воспользоваться cgroups первой версии тогда. Не люблю их за изобилие точек > монтирования. Да, как видите, лучше бы их за это как раз любили. :-) Ибо гибкость — большое благо. Причем они ведь достаточно были гибкими, чтобы если уж так кому хочется, то подмонтировать их все разом в такой же unified каталог, но нет: право выбора надо было выпилить. signature.asc Description: PGP signature
Re: Соотнесение процесса и поля QoS
Pavel Volkov wrote: > On вторник, 17 сентября 2019 г. 14:33:39 MSK, Dmitry Alexandrov wrote: >> Но есть и одно большое но: Систем-д. Он предъявляет монопольное право на >> распоряжение к-группами. Оно и на первые предъявлял, просто net_cls от него >> был свободен. А ко вторым, как вы знаете, все контроллеры слили в один, так >> что вот так по-простому: ...уже не сделаешь. > > И ещё я не учёл 1 обстоятельство. Конечно же, так можно сделать. Ну да, воспользовавшись первыми. ;-) > Ядро позволяет оставить контроллеры cpuset cpu io memory pids в единой > иехархии cgroups v2, а net_cls смонтировать отдельно как cgroups v1. > > # mount -t cgroup -o net_cls,net_prio cgroup /mnt/cgroup_v1/ > Единственное неудобство, что не получилось создать точку монтирования в /sys. А вот это интересно! Я бы даже не сказал пока, что это неудобство. Спасибо за идею: когда первые к-группы решат таки выкинуть из умолчаний, надо будет взять на вооружение. signature.asc Description: PGP signature
Re: Соотнесение процесса и поля QoS
Dmitry Alexandrov <321...@gmail.com> wrote: > Pavel Volkov wrote: >> Чтобы systemd использовал и монтировал вторые, надо добавить аргумент ядру: >> systemd.unified_cgroup_hierarchy=1 > > Ну да, «unified» — это как раз для первых и вторых разом. Ай, невнятно написал. В смысле, каталог unified в /sys/fs/cgroup/ будет существовать только если к-группы используются гибридно. Короче, не обращайте внимание на это предложение. signature.asc Description: PGP signature
Re: Соотнесение процесса и поля QoS
Доброго времени суток, On Sun, Sep 15, 2019 at 12:12:10PM +0300, Pavel Volkov wrote: > Я налуркал, что в iptables есть таблица owner, где можно матчить по UID, > GID, PID. > Я использую nftables, там есть матчинг по UID, GID. > Может быть при запуске этих процессов как-то менять им GID? У меня для аналогичного эффекта (ограничение доступа к сети для некой проприетарщины) много лет используется вот такой простенький setgid wrapper в комбинации c owner GID match в OUTPUT chain: /* 8< / #define _GNU_SOURCE #include #include extern char **environ; int main(int argc, char *argv[]) { gid_t rgid, egid, sgid; /* needs at least one argument (an executable file to run) */ if (argc < 2) return 1; /* get the process GIDs */ if (getresgid(&rgid, &egid, &sgid) < 0) return 2; /* set all GIDs to EGID, so that no further change is possible */ if (setresgid(egid, egid, egid) < 0) return 3; /* execute argv[1] with the rest of args, in the same evironment */ return execve(argv[1], &argv[1], environ); } /* >8 / Компилируется, кладётся в /sbin или ещё куда. # chgrp <нужная_группа> /sbin/grpwrapper # chmod g+s /sbin/grpwrapper > Но я бы хотел, чтобы создаваемые ими файлы всё-таки имели исходный GID. С wrapper-ом типа вышеприведённого этого можно добиться, если GID != EGID. Например, заменив соответствующую строчку в коде на setresgid(egid, rgid, egid) Но, как я понимаю, в такой постановке, запущенная через execve() программа сможет поменять свой GID (исходный egid родителя) на свой же EGID (исходный rgid родителя), что может оказаться дырой в защите, или же, приравняв EGID к GID, поломать нужное поведение с файлами. И CAPABILITIES тут не помогут (поправьте, если вру)... -- Stanislav
Re: Соотнесение процесса и поля QoS
On Sat, Sep 21, 2019 at 10:37:15PM +0100, Stanislav Maslovski wrote: > On Sun, Sep 15, 2019 at 12:12:10PM +0300, Pavel Volkov wrote: > > Я налуркал, что в iptables есть таблица owner, где можно матчить по UID, > > GID, PID. > > Я использую nftables, там есть матчинг по UID, GID. > > Может быть при запуске этих процессов как-то менять им GID? > > У меня для аналогичного эффекта (ограничение доступа к сети для некой > проприетарщины) много лет используется вот такой простенький setgid > wrapper в комбинации c owner GID match в OUTPUT chain: > ... В пакете util-linux есть setpriv(1). -- Eugene Berdnikov
Re: Соотнесение процесса и поля QoS
On Sun, Sep 22, 2019 at 01:47:13PM +0300, Eugene Berdnikov wrote: > On Sat, Sep 21, 2019 at 10:37:15PM +0100, Stanislav Maslovski wrote: > > On Sun, Sep 15, 2019 at 12:12:10PM +0300, Pavel Volkov wrote: > > > Я налуркал, что в iptables есть таблица owner, где можно матчить по UID, > > > GID, PID. > > > Я использую nftables, там есть матчинг по UID, GID. > > > Может быть при запуске этих процессов как-то менять им GID? > > > > У меня для аналогичного эффекта (ограничение доступа к сети для некой > > проприетарщины) много лет используется вот такой простенький setgid > > wrapper в комбинации c owner GID match в OUTPUT chain: > > ... > > В пакете util-linux есть setpriv(1). Это полезная утилита, но она требует прав рута для своей работы. А мне нужно ограничить доступ для приложения, которое запускается обычным пользователем. Кстати, и автору оригинального поста тоже. Можно, конечно, поставить setgid на бинарник setpriv-а (или на копию) на нужную группу, но это уже выйдет как из (предварительно заглушённой) пушки по воробьям стрелять. -- Stanislav
Re: Соотнесение процесса и поля QoS
On Sun, Sep 22, 2019 at 04:11:55PM +0100, Stanislav Maslovski wrote: > On Sun, Sep 22, 2019 at 01:47:13PM +0300, Eugene Berdnikov wrote: > > В пакете util-linux есть setpriv(1). > > Это полезная утилита, но она требует прав рута для своей работы. А мне > нужно ограничить доступ для приложения, которое запускается обычным > пользователем. Кстати, и автору оригинального поста тоже. > > Можно, конечно, поставить setgid на бинарник setpriv-а (или на копию) на > нужную группу, но это уже выйдет как из (предварительно заглушённой) > пушки по воробьям стрелять. Есть ещё sudo. Да, бутерброд выходит, но ничего самому писать на Си не нужно, только скрестить правильно базовые программы. Unix-way. -- Eugene Berdnikov
Re: Соотнесение процесса и поля QoS
Stanislav Maslovski писал(а) в своём письме Sun, 22 Sep 2019 18:11:55 +0300: On Sun, Sep 22, 2019 at 01:47:13PM +0300, Eugene Berdnikov wrote: On Sat, Sep 21, 2019 at 10:37:15PM +0100, Stanislav Maslovski wrote: > On Sun, Sep 15, 2019 at 12:12:10PM +0300, Pavel Volkov wrote: > > Я налуркал, что в iptables есть таблица owner, где можно матчить по UID, > > GID, PID. > > Я использую nftables, там есть матчинг по UID, GID. > > Может быть при запуске этих процессов как-то менять им GID? > > У меня для аналогичного эффекта (ограничение доступа к сети для некой > проприетарщины) много лет используется вот такой простенький setgid > wrapper в комбинации c owner GID match в OUTPUT chain: > ... В пакете util-linux есть setpriv(1). Это полезная утилита, но она требует прав рута для своей работы. А мне нужно ограничить доступ для приложения, которое запускается обычным пользователем. Кстати, и автору оригинального поста тоже. Можно, конечно, поставить setgid на бинарник setpriv-а (или на копию) на нужную группу, но это уже выйдет как из (предварительно заглушённой) пушки по воробьям стрелять. Есть ещё sg (симлинк на newgrp). Прав рута не требует, переключает на любую группу, в которой состоит пользователь. Тоже много лет использую для ограничения доступа в инет некоторым программам. -- Написано с помощью почтового клиента Opera: http://www.opera.com/mail/
Re: Соотнесение процесса и поля QoS
On Mon, Sep 23, 2019 at 10:53:56AM +0300, Eugene Berdnikov wrote: > On Sun, Sep 22, 2019 at 04:11:55PM +0100, Stanislav Maslovski wrote: > > Это полезная утилита, но она требует прав рута для своей работы. А мне > > нужно ограничить доступ для приложения, которое запускается обычным > > пользователем. Кстати, и автору оригинального поста тоже. > > > > Можно, конечно, поставить setgid на бинарник setpriv-а (или на копию) на > > нужную группу, но это уже выйдет как из (предварительно заглушённой) > > пушки по воробьям стрелять. > > Есть ещё sudo. Да, бутерброд выходит, но ничего самому писать на Си > не нужно, только скрестить правильно базовые программы. Unix-way. ИМХО, благодаря наличию компилятора в штатной системе, да ещё с полным комплектом системной документации, написание своих утилит под свои же потребности - это тоже true Unix-way ;-) -- Stanislav
Re: Соотнесение процесса и поля QoS
On Mon, Sep 23, 2019 at 11:26:18AM +0300, Михаил Касаджиков wrote: > > Можно, конечно, поставить setgid на бинарник setpriv-а (или на копию) на > > нужную группу, но это уже выйдет как из (предварительно заглушённой) > > пушки по воробьям стрелять. > > Есть ещё sg (симлинк на newgrp). Прав рута не требует, Эта утилита, в неком смысле, аналог su, но для групп. А рута она не требует только потому, что бинарник newgrp помечен setuid root. > переключает на любую группу, в которой состоит пользователь. Технически это можно сделать только с правами суперюзера. Переключение же между GID, EGID и SGID можно делать от обычного пользователя, без setuid root. ИМХО, сделать setgid прямо на нужную группу выйдет на порядок безопаснее, чем городить огород из setuid утилит... -- Stanislav
Re: Соотнесение процесса и поля QoS
Stanislav Maslovski писал(а) в своём письме Mon, 23 Sep 2019 16:32:46 +0300: On Mon, Sep 23, 2019 at 11:26:18AM +0300, Михаил Касаджиков wrote: > Можно, конечно, поставить setgid на бинарник setpriv-а (или на копию) на > нужную группу, но это уже выйдет как из (предварительно заглушённой) > пушки по воробьям стрелять. Есть ещё sg (симлинк на newgrp). Прав рута не требует, Эта утилита, в неком смысле, аналог su, но для групп. А рута она не требует только потому, что бинарник newgrp помечен setuid root. переключает на любую группу, в которой состоит пользователь. Технически это можно сделать только с правами суперюзера. Переключение же между GID, EGID и SGID можно делать от обычного пользователя, без setuid root. ИМХО, сделать setgid прямо на нужную группу выйдет на порядок безопаснее, чем городить огород из setuid утилит... Однако, использование вашего grpwrapper требует предварительной установки нужной группы на сам бинарь, а как это сделать без рута? Или заводить по бинарю для каждой желаемой группы? -- Написано с помощью почтового клиента Opera: http://www.opera.com/mail/
Re: Соотнесение процесса и поля QoS
On Mon, Sep 23, 2019 at 02:09:57PM +0100, Stanislav Maslovski wrote: > On Mon, Sep 23, 2019 at 10:53:56AM +0300, Eugene Berdnikov wrote: > > Есть ещё sudo. Да, бутерброд выходит, но ничего самому писать на Си > > не нужно, только скрестить правильно базовые программы. Unix-way. > > ИМХО, благодаря наличию компилятора в штатной системе, да ещё с полным > комплектом системной документации, написание своих утилит под свои же > потребности - это тоже true Unix-way ;-) Скорее махоDOSизм. :) В системе есть ещё штатный ассемблер, кстати. -- Eugene Berdnikov
Re: Соотнесение процесса и поля QoS
On Mon, Sep 23, 2019 at 05:03:03PM +0300, Eugene Berdnikov wrote: > On Mon, Sep 23, 2019 at 02:09:57PM +0100, Stanislav Maslovski wrote: > > ИМХО, благодаря наличию компилятора в штатной системе, да ещё с полным > > комплектом системной документации, написание своих утилит под свои же > > потребности - это тоже true Unix-way ;-) > > Скорее махоDOSизм. :) ИМХО, написание bash скриптов - ещё больший мазохизм. А приходится ;) > В системе есть ещё штатный ассемблер, кстати. Ну да, но зачем ассемблер, если есть С? -- Stanislav
Re: Соотнесение процесса и поля QoS
On Mon, Sep 23, 2019 at 04:54:27PM +0300, Михаил Касаджиков wrote: > Stanislav Maslovski писал(а) в своём письме > Mon, 23 Sep 2019 16:32:46 +0300: > > Технически это можно сделать только с правами суперюзера. > > > > Переключение же между GID, EGID и SGID можно делать от обычного > > пользователя, без setuid root. ИМХО, сделать setgid прямо на нужную > > группу выйдет на порядок безопаснее, чем городить огород из setuid > > утилит... > > Однако, использование вашего grpwrapper требует предварительной > установки нужной группы на сам бинарь, а как это сделать без рута? Совсем без рута обойтись нельзя, конечно. Но, одно дело, когда права рута используются лишь однажды, явно, администратором системы при установке wrapper-а, и другое, когда эти права неявно получает setuid root утилита, всякий раз, когда пользователь запускает свою программу. > Или заводить по бинарю для каждой желаемой группы? А много ли их надо иметь, этих групп? У меня, на данный момент, используется всего лишь одна. И wrapper, соответственно, один. -- Stanislav