воскресенье, 24 декабря 2017 г.

Использование SSH в PHP

Использование SSH в PHP

Для использования ssh в PHP необходимо установить расширение
# yum install php-pecl-ssh2
Что бы применить раширение в Apache необходимо перезапустить apache
# service httpd restart

Пример кода подключения к серверу и выполнения команды:

Переменные $ip, $login, $password, $cmd должны быть определены.

$connection = ssh2_connect($ip, 22);
ssh2_auth_password($connection, $login, $password);

$stream = ssh2_exec($connection, $cmd);
$errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);

stream_set_blocking($stream, true);
stream_set_blocking($errorStream, true);

echo "Output: " . stream_get_contents($stream);
echo "Error: " . stream_get_contents($errorStream);

fclose($errorStream);

fclose($stream);

Текстовый редактор ATOM. Установка

Текстовый редактор ATOM. Установка

1. Заходим на сайт atom.io



2. По ссылке «Download Windows 64-bit installer» скачиваем программу «AtomSetup-x64.exe»
3. Запускаем «AtomSetup-x64.exe»



4. Отказываемся от использования atom по умолчанию, нажав «No» или делаем другой выбор.



5. Установка дополнительных плагинов 
File ? Settings 
(или клавиши Ctrl + ,  - клавиши Ctrl, плюс и запятая)
Меню + Install
В поиском меню можно искать пакеты для atom и затем устанавливать их.


Плагин emmet позволяет писать хорошо форматированный HTML с помощью удобной сокращенной записи.
Плагин atom-beautify помогает расставлять в коде отступы, которые повышают читабельность.
Плагин autocomplete-paths предлагает имена файлов из файловой системы в меню автодополнения по мере набора текста
Плагин api-docs обеспечивает поиск по документации по ключевому слову.
Ряд плагинов из группы linter необходимы для проверки стиля и синтаксиса кода. После установки основного плагина linter будет предложено установить linter-ui-default, а затем intentions, busy-signal. Соглашаемся.


Дополнительный плагины группы linter-csslint, linter-htmlhint обеспечивают проверку кода CSS, HTML и JavaScript кода.

6. Готово

суббота, 28 октября 2017 г.

Поисковый движок SPHINX.

Поисковый движок SPHINX.

Установка движка в CentOS7

1. Скачиваем с сайта пакет RPM
http://sphinxsearch.com/downloads/release/
Я выбрал пакет RHEL/CentOS 7.x x86_64 RPM 2.2.11-release (6.2M)

2. Копируем пакет в папку /usr/src

3. В консоли переходим в папку с пакетом
# cd /usr/src/

4. Проводим установку sphinx
# yum install -y sphinx-2.2.11-1.rhel7.x86_64.rpm
Вместе с необходимым пакетом установятся так же postgresql-libs и  unixODBC

5. Конфигурационный файл службы - /etc/sphinx/sphinx.conf
Зарезервируем на всякий случай конфигурационный файл
# cp /etc/sphinx/sphinx.conf /etc/sphinx/sphinx.conf.default

Настройка сервиса sphinx для работы с базой MySQL и запуск сервиса

1. Для работы поиска с помощью sphinx сделаем тестовую базу данных MySQL, наполним ее тестовыми данными, проведем создание индекса:

Подключаемся к базе MySQL (MariaDB)
# mysql -u root –p
Создаем базу test
> CREATE DATABASE test;
Заливаем тестовые данные, которые присутствуют в /usr/share/doc/sphinx-2.2.11/example.sql 
> SOURCE /usr/share/doc/sphinx-2.2.11/example.sql;
Выходим из базы
> quit;
Тестовые данные представляют из себя таблицу с записями, содержащими текст. Упрощенно это записи:
( 1, 'test one', 'this is my test document number one. also checking search within phrases.' ),
( 2, 'test two', 'this is my test document number two' ),
( 3, 'another doc', 'this is another group' ),
( 4, 'doc number four', 'this is to test groups' )

2. Редактируем имеющийся конфигурационный файл. Он по умолчанию создан для работы с базой MySQL. Файл содержит несколько секции
source – раздел описывает источник данных
index – раздел описывает местоположение индекса и с каким источником будет работать индекс. Их может быть несколько. Один для испытаний я закомментировал
indexer – раздел описывает параметры работы с индексами
searchd – здесь описание демона sphinx
# nano /etc/sphinx/sphinx.conf
Содержимое тестового конфигурационного файла:
#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source src1
{
        type                    = mysql

        sql_host                = localhost
        sql_user                = root
        sql_pass                = **********
        sql_db                  = test
        sql_port                = 3306  
        sql_query               = \
           SELECT id, group_id, \
           UNIX_TIMESTAMP(date_added) AS date_added, \
           title, content \
           FROM documents

        sql_attr_uint           = group_id
        sql_attr_timestamp      = date_added
}


index test1
{
        source                  = src1
        path                    = /var/lib/sphinx/test1
}


indexer
{
        mem_limit               = 128M
}


searchd
{
        listen                  = 9312
        listen                  = 9306:mysql41
        log                     = /var/log/sphinx/searchd.log
        query_log               = /var/log/sphinx/query.log
        read_timeout            = 5
        max_children            = 30
        pid_file                = /var/run/sphinx/searchd.pid
        seamless_rotate         = 1
        preopen_indexes         = 1
        unlink_old              = 1
        workers                 = threads # for RT to work
        binlog_path             = /var/lib/sphinx/
}

3. Создадим индекс используя конфигурационный файл
# indexer –-all
Вывод будет следующий:
Sphinx 2.2.11-id64-release (95ae9a6)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinx/sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.041 sec, 4682 bytes/sec, 97.04 docs/sec
total 4 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

4. Запуск демона sphinx
# systemctl start searchd
Добавление в автозагрузку
# systemctl enable searchd
Проверка статуса:
# systemctl status searchd

5. Подключиться к серверу sphinx используя клиент MySQL
# mysql -h0 -P9306
Получим приглашение
MySQL [(none)]>
Проверка поиска по тестовой базе. Найдем фразу 'test document'
MySQL [(none)]> SELECT * FROM test1 WHERE MATCH('test document');
+------+----------+------------+
| id   | group_id | date_added |
+------+----------+------------+
|    1 |        1 | 1507959119 |
|    2 |        1 | 1507959119 |
+------+----------+------------+
2 rows in set (0.00 sec)
Проверка поиска по ключевым словам в тестовой базе
MySQL [(none)]> CALL KEYWORDS ('test one three', 'test1', 1);
+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1    | test      | test       | 3    | 5    |
| 2    | one       | one        | 1    | 2    |
| 3    | three     | three      | 0    | 0    |
+------+-----------+------------+------+------+
3 rows in set (0.00 sec)
Видно, что индекс построился правильно. Поиск работает. Обращаясь к сервису, мы можем получить ID записи в базе.

Настройка Sphinx для работы с источником данных xml

1. Для того, чтобы сервер успешно создал индекс, необходимо подготовить правильную структуру данных. Пример структуры данных разместим в /mnt/base.xml
<?xml version="1.0" encoding="utf-8"?>
<sphinx:docset xmlns:sphinx="http://sphinxsearch.com/">

  <sphinx:schema>
    <sphinx:field name="name" attr="string" />
  </sphinx:schema>

  <sphinx:document id="800">
    <name>
    ip address
    </name>
  </sphinx:document>

  <sphinx:document id="801">
    <name>MAC address</name>
  </sphinx:document>

  <sphinx:document id="802">
    <name>get post html</name>
  </sphinx:document>

  <sphinx:document id="803">
    <name>Мой документ</name>
  </sphinx:document>

</sphinx:docset>

2. Настройка конфигурации для парсинга xml документа будет такой:
# nano /etc/sphinx/sphinx.conf
Раздел source:
source basexml
{
    type                 = xmlpipe2
    xmlpipe_command      = /usr/bin/cat /mnt/base.xml
}
Главное здесь – это команда, которая будет читать данные и выводить в стандартный вывод linux. В нашем случае – это /usr/bin/cat /mnt/base.xml
Раздел index
index knowledgebase
{
    source       = knowledgebase
    path         = /var/lib/sphinx/knowledgebase
    # Минимальная длина слова
    min_word_len = 2
    min_prefix_len = 3
    html_strip = 1
    # Позволяет использовать звездочки в запросах, к примеру
    # по запросу *пр* будут найдены проспект, привет и пр.
    enable_star = 1
    # Автоматически расширяет поисковый запрос до трех запросов
    # running -> ( running | *running* | =running )
    expand_keywords = 1
    index_exact_words = 1
    morphology = stem_enru
}

3. Перезапуск процесса построения индексов выполняет так
# indexer --all --rotate
Sphinx 2.2.11-id64-release (95ae9a6)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinx/sphinx.conf'...
indexing index 'basexml'...
collected 3 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 3 docs, 38 bytes
total 0.005 sec, 7165 bytes/sec, 565.71 docs/sec
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.003 sec, 57134 bytes/sec, 1184.13 docs/sec
total 13 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 24 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
rotating indices: successfully sent SIGHUP to searchd (pid=2372).

4. Поиск по индексу basexml слова ‘post’ выполняется так же:
# mysql -h0 -P9306
MySQL [(none)]> SELECT * FROM basexml WHERE MATCH('post');
+------+---------------+
| id   | name          |
+------+---------------+
|  802 | get post html |
+------+---------------+
1 row in set (0.00 sec)

5. Для того что бы сделать периодическую ротацию индексов, в cron помещаем задание, которое будет выполняться к примеру дву раза в день:
/usr/bin/indexer --rotate --config /etc/sphinx/sphinx.conf --all > /dev/null

Использование PHP для работы с сервером Sphinx.

Для работы в PHP с сервером sphinx можно использовать два подхода:
1) Sphinx API 
2) SphinxQL
Будем использовать второй способ, как наиболее простой. Этот способ позволяет обращаться к серверу через клиент MySQL и работать с SQL подобным языком запросов. В PHP необходимо использовать PDO для подключения к серверу.
Пример кода:
$db = new PDO('mysql:host=127.0.0.1;port=9306;charset=utf8', '', '');
$q = "SELECT id FROM knowledgebase WHERE MATCH('".$what_sphinx."');";
$stmt = $db->query($q);
if($stmt->rowCount() > 0) {
   foreach ($stmt->fetchAll() as $row) {
        $arr_sphinx_rez[] = $row['id'];
   }
}
В переменной $what_sphinx можно писать просто слово, так и использовать выражения OR (|) или AND (&)

пятница, 29 сентября 2017 г.

Установка двух версий PHP на сервер CentOS.

Установка двух версий PHP на сервер CentOS.

На сервере CentOS7 по умолчанию после выполнения команды yum install php
будет установлен php версии 5.4
# php -v
PHP 5.4.16 (cli) (built: Nov  6 2016 00:29:02)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

Установим еще одну версию php. Версию 7.

Устанавливаем дополнительные пакеты:
# yum install gcc make
# yum install libxml2-devel
# yum install mysql-devel httpd-devel gd-devel libmcrypt-devel mcrypt bison-devel mhash-devel libcurl-devel
# yum install bison

Скачиваем исходный код php7 с GIT 
# cd /usr/src/
# git clone https://github.com/php/php-src.git
# cd php-src/

Выполняем сборку конфигуратора:
# ./buildconf --force 
При этом может быть ошибка:
buildconf: checking installation...
buildconf: autoconf version 2.63 found.
           You need autoconf version 2.64 or newer installed
           to build PHP from Git.
make: *** [buildmk.stamp] Ошибка 1
Ошибка говорит о том, что нужно обновить autoconf
# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
# tar xvfvz autoconf-2.69.tar.gz
# cd autoconf-2.69
# ./configure
# make
# make install
Новая версия установилась в /usr/local/bin/autoconf, тогда как текущая версия находиться в директории /usr/bin/

# ./buildconf --force
Нормальный вывод:
buildconf: checking installation...
buildconf: autoconf version 2.69 (ok)
rebuilding aclocal.m4
rebuilding configure
rebuilding main/php_config.h.in
Или:
#  ./buildconf --force
Forcing buildconf
Removing configure caches

Проводим конфигурирование:
# ./configure --bindir=/usr/local/bin/ --with-config-file-path=/usr/local/etc/ --with-curl --with-mhash --with-mysqli --with-gd --with-pdo-mysql  --enable-mbstring --with-openssl --with-pcre-regex --enable-soap --with-apxs2 --with-zlib
Здесь директория для бинарника - /usr/local/bin/
Директория для поиска конфигурационных файлов (php.ini) - /usr/local/etc/

Компилируем и устанавливаем:
# make
# make test
На следующий вопрос с предложением отправить отчет об ошибках отвечаем «n»
You may have found a problem in PHP.
This report can be automatically sent to the PHP QA team at
http://qa.php.net/reports and http://news.php.net/php.qa.reports
This gives us a better understanding of PHP's behavior.
If you don't want to send the report immediately you can choose
option "s" to save it.  You can then email it to qa-reports@lists.php.net later.
Do you want to send this report now? [Yns]: n
# make install

Подготавливаем файл php.ini
# cp /usr/src/php-src/php.ini-production /usr/local/etc/php.ini

Теперь можно использовать php7 запуская его с указанием полного пути:
# /usr/local/bin/php -v
PHP 7.3.0-dev (cli) (built: Sep 22 2017 12:52:17) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2017 Zend Technologies


суббота, 19 августа 2017 г.

RubyOnRails. Взаимодействие с Apache в CentOS 7.

Сводка недоступна. Нажмите эту ссылку, чтобы открыть запись.

SSH туннель


SSH туннель.

Задача: Получить доступ к WEB-серверу 10.11.90.25 к которому напрямую доступа нет.



Вот, что мы должны увидеть на web-сервере 10.11.90.25


Пробрасываем туннель с ip 10.10.49.162 c порта 3000 на удаленный сервер 10.11.90.25 через 10.10.50.252

# ssh -L 10.10.49.162:3000:10.11.90.25:80 root@10.10.50.252

Теперь в консоли локального сервера пробуем посмотреть web ответ сервера apache.
links http://10.10.49.162:3000
Получаем ответ сервера Apache на машине


Обратившись к ресурсу http://10.10.49.162:3000/ с машины 10.10.50.240 мы так же попадем на удаленный хост


Туннель закроется, как-только мы выйдем из удаленной консоли (exit)
Закрыть туннель можно так же через убийство процесса
# ps ax | grep ssh
Узнав PID, завершаем процесс
# kill -9 PID

вторник, 25 апреля 2017 г.

Базовая установка и настройка FreeRADIUS 3 в CentOS7 с поддержкой PostgreSQL

Базовая установка и настройка FreeRADIUS 3 в CentOS7 с поддержкой PostgreSQL.

Отключаем Firewall
# service firewalld stop
# chkconfig firewalld off

Установка пакетов, требующихся в дальнейшем:
# yum install libtalloc-devel –y
# yum install wget nano
# yum install gcc
# yum install tcpdump
# yum install openssl-devel
# yum install python-devel

Отключаем SELinux
# nano /etc/sysconfig/selinux
Комментируем все, вставляем строку
SELINUX=disabled
Перезагружаемся:
# reboot

Устанавливаем сервер PostgreSQL
# yum install postgresql-server
# yum install postgresql-devel
Устанавливаем расширения
# yum install postgresql-contrib
Производим инициализацию базы данных по умолчанию:
# service postgresql initdb
В дальнейшем с базой PostgreSQL можно работать при необходимости.

Переходим в папку установки:
# cd /usr/src/

Скачиваем архив с исходными кодами FreeRADIUS:
# wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.13.tar.gz

Распаковываем архив:
# tar -xvzf freeradius-server-3.0.13.tar.gz

Переходим в распакованную папку:
# cd freeradius-server-3.0.13

Устанавливаем:
# ./configure
# make
# make install

Конфигурация FreeRADIUS, послу естановки находиться в директории /usr/local/etc/raddb/

Делаем первый запуск
# radiusd -X
Получаем ошибку:
Debugger not attached
Refusing to start with libssl version OpenSSL 1.0.1e-fips 11 Feb 2013 0x1000105f (1.0.1e release) (in range 1.0.1 release - 1.0.1t rele)
Security advisory CVE-2016-6304 (OCSP status request extension)
For more information see https://www.openssl.org/news/secadv/20160922.txt
Once you have verified libssl has been correctly patched, set security.allow_vulnerable_openssl = 'CVE-2016-6304'
Refusing to start with libssl version OpenSSL 1.0.1e-fips 11 Feb 2013 0x1000105f (1.0.1e release) (in range 1.0.1 dev - 1.0.1f release)
Security advisory CVE-2014-0160 (Heartbleed)
For more information see http://heartbleed.com 
Исправление ошибки выполняется установкой параметра allow_vulnerable_openssl в настройках
# nano /usr/local/etc/raddb/radiusd.conf
По умолчанию:
allow_vulnerable_openssl = no
Меняем на 
allow_vulnerable_openssl = 'CVE-2016-6304'
Теперь после тестового запуска radius сервера старт завершается успешно:
# radiusd -X
FreeRADIUS Version 3.0.13
Copyright (C) 1999-2017 The FreeRADIUS server project and contributors
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel
Listening on proxy address * port 35712
Listening on proxy address :: port 37586
Ready to process requests
Остановка запущенного в тесте сервера:
CTRL +C

Удаляем шаблоны, работающие по умолчанию default и inner-tunnel
# rm –f /usr/local/etc/raddb/sites-enabled/inner-tunnel
# rm -f /usr/local/etc/raddb/sites-enabled/default

Отключаем проксирование
# nano /usr/local/etc/raddb/radiusd.conf
Строки
proxy_requests  = yes
$INCLUDE proxy.conf
Меняем на
proxy_requests  = no
#$INCLUDE proxy.conf

Отключаем логирование модуля unix
# nano /usr/local/etc/raddb/mods-enabled/unix
Комментируем строку
# radwtmp = ${logdir}/radwtmp
Это указание не вести логирование в файле /usr/local/var/log/radius/radwtmp

Учим FREERADIUS работать с атрибутами Cisco AV-Pair
# nano /usr/local/etc/raddb/mods-enabled/preprocess
Устанавливаем директиву with_cisco_vsa_hack в yes (по умолчанию no)
    with_cisco_vsa_hack = yes
# systemctl restart radiusd.service
Словари лежат здесь /usr/local/share/freeradius/dictionary
Для успешного приема атрибутов, передаваемых в Cisco AV Pair необходимо явно прописать их в настройках словарей FreeRADIUS.
# nano /usr/local/share/freeradius/dictionary.cisco
После блока SIP атрибутов (# SIP Attributes) пишем новые атрибуты
# Новые атрибуты
ATTRIBUTE       client-mac-address                      171     string
ATTRIBUTE       connect-progress                        172     string
ATTRIBUTE       ppp-disconnect-cause                    173     string
ATTRIBUTE       disc-cause-ext                          174     string
ATTRIBUTE       circuit-id-tag                          175     string
Теперь в логах вместо атрибута 
Cisco-AVPair = "client-mac-address=107b.ef5c.2579"
Будет две строки
Cisco-AVPair = "client-mac-address=2cb0.5d81.b453"
client-mac-address = "2cb0.5d81.b453"
То же для атрибутов connect-progress, ppp-disconnect-cause, disc-cause-ext, circuit-id-tag
И названия атрибутов client-mac-address, connect-progress и пр. можно будет использовать напрямую.

Меняем название файла логов аккаутинга, для того что бы можно было его успешно ротировать
# nano /usr/local/etc/raddb/mods-enabled/detail
Меняем строку
filename = ${radacctdir}/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/detail-%Y%m%d
на
filename = ${radacctdir}/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/detail
Логи сервера находятся в файле: /usr/local/var/log/radius/radius.log
Логи аккаутинга складываются в папку: /usr/local/var/log/radius/radacct/<ip-адрес-клиента>/
Организовываем ротацию файлов логов 
# cp /usr/src/freeradius-server-3.0.13/redhat/freeradius-logrotate /etc/logrotate.d/
# nano /etc/logrotate.d/freeradius-logrotate
Содержимое файла может быть таким:
/usr/local/var/log/radius/radius.log {
        rotate 2
        copytruncate
        missingok
        daily
        size=500k
        nomail
}
/usr/local/var/log/radius/radacct/*/detail {
        rotate 2
        noolddir
        nocopy
        create
        nocopytruncate
        missingok
        daily
        size=10M
        nomail
        postrotate
                /usr/bin/systemctl restart radiusd.service
        endscript
}
В заключении выполняем проверку правил ротации логов:
# logrotate -d /etc/logrotate.d/freeradius-logrotate
Принудительный запуск ротации:
# logrotate -f /etc/logrotate.d/freeradius-logrotate
Посмотреть что и когда ротировалось можно в файле /var/lib/logrotate.status

Создаем и подключаем свой модуль sql, которым будем пользоваться.
# cp /usr/local/etc/raddb/mods-available/sql /usr/local/etc/raddb/mods-available/sql_my
# ln -s /usr/local/etc/raddb/mods-available/sql_my /usr/local/etc/raddb/mods-enabled/sql_my
Редактируем модуль:
# nano /usr/local/etc/raddb/mods-enabled/sql_my
Здесь пока можно все закомментировать или удалить.
Для удаления всего содержимого выполняем:
# echo "" > /usr/local/etc/raddb/mods-enabled/sql_my

Создаем свой тестовый шаблон на основе имеющегося:
# cp /usr/local/etc/raddb/sites-available/default /usr/local/etc/raddb/sites-available/test
# ln -s /usr/local/etc/raddb/sites-available/test /usr/local/etc/raddb/sites-enabled/test
Теперь после запуска сервера мы имеем корректно запущенный сервер FreeRADIUS, прослушивающий порты 1812 и  1813.
# radiusd -X

Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Ready to process requests
Для проверки, в другой консоли набираем команду проверки открытых портов службами:
# netstat -ltupn | grep radius
udp        0      0 0.0.0.0:1812     0.0.0.0:*           1898/radiusd
udp     2176      0 0.0.0.0:1813     0.0.0.0:*           1898/radiusd
udp6       0      0 :::1812           :::*                1898/radiusd
udp6       0      0 :::1813           :::*                1898/radiusd

Внедряем unit FreeRADIUS в службу systemd
Копируем имеющийся в скаченном архиве готовый файл юнита:
# cp /usr/src/freeradius-server-3.0.13/redhat/radiusd.service /etc/systemd/system/multi-user.target.wants/
# chmod +x /etc/systemd/system/multi-user.target.wants/radiusd.service
Редактируем файл 
# nano /etc/systemd/system/multi-user.target.wants/radiusd.service
и приводим его к виду:
[Unit]
Description=FreeRADIUS multi-protocol policy server
After=network.target
Documentation=man:radiusd(8) man:radiusd.conf(5) http://wiki.freeradius.org/ http://networkradius.com/doc/

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/radiusd
ExecStartPre=/usr/local/sbin/radiusd $FREERADIUS_OPTIONS -Cxm -lstdout
ExecStart=/usr/local/sbin/radiusd $FREERADIUS_OPTIONS -m
Restart=on-failure
RestartSec=5
ExecReload=/usr/local/sbin/radiusd $FREERADIUS_OPTIONS -Cxm -lstdout
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
Рестартуем демон systemd:
# systemctl daemon-reload
Теперь запуск сервера выполняем так:
# systemctl start radiusd.service
Статус:
# systemctl status radiusd.service
Остановка сервера:
# systemctl stop radiusd.service