VirtualHere конфигурация
VirtualHere конфигурация
Здравствуйте
Очень понравилась то как работает данный драйвер (ну или кто он там), для меня такой вариант подходит гораздо лучше чем рдп проброс.
Есть одно но:
на сайте сказано что можно его конфигурировать через config.ini. Это важно, т.к. например можно привязать терминал к конкретному терминальному серверу (а не как сейчас - через bonjour могут юзать все кому не лень) и ограничить пробрасываемые устройства, ну и т.д.
Так вот в чем загвоздка - если положить подготовленный zip архив с драйвером и конфигом в C:\ProgramData\WTware\Everyone (используем исключительно сетевую загрузку) - то грузить этот конфиг будут все терминалы, а вот если положить его в C:\ProgramData\WTware\Terminals\xx.xx.xx.xx.xx.xx (для конкретно взятого терминала) - то загрузки не происходит, лог ругается что файл не найден.
Отсюда вопрос, как правильно положить подготовленный zip с конфигом чтобы он грузился под конкретные терминалы? или может как то можно отдельно конфиг ему для конкретных терминалов давать...
PS: сейчас пришла в голову мысль что можно просто разные zip-ы подготовить и персонально терминалам указать кому грузить а кому нет... но ведь это костыль...
Очень понравилась то как работает данный драйвер (ну или кто он там), для меня такой вариант подходит гораздо лучше чем рдп проброс.
Есть одно но:
на сайте сказано что можно его конфигурировать через config.ini. Это важно, т.к. например можно привязать терминал к конкретному терминальному серверу (а не как сейчас - через bonjour могут юзать все кому не лень) и ограничить пробрасываемые устройства, ну и т.д.
Так вот в чем загвоздка - если положить подготовленный zip архив с драйвером и конфигом в C:\ProgramData\WTware\Everyone (используем исключительно сетевую загрузку) - то грузить этот конфиг будут все терминалы, а вот если положить его в C:\ProgramData\WTware\Terminals\xx.xx.xx.xx.xx.xx (для конкретно взятого терминала) - то загрузки не происходит, лог ругается что файл не найден.
Отсюда вопрос, как правильно положить подготовленный zip с конфигом чтобы он грузился под конкретные терминалы? или может как то можно отдельно конфиг ему для конкретных терминалов давать...
PS: сейчас пришла в голову мысль что можно просто разные zip-ы подготовить и персонально терминалам указать кому грузить а кому нет... но ведь это костыль...
-
- Разработчик
- Сообщения: 12005
- Зарегистрирован: Ср окт 01, 2003 12:06 am
- Откуда: Роcсия, Тольятти
- Контактная информация:
Re: VirtualHere конфигурация
Разные zip-ы подготовить, назвать по-разному и персонально терминалам указать, кому какой грузить. Сейчас другого варианта нет. Если данный драйвер (ну или кто он там) приживётся, осознаем задачи и добавим в конфиг параметры для него. Пока только костыль.
Re: VirtualHere конфигурация
Добрых вечеров
А может таки можно сделать так, чтоб терминалы качали vhusbdarm64 или vhusbdarm не из TFTPDROOT\Everyone, а из TFTPDROOT\Terminals\11.22.33.44.55.66, где 11.22.33.44.55.66 - МАС терминала ?
Лечить, ой , лицензировать vhusbdarm64 и vhusbdarm научились, но только под конкретный терминал. Зоопарк малин и юэсбей большой - так спасли б страну, а то и несколько и прижили бы этого "нуиликтоонтама"
зы С позволения aka запилим тут инструкцию и прикладём всё необходимое для лечения, ой , лицензирования исключительно с целью образования
-
- Разработчик
- Сообщения: 12005
- Зарегистрирован: Ср окт 01, 2003 12:06 am
- Откуда: Роcсия, Тольятти
- Контактная информация:
Re: VirtualHere конфигурация
Я могу сначала искать vhusbd* в каталоге терминала. Если в каталоге терминала файла нет, тогда искать в Everyone. Чтобы настроенное не сломалось.
Инструкцию давай, а то мне тестировать не на чем
Инструкцию давай, а то мне тестировать не на чем
Re: VirtualHere конфигурация
ДаюИнструкцию давай
(на скрине - патчится vhusdbarm64)
1. Распаковать упаковщиком vhusbd (сервер под нужную архитектуру): upx -d vhusbd
2. Скопировать серийный номер в клиенте в пункте USB серверы - Лицензия: USB Hub,s/n=123456789abcdef,1 device
3. Пропатчить vhusbd (сервер под нужную архитектуру) : meow vhusbd 63 123456789abcdef
где :
vhusbd - файл сервера virtualhere под нужную архитектуру (vhusbdarm, vhusbdmipsel, vhusbdwin64.exe и др.)
63 - количество устройств (1-64)
123456789abcdef - серийный номер сервера
Получаем:
patched (28:0)
License=123456789abcdef,63,XXXXXXXXXXXX (на скрине XXXXXXXXXXXX - это MCACDjozpN6uHpmQydUEZyoFAg4xuDb+tKJnlouNwAuA8g==)
Первая цифра в patched показывает текущее количество пропатченных байт, вторая количество найденных уже пропатченных байт.
Как правило, должно быть 28, для vhusbdosx будет 56.
4. Полученный vhusbd (сервер под нужную архитектуру) сжать упаковщиком: upx -9 vhusbd
UPD: с полученным vhusbd действовать по этой инструкции, начиная с п2.
5. В клиенте в пункте USB серверы - Лицензия - Ввести ключ, вводим полученный ключ: 123456789abcdef,63,XXXXXXXXXXXX
Должна появиться лицензия: USB Hub,s/n=123456789abcdef,63 devices
Если после активации все устройства требуют авторизации, нужно уменьшить количество устройств.
Коробка с инструментом тут
В наборе: сам инструмент, vhusbd (не патченные, под разные платформы)
Ключи от коробки с инструментом: mrrrmeow@2024
Последний раз редактировалось =F$H= Чт ноя 14, 2024 4:58 pm, всего редактировалось 2 раза.
Re: VirtualHere конфигурация
может уже есть чего потестить
-
- Разработчик
- Сообщения: 12005
- Зарегистрирован: Ср окт 01, 2003 12:06 am
- Откуда: Роcсия, Тольятти
- Контактная информация:
Re: VirtualHere конфигурация
Для лицензии в втвари параметр есть, чтобы не вводить руками в клиента:
Попробуй такое: http://wtware.com/testing/202410292109/ ... .43.en.zip
Сделал загрузку vhusbd* из Terminals\11.22.33.44.55.66\ Если там файла нет, то будет грузить как раньше из Everyone\
Код: Выделить всё
vhusb_license=123456789abcdef,63,MCACDjozpN6uHpmQydUEZyoFAg4xuDb+tKJnlouNwAuA8g==
Сделал загрузку vhusbd* из Terminals\11.22.33.44.55.66\ Если там файла нет, то будет грузить как раньше из Everyone\
Re: VirtualHere конфигурация
попробовал - едет как задумано \ /
когда релиз?
когда релиз?
-
- Разработчик
- Сообщения: 12005
- Зарегистрирован: Ср окт 01, 2003 12:06 am
- Откуда: Роcсия, Тольятти
- Контактная информация:
Re: VirtualHere конфигурация
Сегодня релиз.
Re: VirtualHere конфигурация
Virtualhere хорошая штука но как показала практика надо точно понимать что делаешь когда в паре с ним работает RDP
может кому надо (пока без SSL....), обязательно используйте нестандартный порт, всегда вырубайте обнаружение AVAHI! тут нет всяких файрволов и прочего как в том же diskcontrol и сам скрипт не спасает от блокировки сервера если к нему залезли 2 клиента (но не даст левому клиенту подрубить устройство)
установка в runme
#!/bin/sh
mkdir /tmp/vhusbd
mv bash-static /tmp/vhusbd
mv vhusbdarmpi3 /tmp/vhusbd
mv vhusdconfig.ini /tmp/vhusbd
mv auth.sh /tmp/vhusbd
chmod ugo+x /tmp/vhusbd/bash-static
chmod ugo+x /tmp/vhusbd/vhusbdarmpi3
chmod ugo+x /tmp/vhusbd/auth.sh
/tmp/vhusbd/vhusbdarmpi3 -b -c /tmp/vhusbd/vhusdconfig.ini -r /tmp/vhusbd/vhbus_sys.log
в файле конфигурации vhusdconfig.ini
ClientAuthorization=/tmp/vhusbd/auth.sh "$VENDOR_ID$" "$PRODUCT_ID$" "$CLIENT_ID$" "$CLIENT_IP$" "$PRODUCT_SERIAL$" "$PASSWORD$" "$DEVPATH$" "$NICKNAME$"
Обязательно тут же пропишите минимум IgnoredDevices=424/* + добавьте сюда ваши клавиатуру и мышь.
Если вам нужно чтоб несколько клиентов могли подцепится к одной PI то запускайте несколько процессов на разных портах со своими конфигами, в них пишите какие порты сервер не может использовать IgnoredBuses=1-1.2,1-1.3, (запятая в конце строки параметра обязатальна!)
скрипт auth.sh
Не забываем качать bash-static под конкретный pi и именно armel (понимает синтаксис этого скрипта)
#!/tmp/vhusbd/bash-static
# Example script for performing advanced user authorization for VirtualHere
# Sponsored by ben@wildblue.de
#
# Return 1 if the user is allowed to access this device
# Return 0 if the user is not allowed to access this device
# Return 3 if the user needs to provide a username AND password (or the password is incorrect) to use the device
# Return 2 if the user needs to provide ONLY a password (or the password is incorrect) to use the device. The username defaults to the client OS username
#
# Parameters are passed in as:
# $1 = VENDOR_ID
# $2 = PRODUCT_ID
# $3 = CLIENT_ID
# $4 = CLIENT_IP
# $5 = PRODUCT_SERIAL
# $6 = PASSWORD
# $7 = DEVPATH
# $8 = NICKNAME
# $9 = NUM_BINDINGS
#
# https://packages.debian.org/sid/bash-static
# https://packages.debian.org/sid/armel/b ... c/download - bash-static with array support
# Generate md5 in Windows cmd: CertUtil -hashfile C:\temp\password.txt MD5 | findstr /v "the password that is in the file password.txt" > C:\temp\password_hash.txt
# "mypassword" = "34819d7beeabb9260a5c854bc85b3e44" as an MD5 hash
# Example: ./auth.sh "0529" "0001" "ben (ben)" "192.168.1.100" ""
# ----------------------------------------------------------------------
# Нельзя допускать пробелы в параметрах массива
# Enable Logging of all Requests
ENABLE_LOGGING=true;
LOGFILE=/tmp/vhusbd/vhbus_auth.log;
#Pi
#LAN|2|4
#LAN|3|5
# Configured Port Number On HUB
# USBPORT_CONFIG_X=( UniqueID "Port_NickName" "USBPort_Path");
USBPORT_CONFIG_0=( 0 "AllPortPathAllowed" ALL );
USBPORT_CONFIG_1=( 1 "Port-LeftTop" "usb1/1-1/1-1.2" );
USBPORT_CONFIG_2=( 2 "Port-LeftBottom" "usb1/1-1/1-1.3" );
USBPORT_CONFIG_3=( 3 "Port-RightTop" "usb1/1-1/1-1.4" );
USBPORT_CONFIG_4=( 4 "Port-RighnBottom" "usb1/1-1/1-1.5" );
# Configured Devices 0529 0001 - rutoken & etc
# DEVICE_CONFIG_X=( UniqueID "Device_NickName" "VendorID" "ProductID");
DEVICE_CONFIG_0=( 0 "AllDeviceAllowed" ALL );
DEVICE_CONFIG_1=( 1 "USB-Dongle" "0529" "0001" );
DEVICE_CONFIG_2=( 2 "KVM-Switch" "0B39" "1001" );
DEVICE_CONFIG_4=( 4 "Unknown" "0424" ALL );
#DEVICE_CONFIG_3=( 3 "Mouse" "0A01" "1000" );
#DEVICE_CONFIG_4=( 4 "ZK7500-Fingerprint-Reader" "1b55" "0820" );
#DEVICE_CONFIG_5=( 5 "1C-HASP-LIC" "0529" "0001");
# Configured Users
# USER_CONFIG_X=( UniqueID "username" );
USER_CONFIG_0=( 0 ALL );
USER_CONFIG_1=( 1 "User1" );
USER_CONFIG_2=( 2 "User2" );
# Configured IP Addresses
# IP_CONFIG_X=( UniqueID "Computer_NickName" "IP-address" );
IP_CONFIG_0=( 0 ALL );
IP_CONFIG_1=( 1 "VDI34" "192.186.10.64" );
#IP_CONFIG_2=( 2 "serverX" "10.10.10.1" ); #
#Configured Rule List
# RULE_LIST_X=(UniqueID USBPORT_ID DEVICE_ID USER_ID IP_ID ACTION)
RULE_LIST_0=( 0 ALL 4 ALL ALL DENY );
RULE_LIST_1=( 1 ALL ALL 1 1 ALLOW );
RULE_LIST_2=( 2 ALL ALL 2 1 ALLOW );
RULE_LIST_3=( 3 ALL ALL ALL ALL ALLOW );
# ----------------------------------------------------------------------
# Map Parameters to readable VariableNames
VENDOR_ID=$1;
PRODUCT_ID=$2;
CLIENT_ID=$3;
CLIENT_IP=$4;
PRODUCT_SERIAL=$5;
DEVPATH=$7;
CURRENT_USBPORT=();
for ARRAY_NAME in ${!USBPORT_CONFIG_@}; do
# Get Data from USBPortConfig-Array
USBPORT_CONFIG=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check USBPortConfig-Arguments
COUNT_ARGS=${#USBPORT_CONFIG[@]};
if [[ $COUNT_ARGS -gt 1 ]]; then
# Is this the CurrentRequested USB Port
USBPORT_DEVPATH=${USBPORT_CONFIG[2]};
if [[ "$DEVPATH" == *"$USBPORT_DEVPATH"* ]]; then
CURRENT_USBPORT=(${USBPORT_CONFIG[@]});
fi
fi
done;
if [[ "${#CURRENT_USBPORT[*]}" -eq 0 ]]; then CURRENT_USBPORT=(${USBPORT_CONFIG_0[@]}); fi
CURRENT_DEVICE=();
for ARRAY_NAME in ${!DEVICE_CONFIG_@}; do
# Get Data from DeviceConfig-Array
DEVICE_CONFIG=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check DeviceConfig-Arguments
COUNT_ARGS=${#DEVICE_CONFIG[@]};
if [[ $COUNT_ARGS -eq 4 ]]; then
# This Device has a complete DataSet
# Is this the CurrentRequested Device
DEVICE_VENDOR_ID=${DEVICE_CONFIG[2]};
DEVICE_PRODUCT_ID=${DEVICE_CONFIG[3]};
if [ "$VENDOR_ID" == "$DEVICE_VENDOR_ID" ] &&
( [ "$DEVICE_PRODUCT_ID" == "ALL" ] || [ "$PRODUCT_ID" == "$DEVICE_PRODUCT_ID" ] ); then
CURRENT_DEVICE=(${DEVICE_CONFIG[@]});
fi
fi
done;
if [[ "${#CURRENT_DEVICE[*]}" -eq 0 ]]; then CURRENT_DEVICE=(${DEVICE_CONFIG_0[@]}); fi
CURRENT_USER=();
for ARRAY_NAME in ${!USER_CONFIG_@}; do
# Get Data from UserConfig-Array
USER_CONFIG=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check UserConfig-Arguments
COUNT_ARGS=${#USER_CONFIG[@]};
if [[ $COUNT_ARGS -gt 1 ]]; then
# This User has Device-Authentification specified
# Is this the CurrentRequested User
USER_NAME=${USER_CONFIG[1]};
if [[ "$CLIENT_ID" == *"($USER_NAME)"* ]]; then
CURRENT_USER=(${USER_CONFIG[@]});
fi
fi
done;
if [[ "${#CURRENT_USER[*]}" -eq 0 ]]; then CURRENT_USER=(${USER_CONFIG_0[@]}); fi
CURRENT_IPADDRESS=();
for ARRAY_NAME in ${!IP_CONFIG_@}; do
# Get Data from IPConfig-Array
IP_CONFIG=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check IPConfig-Arguments
COUNT_ARGS=${#IP_CONFIG[@]};
if [[ $COUNT_ARGS -gt 2 ]]; then
# This IP-Address has a complete DataSet
# Is this the CurrentRequested IP-Address
IP_ADDRESS=${IP_CONFIG[2]};
if [[ "$CLIENT_IP" == "$IP_ADDRESS" ]]; then
CURRENT_IPADDRESS=(${IP_CONFIG[@]});
fi
fi
done;
if [[ "${#CURRENT_IPADDRESS[*]}" -eq 0 ]]; then CURRENT_IPADDRESS=(${IP_CONFIG_0[@]}); fi
AUTHORIZED=false;
AUTH_RESULT="NOT Authorized!";
if ! ( [ "${#CURRENT_USBPORT[*]}" -gt 0 ] &&
[ "${#CURRENT_DEVICE[*]}" -gt 0 ] &&
[ "${#CURRENT_USER[*]}" -gt 0 ] &&
[ "${#CURRENT_IPADDRESS[*]}" -gt 0 ] ); then
echo "---------------------------------------------------------------------------------------------" >> $LOGFILE;
echo " Used Parameters : Error" >> $LOGFILE;
exit 0;
fi
# Configured Device-Port-User-IpAddress Authorization
CURRENT_RULE=();
for ARRAY_NAME in ${!RULE_LIST_@}; do
USBPORT_AUTHORIZED=false;
DEVICE_AUTHORIZED=false;
USER_AUTHORIZED=false;
IPADDRESS_AUTHORIZED=false;
# Get Data from RuleConfig-Array
RULE_LIST=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check RuleConfig-Arguments
COUNT_ARGS=${#RULE_LIST[@]};
if [[ $COUNT_ARGS -eq 6 ]]; then
# This Device has a complete DataSet
# Is this the CurrentRequested Device
USBPORT_ID=${RULE_LIST[1]};
DEVICE_ID=${RULE_LIST[2]};
USER_ID=${RULE_LIST[3]};
IP_ID=${RULE_LIST[4]};
ACTION_ID=${RULE_LIST[5]};
if [ "$USBPORT_ID" == "ALL" ] ||
[ "$USBPORT_ID" == ${CURRENT_USBPORT[0]} ]; then
USBPORT_AUTHORIZED=true;
fi
if [ "$DEVICE_ID" == "ALL" ] ||
[ "$DEVICE_ID" == ${CURRENT_DEVICE[0]} ]; then
DEVICE_AUTHORIZED=true;
fi
if [ "$USER_ID" == "ALL" ] ||
[ "$USER_ID" == ${CURRENT_USER[0]} ]; then
USER_AUTHORIZED=true;
fi
if [ "$IP_ID" == "ALL" ] ||
[ "$IP_ID" == ${CURRENT_IPADDRESS[0]} ]; then
IPADDRESS_AUTHORIZED=true;
fi
fi
if [ "$USBPORT_AUTHORIZED" == true ] &&
[ "$DEVICE_AUTHORIZED" == true ] &&
[ "$USER_AUTHORIZED" == true ] &&
[ "$IPADDRESS_AUTHORIZED" == true ]; then
if [ "$ACTION_ID" == "ALLOW" ]; then
AUTHORIZED=true;
AUTH_RESULT="Authorized!";
fi
break;
fi
done;
# Define Logging
if [[ "$ENABLE_LOGGING" == true ]]; then
echo "---------------------------------------------------------------------------------------------" >> $LOGFILE;
echo "Authorizing -> '$1' '$2' '$3' '$4' '$5' '$6' '$7' '$8' '$9'" >> $LOGFILE;
# Create new Logfile-Entry with current Date, User and Parameters
echo "`date`, User: [$USER]" >> $LOGFILE;
echo " Used Parameters : ['$1' '$2' '$3' '$4' '$5']" >> $LOGFILE;
echo " Selected Device : ${CURRENT_DEVICE[@]}" >> $LOGFILE;
echo " Selected USB Port : ${CURRENT_USBPORT[@]}" >> $LOGFILE;
echo " Selected User : ${CURRENT_USER[@]}" >> $LOGFILE;
echo " Selected IP-Address : ${CURRENT_IPADDRESS[@]}" >> $LOGFILE;
echo " Auth-Result : $AUTH_RESULT" >> $LOGFILE;
fi
if [[ "$AUTHORIZED" == true ]]; then exit 1;
else exit 0; fi
может кому надо (пока без SSL....), обязательно используйте нестандартный порт, всегда вырубайте обнаружение AVAHI! тут нет всяких файрволов и прочего как в том же diskcontrol и сам скрипт не спасает от блокировки сервера если к нему залезли 2 клиента (но не даст левому клиенту подрубить устройство)
установка в runme
#!/bin/sh
mkdir /tmp/vhusbd
mv bash-static /tmp/vhusbd
mv vhusbdarmpi3 /tmp/vhusbd
mv vhusdconfig.ini /tmp/vhusbd
mv auth.sh /tmp/vhusbd
chmod ugo+x /tmp/vhusbd/bash-static
chmod ugo+x /tmp/vhusbd/vhusbdarmpi3
chmod ugo+x /tmp/vhusbd/auth.sh
/tmp/vhusbd/vhusbdarmpi3 -b -c /tmp/vhusbd/vhusdconfig.ini -r /tmp/vhusbd/vhbus_sys.log
в файле конфигурации vhusdconfig.ini
ClientAuthorization=/tmp/vhusbd/auth.sh "$VENDOR_ID$" "$PRODUCT_ID$" "$CLIENT_ID$" "$CLIENT_IP$" "$PRODUCT_SERIAL$" "$PASSWORD$" "$DEVPATH$" "$NICKNAME$"
Обязательно тут же пропишите минимум IgnoredDevices=424/* + добавьте сюда ваши клавиатуру и мышь.
Если вам нужно чтоб несколько клиентов могли подцепится к одной PI то запускайте несколько процессов на разных портах со своими конфигами, в них пишите какие порты сервер не может использовать IgnoredBuses=1-1.2,1-1.3, (запятая в конце строки параметра обязатальна!)
скрипт auth.sh
Не забываем качать bash-static под конкретный pi и именно armel (понимает синтаксис этого скрипта)
#!/tmp/vhusbd/bash-static
# Example script for performing advanced user authorization for VirtualHere
# Sponsored by ben@wildblue.de
#
# Return 1 if the user is allowed to access this device
# Return 0 if the user is not allowed to access this device
# Return 3 if the user needs to provide a username AND password (or the password is incorrect) to use the device
# Return 2 if the user needs to provide ONLY a password (or the password is incorrect) to use the device. The username defaults to the client OS username
#
# Parameters are passed in as:
# $1 = VENDOR_ID
# $2 = PRODUCT_ID
# $3 = CLIENT_ID
# $4 = CLIENT_IP
# $5 = PRODUCT_SERIAL
# $6 = PASSWORD
# $7 = DEVPATH
# $8 = NICKNAME
# $9 = NUM_BINDINGS
#
# https://packages.debian.org/sid/bash-static
# https://packages.debian.org/sid/armel/b ... c/download - bash-static with array support
# Generate md5 in Windows cmd: CertUtil -hashfile C:\temp\password.txt MD5 | findstr /v "the password that is in the file password.txt" > C:\temp\password_hash.txt
# "mypassword" = "34819d7beeabb9260a5c854bc85b3e44" as an MD5 hash
# Example: ./auth.sh "0529" "0001" "ben (ben)" "192.168.1.100" ""
# ----------------------------------------------------------------------
# Нельзя допускать пробелы в параметрах массива
# Enable Logging of all Requests
ENABLE_LOGGING=true;
LOGFILE=/tmp/vhusbd/vhbus_auth.log;
#Pi
#LAN|2|4
#LAN|3|5
# Configured Port Number On HUB
# USBPORT_CONFIG_X=( UniqueID "Port_NickName" "USBPort_Path");
USBPORT_CONFIG_0=( 0 "AllPortPathAllowed" ALL );
USBPORT_CONFIG_1=( 1 "Port-LeftTop" "usb1/1-1/1-1.2" );
USBPORT_CONFIG_2=( 2 "Port-LeftBottom" "usb1/1-1/1-1.3" );
USBPORT_CONFIG_3=( 3 "Port-RightTop" "usb1/1-1/1-1.4" );
USBPORT_CONFIG_4=( 4 "Port-RighnBottom" "usb1/1-1/1-1.5" );
# Configured Devices 0529 0001 - rutoken & etc
# DEVICE_CONFIG_X=( UniqueID "Device_NickName" "VendorID" "ProductID");
DEVICE_CONFIG_0=( 0 "AllDeviceAllowed" ALL );
DEVICE_CONFIG_1=( 1 "USB-Dongle" "0529" "0001" );
DEVICE_CONFIG_2=( 2 "KVM-Switch" "0B39" "1001" );
DEVICE_CONFIG_4=( 4 "Unknown" "0424" ALL );
#DEVICE_CONFIG_3=( 3 "Mouse" "0A01" "1000" );
#DEVICE_CONFIG_4=( 4 "ZK7500-Fingerprint-Reader" "1b55" "0820" );
#DEVICE_CONFIG_5=( 5 "1C-HASP-LIC" "0529" "0001");
# Configured Users
# USER_CONFIG_X=( UniqueID "username" );
USER_CONFIG_0=( 0 ALL );
USER_CONFIG_1=( 1 "User1" );
USER_CONFIG_2=( 2 "User2" );
# Configured IP Addresses
# IP_CONFIG_X=( UniqueID "Computer_NickName" "IP-address" );
IP_CONFIG_0=( 0 ALL );
IP_CONFIG_1=( 1 "VDI34" "192.186.10.64" );
#IP_CONFIG_2=( 2 "serverX" "10.10.10.1" ); #
#Configured Rule List
# RULE_LIST_X=(UniqueID USBPORT_ID DEVICE_ID USER_ID IP_ID ACTION)
RULE_LIST_0=( 0 ALL 4 ALL ALL DENY );
RULE_LIST_1=( 1 ALL ALL 1 1 ALLOW );
RULE_LIST_2=( 2 ALL ALL 2 1 ALLOW );
RULE_LIST_3=( 3 ALL ALL ALL ALL ALLOW );
# ----------------------------------------------------------------------
# Map Parameters to readable VariableNames
VENDOR_ID=$1;
PRODUCT_ID=$2;
CLIENT_ID=$3;
CLIENT_IP=$4;
PRODUCT_SERIAL=$5;
DEVPATH=$7;
CURRENT_USBPORT=();
for ARRAY_NAME in ${!USBPORT_CONFIG_@}; do
# Get Data from USBPortConfig-Array
USBPORT_CONFIG=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check USBPortConfig-Arguments
COUNT_ARGS=${#USBPORT_CONFIG[@]};
if [[ $COUNT_ARGS -gt 1 ]]; then
# Is this the CurrentRequested USB Port
USBPORT_DEVPATH=${USBPORT_CONFIG[2]};
if [[ "$DEVPATH" == *"$USBPORT_DEVPATH"* ]]; then
CURRENT_USBPORT=(${USBPORT_CONFIG[@]});
fi
fi
done;
if [[ "${#CURRENT_USBPORT[*]}" -eq 0 ]]; then CURRENT_USBPORT=(${USBPORT_CONFIG_0[@]}); fi
CURRENT_DEVICE=();
for ARRAY_NAME in ${!DEVICE_CONFIG_@}; do
# Get Data from DeviceConfig-Array
DEVICE_CONFIG=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check DeviceConfig-Arguments
COUNT_ARGS=${#DEVICE_CONFIG[@]};
if [[ $COUNT_ARGS -eq 4 ]]; then
# This Device has a complete DataSet
# Is this the CurrentRequested Device
DEVICE_VENDOR_ID=${DEVICE_CONFIG[2]};
DEVICE_PRODUCT_ID=${DEVICE_CONFIG[3]};
if [ "$VENDOR_ID" == "$DEVICE_VENDOR_ID" ] &&
( [ "$DEVICE_PRODUCT_ID" == "ALL" ] || [ "$PRODUCT_ID" == "$DEVICE_PRODUCT_ID" ] ); then
CURRENT_DEVICE=(${DEVICE_CONFIG[@]});
fi
fi
done;
if [[ "${#CURRENT_DEVICE[*]}" -eq 0 ]]; then CURRENT_DEVICE=(${DEVICE_CONFIG_0[@]}); fi
CURRENT_USER=();
for ARRAY_NAME in ${!USER_CONFIG_@}; do
# Get Data from UserConfig-Array
USER_CONFIG=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check UserConfig-Arguments
COUNT_ARGS=${#USER_CONFIG[@]};
if [[ $COUNT_ARGS -gt 1 ]]; then
# This User has Device-Authentification specified
# Is this the CurrentRequested User
USER_NAME=${USER_CONFIG[1]};
if [[ "$CLIENT_ID" == *"($USER_NAME)"* ]]; then
CURRENT_USER=(${USER_CONFIG[@]});
fi
fi
done;
if [[ "${#CURRENT_USER[*]}" -eq 0 ]]; then CURRENT_USER=(${USER_CONFIG_0[@]}); fi
CURRENT_IPADDRESS=();
for ARRAY_NAME in ${!IP_CONFIG_@}; do
# Get Data from IPConfig-Array
IP_CONFIG=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check IPConfig-Arguments
COUNT_ARGS=${#IP_CONFIG[@]};
if [[ $COUNT_ARGS -gt 2 ]]; then
# This IP-Address has a complete DataSet
# Is this the CurrentRequested IP-Address
IP_ADDRESS=${IP_CONFIG[2]};
if [[ "$CLIENT_IP" == "$IP_ADDRESS" ]]; then
CURRENT_IPADDRESS=(${IP_CONFIG[@]});
fi
fi
done;
if [[ "${#CURRENT_IPADDRESS[*]}" -eq 0 ]]; then CURRENT_IPADDRESS=(${IP_CONFIG_0[@]}); fi
AUTHORIZED=false;
AUTH_RESULT="NOT Authorized!";
if ! ( [ "${#CURRENT_USBPORT[*]}" -gt 0 ] &&
[ "${#CURRENT_DEVICE[*]}" -gt 0 ] &&
[ "${#CURRENT_USER[*]}" -gt 0 ] &&
[ "${#CURRENT_IPADDRESS[*]}" -gt 0 ] ); then
echo "---------------------------------------------------------------------------------------------" >> $LOGFILE;
echo " Used Parameters : Error" >> $LOGFILE;
exit 0;
fi
# Configured Device-Port-User-IpAddress Authorization
CURRENT_RULE=();
for ARRAY_NAME in ${!RULE_LIST_@}; do
USBPORT_AUTHORIZED=false;
DEVICE_AUTHORIZED=false;
USER_AUTHORIZED=false;
IPADDRESS_AUTHORIZED=false;
# Get Data from RuleConfig-Array
RULE_LIST=($(eval "echo \${$ARRAY_NAME[@]}"));
# Check RuleConfig-Arguments
COUNT_ARGS=${#RULE_LIST[@]};
if [[ $COUNT_ARGS -eq 6 ]]; then
# This Device has a complete DataSet
# Is this the CurrentRequested Device
USBPORT_ID=${RULE_LIST[1]};
DEVICE_ID=${RULE_LIST[2]};
USER_ID=${RULE_LIST[3]};
IP_ID=${RULE_LIST[4]};
ACTION_ID=${RULE_LIST[5]};
if [ "$USBPORT_ID" == "ALL" ] ||
[ "$USBPORT_ID" == ${CURRENT_USBPORT[0]} ]; then
USBPORT_AUTHORIZED=true;
fi
if [ "$DEVICE_ID" == "ALL" ] ||
[ "$DEVICE_ID" == ${CURRENT_DEVICE[0]} ]; then
DEVICE_AUTHORIZED=true;
fi
if [ "$USER_ID" == "ALL" ] ||
[ "$USER_ID" == ${CURRENT_USER[0]} ]; then
USER_AUTHORIZED=true;
fi
if [ "$IP_ID" == "ALL" ] ||
[ "$IP_ID" == ${CURRENT_IPADDRESS[0]} ]; then
IPADDRESS_AUTHORIZED=true;
fi
fi
if [ "$USBPORT_AUTHORIZED" == true ] &&
[ "$DEVICE_AUTHORIZED" == true ] &&
[ "$USER_AUTHORIZED" == true ] &&
[ "$IPADDRESS_AUTHORIZED" == true ]; then
if [ "$ACTION_ID" == "ALLOW" ]; then
AUTHORIZED=true;
AUTH_RESULT="Authorized!";
fi
break;
fi
done;
# Define Logging
if [[ "$ENABLE_LOGGING" == true ]]; then
echo "---------------------------------------------------------------------------------------------" >> $LOGFILE;
echo "Authorizing -> '$1' '$2' '$3' '$4' '$5' '$6' '$7' '$8' '$9'" >> $LOGFILE;
# Create new Logfile-Entry with current Date, User and Parameters
echo "`date`, User: [$USER]" >> $LOGFILE;
echo " Used Parameters : ['$1' '$2' '$3' '$4' '$5']" >> $LOGFILE;
echo " Selected Device : ${CURRENT_DEVICE[@]}" >> $LOGFILE;
echo " Selected USB Port : ${CURRENT_USBPORT[@]}" >> $LOGFILE;
echo " Selected User : ${CURRENT_USER[@]}" >> $LOGFILE;
echo " Selected IP-Address : ${CURRENT_IPADDRESS[@]}" >> $LOGFILE;
echo " Auth-Result : $AUTH_RESULT" >> $LOGFILE;
fi
if [[ "$AUTHORIZED" == true ]]; then exit 1;
else exit 0; fi