Реализация представлена в виде представления с SQL-запросом, собирающим всю необходимую информацию для последующей фильтрации.
Результатом выполнения представления является таблица со следующими параметрами:
Настройка отчёта состоит из 2-х этапов:
Для подготовки скрипта сбора данных необходимо выполнить следующие действия:
#!/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.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.
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-запроса заменить следующие приставки:
Перейти в подраздел Столбцы представления и выставить типы для следующих колонок:
Выставить для каждой колонки отображаемые имена (колонка Имя);
Сохранить созданное представление. В случае некорректной настройки появится предупреждение об ошибке.
Для применения представления необходимо выполнить следующие действия: