В моем дозорном режиме ведущий-ведомый; 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 /