База знаний Зодиак.АйТиЭм

ACL пользователи и размер

Описание реализации

Реализация представлена в виде представления с SQL-запросом, собирающим всю необходимую информацию для последующей фильтрации.

Описание вывода

Результатом выполнения представления является таблица со следующими параметрами:


Действия по настройке отчёта

Настройка отчёта состоит из 2-х этапов:

  1. Подготовка скрипта сбора данных;
  2. Подготовка представления.

Подготовка скрипта сбора данных

Для подготовки скрипта сбора данных необходимо выполнить следующие действия:

  1. Создать директиву, включающую элемент 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
  1. Во вкладке Настройки указать требуемое расписание запуска скрипта, включить сбор статистики и результата. В свойствах добавить записи 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;
  2. Назначить с помощью ассоциации созданную директиву на группу с компьютерами, выполняющими роль файлового сервера.

Подготовка представления

До начала подготовки представления требуется дождаться выполнения настроенного скрипта. Убедиться в выполнении скрипта можно с помощью панели "Статистика" внутри элемента скрипта.

Для подготовки представления необходимо выполнить следующие действия:

  1. Узнать название сформированной 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.

  1. В разделе 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
  1. Внутри SQL-запроса заменить следующие приставки:

    • X1 - число скрипта сбора данных;
  2. Перейти в подраздел Столбцы представления и выставить типы для следующих колонок:

    • 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.
  3. Выставить для каждой колонки отображаемые имена (колонка Имя);

  4. Сохранить созданное представление. В случае некорректной настройки появится предупреждение об ошибке.


Действия по применению

Для применения представления необходимо выполнить следующие действия:

  1. Открыть в веб-интерфейсе Zodiac'а раздел Представления;
  2. Открыть представление ACL users \ Size;
  3. В случае необходимости при помощи фильтра выставить ограничения на соответствующие поля;
  4. Выбрать опцию Экспорт, задать имя файла;
  5. Получить файл-отчёт формата .xlsx.

Ограничения/Комментарии

  1. Отчёт отражает лишь права на уровне SMB-подключения. Права на каждый файл внутри ресурса могут отличаться от указанных в отчёте;
  2. Скрипт собирает данные из конфигурационного файла /etc/samba/shares.conf, формируемого ALD Pro при настройке общей папки в веб-интерфейсе. В случае изменения расположения данного файла в скрипте необходимо будет изменить значение параметра config_file.