为什么我让 EACCESS 写入 chmod 777 目录?

为什么我让 EACCESS 写入 chmod 777 目录?

我将其移至/tmp另一个硬盘以节省 SSD 的磨损。

ls -aolh /
lrwxrwxrwx   1 root   10 Jan  3 17:22 tmp -> /store/tmp

ls -aolh /store
drwxrwxrwx 13 root   4.0K Jan  7 13:51 tmp

ls -aolh /store/tmp/
drwxrwxrwx 13 root   4.0K Jan  7 13:54 .

我可以/tmp/以非 root 用户身份创建文件,但 KMail 无法启动,mysql 错误日志包含

/usr/sbin/mysqld: Can't create/write to file '/tmp/ibVLn1jR' (Errcode: 13)
150107 13:49:56  InnoDB: Error: unable to create temporary file; errno: 13
150107 13:49:56 [ERROR] Plugin 'InnoDB' init function returned error.
150107 13:49:56 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
150107 13:49:56 [ERROR] Unknown/unsupported storage engine: innodb
150107 13:49:56 [ERROR] Aborting

错误代码 13 是 EACCESS。该文件/tmp/ibVLn1jR尚不存在。这怎么会是权限失败呢?

答案1

SELinux 是否启用了?(如果已启用,getenforce命令将返回。)Enforcing

如果是这样,SELinux 策略可能会阻止 mysqld 写入符号链接到另一个目录的 tmp 目录——该目录没有定义策略。您可以通过setenforce 0以 root 身份运行以将系统置于宽容模式来测试这一点。如果 Kmail 可以正常工作,那么您需要为 /store 目录配置策略。

如果您正在运行 GUI 桌面,该sealert实用程序将指出问题并告诉您该怎么做。否则,您需要使用 SELinux 命令行审计工具之一。

相关内容