所以我有一个脚本,它在心里运行apachectl -t -D DUMP_VHOSTS来获取特定机器上所有虚拟主机的列表。 然后,greps从这个响应,并产生一个关于机器上的虚拟主机的configuration机器可parsing信息的json blob。
这将作为一个非特权用户运行,因为它只是一个分析什么,而不是一个特权尝试改变任何东西。
但是,在debian上,非特权用户,完全正确地不能读取/etc/ssl/private任何内容,所以我得到: –
AH00526: Syntax error on line 27 of /etc/apache2/sitesenabled/ssl_proxy.conf: SSLCertificateKeyFile: file '/etc/ssl/private/ssl-cert-snakeoil.key' does not exist or is empty
这个问题在Apache上讨论:SSLCertificateKeyFile:文件不存在或为空
但是,我不希望用户运行脚本来访问密钥文件或者testingconfiguration,我只想让apache告诉我有关什么虚拟主机被定义。
在专门抛出这个错误的服务器上,我甚至没有使用SSL,所以它抱怨一个甚至不涉及VHOST的键,但是我可以看到它可能,但似乎Apache不能告诉只是继续,并忽略SSL模块或任何东西。
任何想法如何做到这一点,超越parsing的Apacheconfiguration直接?
编辑。
所以看来在检查时,apachectl在DUMP(s)_VHOSTS时所做的事情,并不像想象的那么愚蠢。 这本质上是validationconfiguration文件,也就是说,检查指定的文件是否存在。 不是,试图读取文件的内容。 因此,调用者不需要文件的读取权限,只需读取包含该文件的目录的权限即可。
两种方式:
设置权限,以便运行脚本的用户可以看到目录及其中的文件。 这可以用ACL而不是“常规的”unix权限来完成。 ( man setfacl是一个起点。)
设置你的sudoers文件,允许这个用户运行这个命令,作为一个可以读取这些文件的用户(可能是root用户或者可能是apache用户)。 入口应该是这样的:
username ALL = (root) NOPASSWD: apachectl -t -D DUMP_VHOSTS
这允许用户使用sudo以root身份运行这个命令,而不用input密码。
我有一个令人不满意的工作,围绕任何虚拟主机定义中的所有SSL定义,在一个<IfDefine !APACHE_CONFIG_TEST>块,所以我可以传递一个-D APACHE_CONFIG_TEST选项到apachectl以避免考虑和ssl键。
如果有办法用apache来做这件事,那就更好了,而不是把解决scheme破解成单独的configuration文件。
所以除了我提出的build议以及ACL / Sudo方法@ jenny-d的build议之外(如果没有我的双手不能编辑sudoers,我没有把它绑在一起),我build议将以下内容作为答案(因为它是我将要使用的):
由于apachectl只需要查看引用的文件,不能访问它们:
chmod a+rx /etc/ssl/private chmod or /etc/ssl/private/*
因此,“他人”仍然无法读取文件,但其他人可以确定提到的文件存在