ACL пользователи и размер
Описание реализации
Реализация представлена в виде представления с SQL-запросом, собирающим всю необходимую информацию для последующей фильтрации.
Описание вывода
Результатом выполнения представления является таблица со следующими параметрами:
- folder_name - имя ресурса в интерфейсе ALD Pro;
- valid_users - cписок доменных пользователей и групп пользователей, которым предоставлен доступ. Если параметр не задан, то по умолчанию доступ предоставляется всем пользователям;
- invalid_users - список пользователей с запретом доступа к ресурсу;
- vfs_objects - модель безопасности. По умолчанию posix_acl;
- path - путь к ресурсу, к которому применяются права доступа;
- writable - определяет уровень доступа «по умолчанию» для пользователей, которые не включены в списки «read_list» и «wrtie_list». Значение «yes» предоставляет доступ на запись и чтение, «no» предоставляет доступ только на чтение;
- read_list - определяет список пользователей и групп пользователей, доступ которых будет ограничен правами на чтение. Параметр «read list» имеет смысл, если пользователям по умолчанию предоставлены права на запись с помощью параметров «writable = YES» или «read only = NO». Параметр «read list» не действует, если пользователя явно включили в «write list»;
- write_list - определяет список пользователей и групп пользователей, которым будет предоставлен доступ «на изменение», т.е. «чтение» + «запись». Если пользователь через разные группы входит сразу и в «read list» и в «write list», то этому пользователю будут предоставлены права на изменение;
- force_create_mode - права доступа по умолчанию для новых файлов;
- force_directory_mode - права доступа по умолчанию для новых директорий;
- inherit_permissions - наследование разрешений. Если установлено значение «yes», то параметры «create mask», «directory mask», «force create mode» и «force directory mode» игнорируются. Новые каталоги наследуют те же разрешения, что и родительские каталоги. Новые файлы наследуют от родителя только биты чтения и записи, а биты Execute устанавливаться не будут из соображений безопасности, что подходит для обычных рабочих каталогов;
- inherit_acls - наследование acls. Если установлено значение «yes», новые файлы и подкаталоги, создаваемые в общей папке, наследуют ACL от родительского каталога;
- size - размер используемого ресурсом дискового пространства;
- admin_users - Количество оперативной памяти RAM компьютера.
Действия по настройке отчёта
Настройка отчёта состоит из 2-х этапов:
- Подготовка скрипта сбора данных;
- Подготовка представления.
Подготовка скрипта сбора данных
Для подготовки скрипта сбора данных необходимо выполнить следующие действия:
- Создать директиву, включающую элемент Shell сбора данных с текстом скрипта:
#!/bin/bash
config_file="/etc/samba/share.conf" # Путь до конфигурационного файла Samba
while IFS= read -r line; do
if [[ "$line" =~ ^\[.*\]$ ]]; then
if [[ -n "$folder_name" ]]; then
size=$(du -sh "$path" | awk '{print $1}')
echo "folder_name=$folder_name"
echo "valid_users=$valid_users"
echo "invalid_users=$invalid_users"
if [[ -n "$vfs_objects" ]]; then
echo "vfs_objects=$vfs_objects"
else
echo "vfs_objects=posix_acl"
fi
echo "path=$path"
echo "force_directory_mode=$force_directory_mode"
echo "force_create_mode=$force_create_mode"
echo "inherit_permissions=$inherit_permissions"
echo "inherit_acls=$inherit_acls"
echo "writable=$writable"
echo "size=$size"
echo "read_list=$read_list"
echo "write_list=$write_list"
echo "admin_users=$admin_users"
echo ""
fi
folder_name="${line:1:-1}"
valid_users=""
invalid_users=""
vfs_objects=""
path=""
force_directory_mode=""
force_create_mode=""
inherit_permissions=""
inherit_acls=""
writable=""
read_list=""
write_list=""
admin_users=""
else
IFS='=' read -r key value <<< "$line"
value="${value:1}"
key="${key%?}"
case "$key" in
"valid users") valid_users="$value" ;;
"invalid users") invalid_users="$value";;
"vfs objects") vfs_objects="$value" ;;
"path") path="$value" ;;
"force directory mode") force_directory_mode="$value" ;;
"force create mode ") force_create_mode="$value" ;;
"inherit permissions") inherit_permissions="$value" ;;
"inherit acls") inherit_acls="$value" ;;
"writable") writable="$value" ;;
"read list") read_list="$value" ;;
"write list") write_list="$value" ;;
"admin users") admin_users="$value" ;;
esac
fi
done < "$config_file"
if [[ -n "$folder_name" ]]; then
size=$(du -sh "$path" | awk '{print $1}')
echo "folder_name=$folder_name"
echo "valid_users=$valid_users"
echo "invalid_users=$invalid_users"
echo "vfs_objects=$vfs_objects"
echo "path=$path"
echo "force_directory_mode=$force_directory_mode"
echo "force_create_mode=$force_create_mode"
echo "inherit_permissions=$inherit_permissions"
echo "inherit_acls=$inherit_acls"
echo "writable=$writable"
echo "size=$size"
echo "read_list=$read_list"
echo "write_list=$write_list"
echo "admin_users=$admin_users"
fi
- Во вкладке Настройки указать требуемое расписание запуска скрипта, включить сбор статистики и результата. В свойствах добавить записи admin_users, folder_name, force_create_mode, force_directory_mode, inherit_acls, inherit_permissions, invalid_users, path, read_list, size, valid_users, vfs_objects, writable, write_list;
- Назначить с помощью ассоциации созданную директиву на группу с компьютерами, выполняющими роль файлового сервера.
Подготовка представления
До начала подготовки представления требуется дождаться выполнения настроенного скрипта. Убедиться в выполнении скрипта можно с помощью панели "Статистика" внутри элемента скрипта.
Для подготовки представления необходимо выполнить следующие действия:
- Узнать название сформированной Zodiac-ом таблицы с результатом выполнения скрипта.
Поскольку для отображения результатов выполнения каждого скрипта Zodiac формирует в базе данных соответствующую таблицу, предугадать заранее название данных таблиц невозможно.
Для определения названия таблицы необходимо выполнить следующие действия:
1.1 Авторизоваться под УЗ с правами администратора на компьютере, на который назначен скрипт;
1.2 Перейти в директорию /var/zodiac/agent/scrwd;
1.3 Обнаружить директорию с содержимым привязанного скрипта index.sh;
1.4 Первое число имени директории является приставкой к имени таблицы, которое в дальнейшем необходимо будет отредактировать в SQL-запросе.
Пример:
Есть скрипт, привязанный раннее к компьютеру с именем ETCD-PTR-03
Чтобы узнать приставку таблицы, созданной для сохранения результата выполнения скрипта, авторизуемся под УЗ администратора на данном компьютере и перейдём в указанную директорию.
Путем перебора обнаружим искомую директорию.
Для того, чтобы не перебирать вручную все директории, можно воспользоваться скриптом:
#!/bin/bash
# Перебираем все директории и поддиректории
find . -type d | while read dir; do
# Проверяем наличие файла index.sh в текущей директории
if [ -f "$dir/index.sh" ]; then
# Ищем слово ldapsearch в файле index.sh
if grep -q "ldapsearch" "$dir/index.sh"; then
# Если найдено, выводим название директории
echo "$dir"
fi
fi
done
Внутри скрипта потребуется указать искомое ключевое слово вместо ldapsearch и путь до директории, в которой производится поиск (если скрипт уже не находится в соответствующей директории).
В данном случае искомой приставкой является 26, т.е. названием таблицы будет являться dyn_tbl_script_26.
- В разделе Zodiac'а Представления создать новое представление с именем "ACL users \ Size" со следующим SQL-запросом:
SELECT
dyn_tbl_script_X1.data ->> 'folder_name' AS folder_name,
dyn_tbl_script_X1.data ->> 'valid_users' AS valid_users,
dyn_tbl_script_X1.data ->> 'invalid_users' AS invalid_users,
dyn_tbl_script_X1.data ->> 'vfs_objects' AS vfs_objects,
dyn_tbl_script_X1.data ->> 'path' AS path,
dyn_tbl_script_X1.data ->> 'writable' AS writable,
dyn_tbl_script_X1.data ->> 'read_list' AS read_list,
dyn_tbl_script_X1.data ->> 'write_list' AS write_list,
dyn_tbl_script_X1.data ->> 'force_create_mode' AS force_create_mode,
dyn_tbl_script_X1.data ->> 'force_directory_mode' AS force_directory_mode,
dyn_tbl_script_X1.data ->> 'inherit_permissions' AS inherit_permissions,
dyn_tbl_script_X1.data ->> 'inherit_acls' AS inherit_acls,
dyn_tbl_script_X1.data ->> 'size' AS size,
dyn_tbl_script_X1.data ->> 'admin_users' AS admin_users
FROM public.dyn_tbl_script_X1
-
Внутри SQL-запроса заменить следующие приставки:
- X1 - число скрипта сбора данных;
-
Перейти в подраздел Столбцы представления и выставить типы для следующих колонок:
- folder_name - String;
- valid_users - String;
- invalid_users - String;
- vfs_objects - String;
- path - String;
- writable - String;
- read_list - String;
- write_list - String;
- force_create_mode - String;
- force_directory_mode - String;
- inherit_permissions - String;
- inherit_acls - String;
- size - String;
- admin_users - String.
-
Выставить для каждой колонки отображаемые имена (колонка Имя);
-
Сохранить созданное представление. В случае некорректной настройки появится предупреждение об ошибке.
Действия по применению
Для применения представления необходимо выполнить следующие действия:
- Открыть в веб-интерфейсе Zodiac'а раздел Представления;
- Открыть представление ACL users \ Size;
- В случае необходимости при помощи фильтра выставить ограничения на соответствующие поля;
- Выбрать опцию Экспорт, задать имя файла;
- Получить файл-отчёт формата .xlsx.
Ограничения/Комментарии
- Отчёт отражает лишь права на уровне SMB-подключения. Права на каждый файл внутри ресурса могут отличаться от указанных в отчёте;
- Скрипт собирает данные из конфигурационного файла /etc/samba/shares.conf, формируемого ALD Pro при настройке общей папки в веб-интерфейсе. В случае изменения расположения данного файла в скрипте необходимо будет изменить значение параметра config_file.