Меню Рубрики

Установка php redis debian

Предложение от 8host.com

Установка и защита Redis в Debian 9

Redis – это хранилище типа «ключ-значение», известное своей гибкостью, производительностью и широкой поддержкой языков. Данный мануал поможет установить, настроить и защитить Redis в Debian 9

Требования

Для работы вам понадобится сервер Debian 9, настроенный по этому мануалу.

1: Установка и настройка Redis

Последнюю версию Redis можно найти в официальных репозиториях Debian.

Обновите локальный индекс пакетов и установите Redis:

sudo apt update
sudo apt install redis-server

Эта команда загрузит и установит Redis и его зависимости. После этого в конфигурационный файл Redis, который был создан автоматически во время установки, нужно внести одно важное изменение.

Откройте этот файл с помощью текстового редактора:

sudo nano /etc/redis/redis.conf

Внутри файла найдите директиву supervised . Эта директива позволяет объявить систему инициализации для управления сервисом Redis, предоставляя вам больше контроля над ним. По умолчанию директива supervised имеет значение no. Поскольку вы используете Debian, который использует систему инициализации systemd, укажите здесь systemd:

. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no — no supervision interaction
# supervised upstart — signal upstart by putting Redis into SIGSTOP mode
# supervised systemd — signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto — detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal «process is ready.»
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .

Пока что это все, вы можете сохранить и закрыть файл. После этого перезапустите сервис Redis:

sudo systemctl restart redis

Теперь Redis установлен, настроен и работает на вашей машине. Теперь нужно протестировать установку.

2: Тестирование Redis

Как и любое новое ПО, Redis нужно проверить после установки.

Для начала убедитесь, что сервис Redis запущен:

sudo systemctl status redis

Если команда не вернет ошибок, вы увидите такой вывод:

redis-server.service — Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-09-05 20:19:44 UTC; 41s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 10829 ExecStopPost=/bin/run-parts —verbose /etc/redis/redis-server.post-down.d (code=exited, status=0/SUCCESS)
Process: 10825 ExecStop=/bin/kill -s TERM $MAINP > Process: 10823 ExecStop=/bin/run-parts —verbose /etc/redis/redis-server.pre-down.d (code=exited, status=0/SUCCESS)
Process: 10842 ExecStartPost=/bin/run-parts —verbose /etc/redis/redis-server.post-up.d (code=exited, status=0/SUCCESS)
Process: 10838 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Process: 10834 ExecStartPre=/bin/run-parts —verbose /etc/redis/redis-server.pre-up.d (code=exited, status=0/SUCCESS)
Main PID: 10841 (redis-server)
Tasks: 3 (limit: 4915)
CGroup: /system.slice/redis-server.service
└─10841 /usr/bin/redis-server 127.0.0.1:6379
. . .

Как видите, Redis работает и уже включен как сервис (то есть добавлен в автозагрузку).

Примечание: Этот параметр является желательным для многих общих случаев использования Redis. Если, однако, вы предпочитаете запускать Redis вручную после загрузки сервера, вы можете удалить сервис из автозагрузки с помощью следующей команды:

sudo systemctl disable redis

Чтобы убедиться, что Redis работает правильно, запустите клиент командной строки:

В командную строку введите такую команду, чтобы проверить соединение:

Это значит, что программа правильно отвечает на запросы. Теперь убедитесь, что можете добавлять ключи:

Убедившись, что вы можете получить значение, выйдите из командной строки Redis, чтобы вернуться в оболочку:

В качестве финального теста убедитесь, что Redis может сохранять данные даже после остановки или перезапуска. Для этого сначала перезапустите экземпляр Redis:

sudo systemctl restart redis

Затем снова подключитесь к клиенту командной строки и запросите значение:

Закройте командную строку:

Теперь вы знаете, что установка Redis полностью работоспособна и готова к использованию. Однако некоторые из настроек конфигурации по умолчанию небезопасны и предоставляют злоумышленникам возможность атаковать Redis и получить доступ к серверу и его данным. Остальные разделы в этом мануале предлагают методы смягчения этих уязвимостей (по рекомендациям официального веб-сайта Redis). Все это опционально, Redis будет функционировать и без этого, однако выполнить эти разделы настоятельно рекомендуется, чтобы повысить безопасность системы.

3: Подключение к localhost

По умолчанию Redis доступен только с localhost. Однако если вы установили и настроили Redis по другому мануалу, вы могли обновить конфигурации и включить удаленные подключения. Это не так безопасно, как привязка к localhost.

Чтобы исправить это, откройте конфигурационный файл Redis:

sudo nano /etc/redis/redis.conf

Найдите эту строку и раскомментируйте ее:

Сохраните и закройте файл (CTRL + X, Y, ENTER).

sudo systemctl restart redis

Убедитесь, что настройки обновились:

sudo netstat -lnp | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 10959/redis-server

Этот вывод показывает, что программа redis-server привязана к localhost (127.0.0.1), что и должно быть согласно конфигурации. Если вы видите в этом столбце другой IP-адрес (например, 0.0.0.0), вы должны убедиться, что вы раскомментировали правильную строку. Затем снова перезапустите Redis.

Читайте также:  Установка полотенцесушителя водяного из нержавеющей стали

Теперь, когда установка Redis прослушивается только на локальном хосте, злоумышленникам будет сложнее получить доступ к вашему серверу. Однако Redis в настоящее время не требует аутентификации пользователей. Чтобы исправить это, вы можете включить парольную аутентификацию Redis перед внесением изменений через клиент Redis (redis-cli).

4: Настройка парольной аутентификации Redis

Настройка пароля Redis включает одну из двух встроенных функций безопасности – команду auth, которая требует от клиентов аутентификации для доступа к базе данных. Пароль настраивается непосредственно в файле конфигурации Redis, /etc/redis/redis.conf; снова откройте этот файл с помощью редактора:

sudo nano /etc/redis/redis.conf

Найдите раздел SECURITY, а в нем – закомментированную директиву:

Раскомментируйте эту строку, а вместо foobared укажите надежный пароль.

Примечание: В файле redis.conf над директивой requirepass вы увидите такое предупреждение:

# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#

Потому очень важно выбрать в качестве пароля очень сложное и очень длинное значение. Вместо того, чтобы самостоятельно составлять пароль, вы можете использовать команду openssl, которая сгенерирует случайный пароль. Направив вывод первой команды во вторую команду openssl, как показано ниже, вы удалите разрывы строк, созданные первой командой:

openssl rand 60 | openssl base64 -A

Скопируйте и вставьте полученное значение в requirepass:

/etc/redis/redis.conf
requirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

Выбрав надежный пароль, сохраните и закройте файл, а затем перезапустите Redis:

sudo systemctl restart redis.service

Чтобы убедиться, что аутентификация настроена правильно, откройте командную строку Redis:

Для проверки работоспособности пароля Redis используйте такую последовательность команд. Первая команда пытается установить ключ без пароля:

set key1 10
Redis должен вернуть ошибку:
(error) NOAUTH Authentication required.

Следующая команда пройдет аутентификацию:

auth your_redis_password
OK

После того как Redis принял пароль, попробуйте снова добавить ключ:

Запросите свой новый ключ:

Убедившись, что после аутентификации вы можете запускать команды Redis, вы можете выйти из redis-cli:

Далее мы рассмотрим переименование команд Redis, которые могут нанести серьезный урон серверу, если они будут введены по ошибке или злоумышленником.

5: Переименование команд

Еще одна встроенная функция безопасности Redis позволяет вам переименовывать или полностью отключать определенные команды, которые считаются опасными. Злоумышленники могут использовать такие команды для перенастройки, уничтожения или повреждения данных. Как и парольная аутентификация, переименование или отключение команд настраивается в разделе SECURITY файла /etc/redis/redis.conf. Вот краткий список опасных команд:

  • FLUSHDB
  • FLUSHALL
  • KEYS
  • PEXPIRE
  • DEL
  • CONFIG
  • SHUTDOWN
  • BGREWRITEAOF
  • BGSAVE
  • SAVE
  • SPOP
  • SREM RENAME DEBUG

Это не полный список, но для начала достаточно будет переименовать или отключить все команды в этом списке.

Отключать или переименовывать команду – это зависит от конкретной ситуации. Если вы знаете, что никогда не будете использовать опасную команду, вы можете ее отключить. В противном случае вы должны переименовать ее.

sudo nano /etc/redis/redis.conf

Важно! Далее в мануале приведены общие примеры. Вы должны отключить или переименовать команды, которые важны в вашей конкретной ситуации. Вы можете узнать больше о вредоносном использовании команд на redis.io/commands.

Чтобы отключить команду, просто переименуйте ее в пустую строку, как показано ниже:

. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB «»
rename-command FLUSHALL «»
rename-command DEBUG «»
. . .

Чтобы переименовать команду, дайте ей другое имя, как в приведенных ниже примерах. Переименованные команды другим пользователям должно быть трудно угадать, а вам – легко запомнить.

. . .
# rename-command CONFIG «»
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .

Сохраните и закройте файл. Перезапустите Redis:

sudo systemctl restart redis

Чтобы проверить новую команду, откройте командную строку Redis:

Пройдите аутентификацию, используя пароль, который вы определили ранее:

auth your_redis_password
OK

Предположим, что вы переименовали команду CONFIG в ASC12_CONFIG; в таком случае попытка запустить команду config должна завершиться ошибкой.

config get requirepass
(error) ERR unknown command ‘config’

Теперь сработает переименованная команда:

asc12_config get requirepass
1) «requirepass»
2) «your_redis_password»

Обратите внимание, если вы перезагружаете Redis, не закрыв перед этим командную строку, вам необходимо повторно пройти аутентификацию. В противном случае вы получите эту ошибку:

NOAUTH Authentication required.

Важно! Что касается переименования команд, в конце раздела SECURITY в файле /etc/redis.conf содержится предостерегающее заявление:

Please note that changing the name of commands that are logged into the AOF file or transmitted to slaves may cause problems.

Это означает, что если переименованная команда не находится в файле AOF или этот файл не был передан slave машинам, тогда проблем не должно быть. Помните об этом при переименовании команд. Лучшее время для переименования команды – это сразу после установки или когда вы не используете AOF (то есть перед развертыванием приложения, использующего Redis).

Читайте также:  Установка лыжи пассат б3

Если вы используете AOF в установке master-slave, GitHub советует вот что:

Команды регистрируются в AOF и реплицируются на slave так же, как отправляются; поэтому если вы попытаетесь воспроизвести AOF на экземпляре, который не поддерживает таких же переименованных команд, вы можете столкнуться с конфликтом.

Лучший способ избежать проблем с переименованием в таких случаях – убедиться, что переименованные команды применяются ко всем экземплярам установки master-slave.

Заключение

Имейте в виду, если злоумышленник получит доступ к серверу, специальные функции безопасности Redis, которые вы установили, будет довольно легко обойти. Вот почему самая важная функция безопасности – это брандмауэр, поскольку он блокирует неизвестных пользователей.

источник

Установка и настройка Redis на Debian 8

Для начала немного информации.

1. Что такое Redis?

Redis — это высокопроизводительное нереляционное распределённое хранилище данных. В отличие от Memcached, который может в любой момент удалить ваши данные, вытесняя старые записи новыми, Redis хранит информацию постоянно, таким образом он похож на MemcacheDB.

2. Чем Redis отличается от существующих решений?

API для работы с Memcached (MemcacheDB) позволяет хранить массивы, но эти массивы будут сериализованы и сохранены как строки, таким образом атомарные операции над такими массивами не возможны.
Redis позволяет хранить как строки, так и массивы, к которым можно применять атомарные операции pop/push, делать выборки из таких массивов, выполнять сортировку элементов, получать объединения и пересечения массивов.

3. Производительность

110000 запросов SET в секунду, 81000 запросов GET в секунду на Linux-сервере начального уровня (тесты).

Высокая скорость работы Redis обеспечивается тем, что данные хранятся в оперативной памяти и сохраняются на диск либо через равные промежутки времени, либо при превышении определённого количества не сохранённых запросов. Из этого вытекает, что используя Redis, вы можете потерять результаты нескольких последних запросов, что вполне приемлемо для большинства веб-приложений, учитывая, что обращение к Redis по скорости сравнимо с обращением к оперативной памяти. Тем не менее, потерь можно избежать через избыточность — Redis поддерживает неблокирующую master-slave репликацию.

Redis, как и Memcached, может работать как распределённое хранилище на многих физических серверах. Такой функционал реализуется в клиентских библиотеках, и к сожалению, «из коробки» этот функционал реализован пока только в Ruby API, однако это не мешает вам хешировать ключ самостоятельно и получать ID сервера, к которому с этим ключом обращаться.

Установка и базовая настройка.

Исходные данные: Debian 8.8 Jessie (amd64)

Все нормально, Redis слушает на порту 6379.

Настройка безопасности.

1. Запускаем redis-server только на localhost

В некоторых дистрибутивах Linux после установки Redis принимает запросы на всех интерфейсах, что недопустимо из соображений безопасности, т.к. по-умолчанию доступ к Redis не защищен паролем.

Поэтому будет не лишним проверить в файле /etc/redis/redis.conf
наличие строки

Если её нет, обязательно пропишите.

Далее, если прописали, то перезапускаем Redis:

2. Ставим пароль на доступ к redis-server:

Как я уже говорил выше, по-умолчанию к редис может подключиться любой желающий без пароля, например так:

И в файле /etc/redis/redis.conf пишем

Далее, если прописали, то перезапускаем Redis:

Теперь при попытке сделать:

мы видим, что анонимно заходить нельзя.

ВНИМАНИЕ! Запуская redis-cli и вводя в нем команды, включая AUTH с паролем история этих команд сохраняется в файле

/.rediscli_history
Если злоумышленник получит к нему доступ, то и сможет узнать пароль.
Конечно

/.rediscli_history доступен только текущему пользователю, например root и никто другой его не прочитает, но об этом лучше знать.
Так же пароль хранится в файле /etc/redis/redis.conf и по-умолчанию этот файл доступен на чтение всем пользователям сервера, что совершенно неправильно и это мы исправим далее.

3. Переименовываем и отключаем особо важные команды, это FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG

Для этого в файле /etc/redis/redis.conf пишем:

Далее, если прописали, то перезапускаем Redis:

4. Смена прав на директорию с базой и файл конфигурации

Смотрим права по-умолчанию на директорию с базой:

Смотрим права по-умолчанию на файл конфигурации

Далее, если все сделали, то перезапускаем Redis:

На этом базовая настройка Redis закончена.

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.

источник

Установка Redis + Redis PHP + phpRedisAdmin на боевом сервере за 15 минут

Всем уже давно известно, что самые лучшие бинарные файлы — это те, которые были скомпилированы именно на этом компьютере. И, когда вопрос заходит о производительности, то компилирование компонентов на этом компьютере даст свое преимущество в скорости и стабильности.

Читайте также:  Установка лазера стоп сигнал

В данной статье речь пойдет о том, как подготовить Redis, phpredis (С модуль для php) и phpRedisAdmin для работы на боевом сервере.

Для того, чтобы собрать все полноценно, нам нужно иметь на сервере:

  • gcc 4.5.2 (Я компилировал под этой версией, но думаю, что с другими проблем не возникнет)
  • Make 3.81 (Опять же, версия не принципиальна)
  • php5-dev (Версия должна совпадать с версией php)

После того, как мы убедимся, что все зависимости удовлетворены, начинаем собирать все компоненты.
Нам потребуются:

  • Redis 2.4.4 Stable
  • phpredis 2.1.3
  • phpRedisAdmin

Собираем Redis

Для того, чтоб собрать Редис, нам потребуются сами исходники. Получить их можно с github. Поэтому
https://github.com/antirez/redis/zipball/2.4.4 загружаем сразу нужный тег.

Теперь у нас есть все исходники Redis 2.4.4, осталось их скомпилировать.
Все очень просто

Первой командой мы собрали Redis, второй его проверили на работоспособность.
Make test будет проходить долго (около 2х минут). После теста должна вернуться такая строка «\o/ All tests passed without errors!»

Redis собран, осталось зачистить мусор и унести редис в нужный каталог.
Унесем весь скомпилированный Redis в папку /usr/bin/redis. А чтоб запускать Redis-server, в /usr/bin создадим shell файл redis-server.

Уносим файлы Redis в /usr/bin/redis

Мы все еще остаемся в папке antirez-redis-04bba69, где лежат исходники

Мы скопировали все файлы от Redis и удалили папку с исходниками, она нам уже не нужна.
Будьте осторожны с последней командой! sudo для нее не нужен, папка и так в наших владениях.

Теперь нам нужно создать файл для запуска redis-server.

Вместо vim можете использовать любой другой редактор. Это не принципиально.
В файл вставляем:
cd /usr/bin/redis && ./redis-server redis.conf
Сохраняем, закрываем.

Для этого файла нужно дать право на исполнение.

Redis.conf загружен, осталось его настроить.
Заменяем в файле конфигурации

daemonize no на daemonize yes # Пусть работает как демон
timeout 0 на timeout 30 # В случае баги клиент, который не отсоединяется, навечно зависнет в памяти Redis
loglevel notice на loglevel warning # У нас боевой сервер, минимум отладочных сообщений
Строку 166 нужно расскоментировать и установить пароль к примеру requirepass foobared
Строку 350 комментируем, она не нужна.

Запуск!

Если все было сделано правильно, то запускаем сервер

По идее вам должно показать приглашение от Redis
Trying 127.0.1.1…
Connected to localhost.
Escape character is ‘^]’.

Если вы его получили, значит все отлично, Redis работает.

Тестируем сервер

Теперь мы общаемся с Redis по сокету.
Авторизируемся:

Устанавливаем тестовое значение

Если все прошло успешно, значит сервер работает, и с ним мы заканчиваем. Устанавливаем команду на автозагрузку при старте системы и все.

Redis + PHP5. Компилируем модуль для PHP

Тут тоже все очень просто, так что можно просто следовать командам.

Тут думаю комментарии не нужны.

Теперь собираем redis.so расширение.

Теперь в папке modules появился файл redis.so, он-то нам и нужен.

меняем на имя папки, которое выглядит примерно так: 20090626.

Далее дать информацию php о Redis.so
поэтому

и вписываем в него extension=redis.so
По желанию заменяем apache2 на cli, cgi и так далее, в зависимости от того, как у Вас установлен php, и как вы его хотите использовать вместе с Redis.

Теперь рестартим apache2 и в тестовом php файле пишем:

Если ошибка, что класс Redis не существует, не вылетела, то все отлично.

Проведем benchmark тест непосредственно в php.

У меня появилась информация, что 80000 запросов были обработаны за 2.6 секунд.

На этом с php мы закончили. Далее phpRedisAdmin.

Установка phpRedisAdmin

Установка phpRedisAdmin абсолютно не нужна, но для визуализации данных не помешает.

Качаем из git саму админку.

Мы создаем папку redisadmin в /var/www. Добавляем права на файлы, потому что изначально у меня permission denied на redisadmin.

Не забудьте настроить веб-сервер, чтоб сайт можно было открыть уже из сети.
Но использовать redis admin не безопасно на продакшене, поэтому его нужно как ни как закрыть для всех посторонних глаз паролем.

Нужно расскоментировать строку 11 и установить пароль к серверу.

Далее нужно расскоментировать блок с 36 по 46 строку, назначив админский пароль, который будет запрашиваться при входе в phpRedisAdmin

PROFIT!
За 15 минут мы смогли поднять Redis сервер, настроить его для работы с PHP и поднять phpRedisAdmin.

источник

Добавить комментарий

Adblock
detector