Re: Соотнесение процесса и поля QoS

2019-09-23 Пенетрантность Stanislav Maslovski
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



Re: Соотнесение процесса и поля QoS

2019-09-23 Пенетрантность Stanislav Maslovski
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

2019-09-23 Пенетрантность Eugene Berdnikov
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

2019-09-23 Пенетрантность Михаил Касаджиков

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

2019-09-23 Пенетрантность Stanislav Maslovski
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

2019-09-23 Пенетрантность Stanislav Maslovski
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

2019-09-23 Пенетрантность Михаил Касаджиков

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

2019-09-23 Пенетрантность Eugene Berdnikov
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

2019-09-22 Пенетрантность Stanislav Maslovski
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

2019-09-22 Пенетрантность Eugene Berdnikov
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

2019-09-21 Пенетрантность Stanislav Maslovski
Доброго времени суток,

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(, , ) < 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], [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

2019-09-18 Пенетрантность Dmitry Alexandrov
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

2019-09-18 Пенетрантность Dmitry Alexandrov
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

2019-09-18 Пенетрантность Dmitry Alexandrov
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

2019-09-18 Пенетрантность Pavel Volkov

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

2019-09-17 Пенетрантность Pavel Volkov

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

2019-09-17 Пенетрантность Andrey Jr. Melnikov
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

2019-09-17 Пенетрантность Andrey Jr. Melnikov
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

2019-09-17 Пенетрантность Pavel Volkov

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

2019-09-17 Пенетрантность Dmitry Alexandrov
"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

2019-09-17 Пенетрантность Dmitry Alexandrov
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

2019-09-16 Пенетрантность Andrey Jr. Melnikov
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

2019-09-16 Пенетрантность Pavel Volkov

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

2019-09-15 Пенетрантность Dmitry Alexandrov
Dmitry Alexandrov <321...@gmail.com> wrote:
> Pavel Volkov  wrote:
>> добиться, чтобы пакеты, генерируемые избранными процессами, например 
>> Firefox, содержали в заголовке определённое значение TOS?  По этому признаку 
>> я хочу заворачивать их в VPN-интерфейс на роутере.
>
> SOCKS proxy не проще настроить, не?  Или у вас процессы недоверенные?  Ну 
> тогда можно в сочетании с мандатным контролем — чтобы никуда, кроме него, не 
> подключались (остается, правда, проблема с утечками DNS).

Которая, впрочем, в контексте вашего решения и не проблема, поскольку 
попроцессная выборка не предполагает обработки DNS запросов вообще — они все 
пойдут прямо.  О чем тому, кто возможно будет читать эту ветку в поисках, 
скажем, средств для обхода цензуры, надо иметь в виду.


signature.asc
Description: PGP signature


Re: Соотнесение процесса и поля QoS

2019-09-15 Пенетрантность Dmitry Alexandrov
Pavel Volkov  wrote:
> Хочу странного.

Да нет, идея звучит очень здраво.  Но на всякий случай спрошу:

> Как вы думаете, можно ли добиться, чтобы пакеты, генерируемые избранными 
> процессами, например Firefox, содержали в заголовке определённое значение 
> TOS?  По этому признаку я хочу заворачивать их в VPN-интерфейс на роутере.

SOCKS proxy не проще настроить, не?  Или у вас процессы недоверенные?  Ну тогда 
можно в сочетании с мандатным контролем — чтобы никуда, кроме него, не 
подключались (остается, правда, проблема с утечками DNS).

> Может быть при запуске этих процессов как-то менять им GID?  Но я бы хотел, 
> чтобы создаваемые ими файлы всё-таки имели исходный GID.

В любом случае, что тогда точно не подходит, то это смена GID — процесс ведь 
вправе поменять группу на основную для пользователя.

Тут нужна какая-то изоляция.  Под описанное решение — подмена ToS Нетфильтром, 
подходят cgroups, свойство зовется net_cls.classid.


signature.asc
Description: PGP signature


Re: Соотнесение процесса и поля QoS

2019-09-15 Пенетрантность Pavel Volkov
On воскресенье, 15 сентября 2019 г. 18:37:11 MSK, Andrey Jr. Melnikov 
wrote:

запусти в соседнем namespace с отдельной IPшкой и заворачивай как попало
куда попало.


Когда-то я так делал, но с какой-то версии Firefox при запуске из сетевого 
неймспейса стал рисоваться уродливый дифолтный курсор мыши вместо моего 
красивого.




Re: Соотнесение процесса и поля QoS

2019-09-15 Пенетрантность Andrey Jr. Melnikov
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