Как выполнить команду zenity в скрипте, выполняемом сервисом (systemd) (файл .service) - PullRequest
0 голосов
/ 26 февраля 2020

У меня маленькая проблема. Я делаю сервис (демон) с systemd. Сценарий следующий:

if [ $intento = 5 ];then
      iptables -I INPUT -s ${sublista[0]} -j DROP -m comment --comment "IP bloqueada por sshield"
      date=$(date)
      echo "${sublista[0]} $date" >> /var/cache/sshield.deny
      zenity --notification --text "IP address ${sublista[0]} denied at $date - sshield"
      email ivanherediaplanas@hotmail.com "Nueva regla iptables | ${sublista[0]} denied" "The ${sublista[0]} ip address is denied by brute force's attack ssh.<br><br>Date: $date"
      declare -a ips=(${ips[@]/${sublista[0]}=>$intento/})
fi

Идея заключается в следующем:

Если попыток больше пяти, он дает IP-адрес и блокирует его. Отправка письма и показ всплывающего окна zenity

Проблема в том, что всплывающее окно не отображается.

zenity --notification --text "IP адрес $ {sublista [0]} запрещен в $ date - sshield "

Я полагаю, что это потому, что scrpt находится в файле службы в /lib/systemd/system/sshield.service

.
[Unit]
Description=Service for protect attacks of brute force ssh's

[Service]
Type=simple
ExecStart=/etc/sshield/sshield.sh
ExecStop=/etc/sshield/sshield.sh stop
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

Я считаю, что проблема в: Тип = простой

Также я пытаюсь с этим:

  echo "${sublista[0]} $date" >> /var/cache/sshield.deny
  sshield --bell "IP address ${sublista[0]} denied at $date - sshield"
  email ivanherediaplanas@hotmail.com "Nueva regla iptables | ${sublista[0]} denied" "The ${sublista[0]} ip address is denied by brute force's attack ssh.<br><br>Date: $date"

sshield - -bell "IP-адрес $ {sublista [0]} запрещен в $ date - sshield"

, команда sshield, это сценарий в пути /bin/sshield, и я получаю его:

elif [[ $argumento == "--bell" ]];then
    if [[ $# -gt 3 ]];then
            echo -e "\033[1;31m[-]\033[0m Only one value"
            echo "You use '--help' or '-h' for more information"
    elif [[ $# = 1 ]];then
            echo -e "\033[1;31m[-]\033[0m It needs one value"
            echo "You use '--help' or '-h' for more information"
    else
            zenity --notification --text "$2"
    fi
else
  [...]

mark: zenity --notification --text "$ 2"

Но это не работает. Как я могу решить это?

Ошибка в zenity: Изображение: journalctl -u sshield

1 Ответ

0 голосов
/ 28 февраля 2020

Для выполнения GUI (графический пользовательский интерфейс) в сервисе (systemd). Сначала вы должны добавить это:

[Service]
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/ivan/.Xauthority"

Результат:

[Unit]
Description=Service for protect attacks of brute force ssh's

[Service]
Type=simple
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/ivan/.Xauthority"
ExecStart=/etc/sshield/sshield.sh
ExecStop=/etc/sshield/sshield.sh stop
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

И в сценарии добавьте:

export DISPLAY=":0"
...