Redis安裝之後,建立/etc/init.d/redis_6379腳本檔。但是當系統Reboot之後,Redis啟動失敗。
查看/var/log/audit/audit.log,有以下資訊:
type=AVC msg=audit(1492424320.122:76): avc: denied { open } for pid=907 comm="redis-server" path="/var/log/redis_6379.log" dev="sda2" ino=9298368 scontext=system_u:system_r:redis_t:s0 tcontext=system_u:object_r:var_log_t:s0 tclass=file
type=SYSCALL msg=audit(1492424320.122:76): arch=c000003e syscall=2 success=no exit=-13 a0=7fc5ac021760 a1=441 a2=1b6 a3=24 items=0 ppid=904 pid=907 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="redis-server" exe="/usr/bin/redis-server" subj=system_u:system_r:redis_t:s0 key=(null)
type=SERVICE_START msg=audit(1492424320.130:77): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=redis_6379 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
驗證一:
systemctl start redis_6379,失敗。
setenforce 0之後,systemctl start redis_6379,成功。
驗證二:
SELINUX=disabled之後,重新啟動系統,登入後發現redis啟動成功。
經過由此兩項驗證,推測是SELinux引發的啟動失敗。
之後,根據之前的一點點經驗嘗試修復:
1.這個是最基本的命令,redis_t是從前面audit.log看來的。
[root@php-dev-test log]# chcon -t redis_t /var/log/redis_6379.log
chcon: failed to change context of ‘/var/log/redis_6379.log’ to ‘system_u:object_r:redis_t:s0’: Permission denied
2.這個是調整MySQL資料目錄是學來的。
[root@php-dev-test log]# semanage fcontext --add --type redis_t '/var/log/redis_6379.log'
ValueError: Type redis_t is invalid, must be a file or device type
求教:如何才可以在開啟SELinux的情況下是的Redis可以正常啟動。
順便,曾經在其他資料中見過到一種啟動方法:
/etc/init.d/redis_6379 start
在開啟SELinux,使用systemctl start redis_6379指令啟動服務失敗的情況下,可以用這個指令成功啟動服務。
這也令人好奇,這個指令是如何規避了SELinux控制的呢?