Назад | Перейти на главную страницу

redis не может записать дамп в / var / lib / redis в режиме принудительного применения selinux

В моем дозорном режиме ведущий-ведомый; Redis Slave не может записать дампы в / var / lib / redis / с ошибкой:

Не удалось открыть файл RDB dump.rdb (в корневом каталоге сервера / var / lib / redis) для сохранения: в доступе отказано

в то время как разрешения действительно правильные:

# ls -la /var/lib/redis/
total 68
drwxr-xr-x.  2 redis redis    22 Apr 20 11:39 .
drwxr-xr-x. 28 root  root   4096 Apr 17 12:15 ..
-rw-r--r--.  1 redis redis 62460 Apr 20 11:37 dump.rdb

Я посмотрел аудит selinux и смог найти некоторые отклонения, и только в разрешающем режиме я вижу, что процесс redis может писать в каталог. лайк:

type=AVC msg=audit(1555741351.680:2719): avc:  denied  { getattr } for  pid=8638 comm="redis-server" path="/var/lib/redis/dump.rdb" dev="vdb1" ino=68 scontext=system_u:system_r:redis_t:s0 tcontext=system_u:object_r:unlabeled_t:s0 tclass=file permissive=1

Я пробовал различные гранты разрешений selinux, подобные этому, и могу подтвердить, что semanage применил правило:

# cat /var/log/audit/audit.log |grep redis |audit2allow redis-server
#semodule -i redis-server.pp

Я искал здесь и там и не мог этого сделать, когда принудительно использовал selinux в сборке CentOS Linux версии 7.6.1810 с помощью redis-3.2.12-2.el7.x86_64

Во-первых, вы должны отменить изменения, сделанные с помощью semodule; они были ненужными и потенциально разрушительными. Ты можешь использовать semodule -r redis-server (поскольку это похоже на то, что вы назвали модулем), чтобы удалить его.

Во-вторых, проблема возникла из-за того, что файл, к которому redis пытался получить доступ, вообще не имел метки SELinux. Обратите внимание, что его тип был unlabeled_t. Трудно сказать, почему это произошло, но обычно причина в том, что файл был создан, когда SELinux был отключен. Решение простое: пометьте файл контекстом по умолчанию.

(НЕ ПРОДОЛЖАЙТЕ, если вы не удалили модуль SELinux, как описано выше.)

restorecon -v /var/lib/redis/dump.rdb

Поскольку вы вполне могли запускать эту систему с отключенным SELinux, вероятно, будет много других файлов с неверной или немеченной меткой. Я бы просто рекурсивно перемаркировал все в файловой системе, чтобы быть в безопасности и предотвратить проблемы в будущем.

restorecon -rv /