我使用 proftpd 和 MySQL 进行虚拟 FTP 托管。
我已经开始编写细粒度的 SELinux 策略,并发现它正在尝试访问 my.cnf 文件。
问题是,为了什么以及为什么?
type=AVC msg=audit(1378191337.059:153431): avc: denied { getattr } for pid= comm="proftpd" path="/etc/my.cnf" dev="dm-1" ino=1180081 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:mysqld_etc_t:s0 tclass=file
type=AVC msg=audit(1378191337.059:153432): avc: denied { read } for pid=50590 comm="proftpd" name="my.cnf" dev="dm-1" ino=1180081 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:mysqld_etc_t:s0 tclass=file
type=AVC msg=audit(1378191337.059:153432): avc: denied { open } for pid=50590 comm="proftpd" path="/etc/my.cnf" dev="dm-1" ino=1180081 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:mysqld_etc_t:s0 tclass=file
的输出ps auxwf|grep 50590
现在为空 - 进程不再存在。看起来每次登录尝试时它都会尝试这样做。
更新: 已提交错误/功能请求,开发人员提交的补丁: http://bugs.proftpd.org/show_bug.cgi?id=3971
答案1
补充一下,源代码也提到了这一点:
我检查了最近的快照。具体来说,proftpd-cvs-20130903/contrib/mod_sql_mysql.c
:
485 /* Make sure the MySQL config files are read in. This will read in
486 * options from group "client" in the MySQL .cnf files.
487 */
488 mysql_options(conn->mysql, MYSQL_READ_DEFAULT_GROUP, "client");
答案2
链接 libmysqlclient 的 MySQL 客户端读取全局选项来自[client]
的部分/etc/my.cnf
。这是此类客户端的典型行为,并且ProFTPD 就是这样的客户端当您使用它的 MySQL 模块时。
SELinux 布尔值ftpd_full_access
将允许此访问,但它也会有效地禁用整个 FTP 守护进程的操作的 SELinux,因此不应在没有极其谨慎的情况下使用它。
如果是我的话,我会提出一个功能请求,反对selinux-policy
请求添加布尔值以允许添加此访问权限,或者将其添加到ftpd_connect_db
布尔值中。
答案3
来自文档之外
问题:如何配置mod_sql
才能使用加密连接(例如是否将 SSL/TLS 连接到后端数据库服务器?
回答:如果您使用的是 MySQL,那么您可以在[客户]配置文件的部分my.cnf
。
这就是为什么 proftpd 尝试读取 /etc/my.cnf