Автор Тема: Фильтрация доступа к сайтам для различных пользователей  (Прочитано 898 раз)

Оффлайн Сергей-70

  • Давно тут
  • **
  • Сообщений: 496
Добрый день! Вот собственно вопрос - каким образом осуществлять фильтрацию доступа к сети по белому списку для отдельных пользователей на одном компьютере?

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 950

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Околотемное:

В NM упоминается этот функционал, но в сизифной на sysv с wifi он не работает:
$ man nm-settings|sed -n '29,33p;138,164p'
   connection setting
       General Connection Profile Settings.

       ┌─────────────────────┬──────────────────────────────────────┬───────────────┬────────────────────────────────────────┐
       │Key Name             │ Value Type                           │ Default Value │ Value Description                      │
       ├─────────────────────┼──────────────────────────────────────┼───────────────┼────────────────────────────────────────┤
       │permissions          │ array of string                      │ []            │ An array of strings defining           │
       │                     │                                      │               │ what access a given user has           │
       │                     │                                      │               │ to this connection.  If this           │
       │                     │                                      │               │ is NULL or empty, all users            │
       │                     │                                      │               │ are allowed to access this             │
       │                     │                                      │               │ connection.  Otherwise a user          │
       │                     │                                      │               │ is allowed to access this              │
       │                     │                                      │               │ connection if and only if              │
       │                     │                                      │               │ they are in this list. Each            │
       │                     │                                      │               │ entry is of the form                   │
       │                     │                                      │               │ "[type]:[id]:[reserved]"; for          │
       │                     │                                      │               │ example, "user:dcbw:blah". At          │
       │                     │                                      │               │ this time only the "user"              │
       │                     │                                      │               │ [type] is allowed.  Any other          │
       │                     │                                      │               │ values are ignored and                 │
       │                     │                                      │               │ reserved for future use.               │
       │                     │                                      │               │ [id] is the username that              │
       │                     │                                      │               │ this permission refers to,             │
       │                     │                                      │               │ which may not contain the ":"          │
       │                     │                                      │               │ character. Any [reserved]              │
       │                     │                                      │               │ information present must be            │
       │                     │                                      │               │ ignored and is reserved for            │
       │                     │                                      │               │ future use.  All of [type],            │
       │                     │                                      │               │ [id], and [reserved] must be           │
       │                     │                                      │               │ valid UTF-8.                           │
       ├─────────────────────┼──────────────────────────────────────┼───────────────┼────────────────────────────────────────┤
permissions array of string 
An array of strings defining  what access a given user has to this connection.  If this is NULL or empty, all users  are allowed to access this   connection.  Otherwise a user is allowed to access this    connection if and only if    they are in this list. Each  entry is of the form   "[type]:[id]:[reserved]"; for example, "user:dcbw:blah". At this time only the "user" [type] is allowed.  Any other values are ignored and  reserved for future use.  [id] is the username that    this permission refers to,   which may not contain the ":" character. Any [reserved]    information present must be  ignored and is reserved for  future use.  All of [type],  [id], and [reserved] must be valid UTF-8.

(связано ли это каким-то боком с systemd vs sysv для NM как _nmconnect?)


Попытка выключить в NM сеть и уйти на перезагрузку, чтобы включение сети разрешить через рулез при наличии в группе, на старте системы приводит к обрушению Х-сервера. Поднятие Х-сов возможно через init. Есть повторяемость.


И ночью тоже видел у убунтоводов через чёрный список:
https://askubuntu.com/questions/102005/disable-networking-for-specific-users

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Попытка выключить в NM сеть и уйти на перезагрузку, чтобы включение сети разрешить через рулез при наличии в группе, на старте системы приводит к обрушению Х-сервера. Поднятие Х-сов возможно через init. Есть повторяемость.

Всё, понял, - виноват ntpd:
Если сеть отключается с перезагрузкой, на загрузке сначала стартует сервис dm. После него, при отсутствии сети, сервис ntpd долго не может отработать, gdm не успевает подняться и Х-сы рушатся.
При выключении сети в NM, отключать сервис ntpd обязательно.
Если Х-сы рухнули,
init 3
init 5
вернут их на место.

Добавлено:
Но можно это объехать и без выключения сервиса ntpd:
В
/etc/sysconfig/ntpd
для
NTPD_ARGS=
прописать опцию -S (верхний регистр)
Сразу на старте ntpd не будет устанавливать время, при выключенной сети задержка на старте сервиса ntpd исчезнет и Х-сы рушиться не будут.

Плохо то, что в ntpd нет аргумента, которым можно было бы ограничить время или количество стуков к ntp-серверу.
Стук к серверу на старте можно только включить (по-умолчанию) или выключить.
« Последнее редактирование: 27.05.2017 13:45:00 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Если сеть отключается с перезагрузкой, на загрузке сначала стартует сервис dm. После него, при отсутствии сети, сервис ntpd долго не может отработать, gdm не успевает подняться и Х-сы рушатся.

ИМХОвое:
Занимательно здесь то, что ntpd не знает что сети нет и пытается достучаться в несущесвующую сеть.
А состояние сети, ntpd оценивает по etcnet, которое краем касается NM
$ grep NETW  /etc/init.d/ntpd
is_yes "$NETWORKING" || return 0
$ grep NETW /etc/sysconfig/network
NETWORKING=yes
$ sed -n '5p; 34p' /etc/init.d/network
# description: /etc/net is network configuration software
SourceIfNotEmpty /etc/sysconfig/network

но ничего не говорит о NetworkManager, у которого свои представления о состоянии сети
$ grep . /var/lib/NetworkManager/NetworkManager.state
[main]
NetworkingEnabled=true
WirelessEnabled=true
WWANEnabled=true
$ grep . /var/lib/NetworkManager/NetworkManager.state
[main]
NetworkingEnabled=true
WirelessEnabled=false
WWANEnabled=true
$ nmcli r
WIFI-HW  WIFI      WWAN-HW  WWAN   
enabled  disabled  enabled  enabled
$ nmcli n
enabled

Честно говоря я так и не понял откуда взялись эти больше трёх минут из-за которых ntpd так задумался на старте
$ man ntpd|sed -n '29,30p'
       -s     Set  the  time immediately at startup if the local clock is off by more than 180 seconds.  Allows for a large time correction,
              eliminating the need to run rdate(8) before starting .  This is the default.

В теории проблему можно было бы решить переездом на etcnet.
Но решение одной проблемы породит другую проблему:
Выключать сеть или беспроводку придётся или от root или через sudo как минимум через etcnet скрипты.
« Последнее редактирование: 27.05.2017 16:48:26 от Speccyfighter »

Оффлайн Rider

  • /usr/sbin/control
  • *******
  • Сообщений: 1 136
dansguardian поможет.
Работает в связке со сквидом. а трафик на него загонять через iptables

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 144
    • Email
Я бы порекомендовал вообще для фильтрации https://www.skydns.ru/, очень доволен функционалом.

Если ещё в наличии имеется роутер ZyXEL Keenetic, то получаете дополнительные преимущества.
« Последнее редактирование: 28.05.2017 17:22:22 от berkut_174 »
Сноси Винду, переходи на Линукс ! :)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Я бы сказал:
Любой роутер, который умеет фильтрацию по MAC и ip-адресам.
Если компьютер только персональный.
« Последнее редактирование: 28.05.2017 17:57:59 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
На системе xfce-sysv с NetworkManager:

Просим ntpd не синхронизировать время на старте системы
$ grep ^NTPD /etc/sysconfig/ntpd
NTPD_ARGS=-S

Рулез для NetworkManager говорит что:
- Любой пользователь не состоящий в группе _nmconnect не может воспользоваться сетью если она отключена одним из пользователей группы _nmconnect.
# cat /etc/polkit-1/rules.d/60-sysvinit-nm.rules
polkit.addRule(function(action, subject) {
    if (subject.isInGroup("_nmconnect") && (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 )) {
        return polkit.Result.YES;
    }
});

При таком варианте, при засыпании в память или выключении, настоятельно рекомендуется через аплет NM или nmcli не забывать отключать сеть, чтобы пользователи, которым привилегии не делегированы, воспользоваться сетью не могли.


Детали и особенности:
1. Запрет ntpd синхронизировать время на старте системы, в системе на sysv предотвращает падение X-сервера на старте системы при отсутствии сети. Это не баг, это "фича":
- В системе с NetworkManager, ntpd из пакета openntpd, как впрочем и из пакета ntpd, не умеет анализировать состояние сети (см. скрипт /etc/init.d/ntpd), - условие по состоянию сети завязано на etcnet, - NM в это условие не входит.

2. В системе с NetworkManager отключение сети происходит общесистемно, а состояние сети или интерфейса хранится в
/var/lib/NetworkManager/NetworkManager.state
« Последнее редактирование: 28.05.2017 19:19:16 от Speccyfighter »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 099
Всё, понял, - виноват ntpd:
Если сеть отключается с перезагрузкой, на загрузке сначала стартует сервис dm. После него, при отсутствии сети, сервис ntpd долго не может отработать, gdm не успевает подняться и Х-сы рушатся.
А если ntpd переставить в порядке до dm ?

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Всё, понял, - виноват ntpd:
Если сеть отключается с перезагрузкой, на загрузке сначала стартует сервис dm. После него, при отсутствии сети, сервис ntpd долго не может отработать, gdm не успевает подняться и Х-сы рушатся.
А если ntpd переставить в порядке до dm ?

Да, это вариант, - штатно ntpd 90-й в очереди на старте:
# grep chkconfig /etc/rc.d/init.d/network
# chkconfig: 345 10 90
# grep chkconfig /etc/rc.d/init.d/NetworkManager
# chkconfig: - 12 90
# find /etc/rc.d/ -name "S*ntpd"
/etc/rc.d/rc3.d/S40ntpd
/etc/rc.d/rc4.d/S40ntpd
/etc/rc.d/rc5.d/S40ntpd
/etc/rc.d/rc2.d/S40ntpd
# find /etc/rc.d/ -name "S*dm"
/etc/rc.d/rc5.d/S45dm

Если не запрещать на старте синхронизировать время, у ntpd есть где-то 15-тисекундная задержка на старте системы, но падения X-сервера уже не будет.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Ошибка зарегистрирована:
 Bug 33512 - Краш X-сервера на старте системы с sysv и NetworkManager
https://bugzilla.altlinux.org/show_bug.cgi?id=33512