我使用apt-get命令分别安装了virtualmin和phpmyadmin.由于Virtualmin的安全设置(suexec),phpMyAdmin无法正常工作.当我访问mydomain.com/phpmyadmin时,它会下载整个PHP页面而不是执行它.我试过禁用suexec但它没有用.所以现在我想删除phpMyAdmin.我使用apt-get remove命令删除了它,并删除了/ etc/phpmyadmin文件夹.但是,当我访问mydomain.com/phpmyadmin时,它会下载该页面.这可能意味着phpmyadmin没有完全删除.
问题是什么?
请帮忙.
我正在研究一个Perl脚本,它从Apache 2服务器上的服务器端调用.该脚本显示通用的"内部服务器错误"页面,而不是显示实际错误.当我检查Apache错误日志时,我看到以下消息:
unable to include "/foobar/index.pl" in parsed file /home/foouser/domains/foosite.com/public_html/foobar/index.shtml, referer: http://www.foosite.com/foobar/
suexec policy violation: see suexec log for more details, referer: http://www.foosite.com/foobar/
Premature end of script headers: settings.pl, referer: http://www.foosite.com/foobar/
Run Code Online (Sandbox Code Playgroud)
如何让Perl脚本显示错误而不是"内部服务器错误"?
我本来应该问一个单独的问题,因为我已经知道这确实会向浏览器发送错误(感谢brian):
use CGI::Carp qw(fatalsToBrowser);
Run Code Online (Sandbox Code Playgroud)
但是,如果问题出在Apache配置而不是Perl脚本上,那么错误将不会发送到浏览器,因为没有解释Perl代码.在这种情况下,由于这一行,我们可以告诉我遇到Apache错误(而不是Perl错误):
suexec policy violation: see suexec log for more details
Run Code Online (Sandbox Code Playgroud)
当Apache以SUexec模式运行时(这似乎是共享主机通用),就会发生这种情况.我不确定究竟有什么改变导致这个错误,但这就是我想要找到的.
使用ITK模块而不是运行Apache服务器的Suexec有什么好处?这个想法是一样的,即运行具有所有者权限的脚本而不是nobody,www或apache!
使用ITK更有利于suexec吗?如果是这样,为什么?相比之下,安全性和性能如何?
我在运行localhost的apache上启用了ssl.我生成了一个自签名证书并将其放在通常的位置:
[david@david web]$ ll /etc/ssl/certs/
...
-rwxrwxrwx. 1 david david 977 Mar 7 13:18 localhost.crt
-rwxrwxrwx. 1 david david 712 Mar 7 13:16 localhost.csr
-rwxrwxrwx. 1 david david 963 Mar 7 13:12 localhost.key
Run Code Online (Sandbox Code Playgroud)
但是当我重新启动Apache时,服务器出现故障,我在错误日志中收到以下内容:
[Fri Mar 07 13:29:17 2014] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
[Fri Mar 07 13:29:17 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Mar 07 13:29:17 2014] [error] (13)Permission denied: Init: Can't open server private key file /etc/ssl/certs/localhost.key
Run Code Online (Sandbox Code Playgroud)
权限对我来说没问题,我做错了什么?
错误信息是:
command not in docroot (/home/site1/cgi-bin/test.pl).
Run Code Online (Sandbox Code Playgroud)
在这里我发现了这个:
suexec要求CGI脚本位于服务器的DocumentRoot(而不是VirtualHost DocumentRoot)下.但是,允许VirtualHost DocumentRoot成为真实DocumentRoot下显示的目录的符号链接.
虚拟主机配置的一部分是:
[...]
DirectoryIndex index.html index.html index.php
DocumentRoot /home/site1/htdocs
SuexecUserGroup site1 site1
ScriptAlias /cgi-bin/ /home/site1/cgi-bin/
<Location /home/site1/cgi-bin>
Options +ExecCGI
</Location>
<Directory /home/site1/>
Options -Includes -Indexes -FollowSymLinks +ExecCGI MultiViews
AddHandler cgi-script .cgi .pl
AllowOverride none
Order allow,deny
Allow from all
</Directory>
[...]
Run Code Online (Sandbox Code Playgroud)
所以,我更喜欢在cgi-bin中使用Perl脚本,但是如果我无法解决这个问题,我可以将所有脚本移动到htdocs.
我必须维护一个包含大量Perl代码的史前网站.搬到新服务器后,事情变得模糊:
当来自同一客户端的多个请求在页面上运行(使用GD生成图像)时,这些脚本会覆盖其他变量,从而导致奇怪的结果.
作为一个快速的解决方法,我在Apache中设置MaxRequestsPerChild = 1,修复了这个问题,但现在事情变得缓慢到了爬行......
有没有办法分开请求?任何可以帮助我的mod_perl或Apache参数?
阿帕奇:
Server version: Apache/2.2.15 (Unix)
Server built: Apr 3 2014 23:56:16
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Run Code Online (Sandbox Code Playgroud)
perl -v
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
Run Code Online (Sandbox Code Playgroud)
任何解决方案都将非常感谢:)
编辑:我找不到使用mod_perl修复问题的正确方法,但以下解决方法有效:
最后一个是必要的,因为当启用suEXEC时,它给了我"脚本头的过早结束".
我正在尝试向旧脚本添加一项功能。该脚本是 suid,并使用 perl -T(污点模式:man perlsec),以提高安全性。我需要添加的功能是用Python实现的。
问题是我无法说服 perlsec 保留 suid 权限,无论我如何清理环境和命令行。
这很令人沮丧,因为它保留了其他二进制文件(例如 /bin/id)的 suid。/usr/bin/perl 是否有未记录的特殊情况?这似乎不太可能。
有谁知道如何进行这项工作?(按原样:我们没有资源来重新构建整个事情。)
解决方案:(根据@gbacon)
# use the -p option to bash
system('/bin/bash', '-p', '-c', '/usr/bin/id -un');
# or set real user and group ids
$< = $>;
$( = $);
system('/usr/bin/python', '-c', 'import os; os.system("/usr/bin/id -un")');
Run Code Online (Sandbox Code Playgroud)
这给出了期望的结果!
这是我的脚本的精简版本,它仍然显示了我的问题。
#!/usr/bin/perl -T
## This is an SUID script: man perlsec
%ENV = ( "PATH" => "" );
##### PERLSEC HELPERS #####
sub tainted (@) {
# Prevent …
Run Code Online (Sandbox Code Playgroud) 我正试图让git-http-backend在我的远程vps上运行而没有运气.我以类似于这个问题的方式调整了httpd.conf ,但是一旦我添加ScriptAlias指令,就会发生错误.
Apache错误日志:
suexec policy violation: see suexec log for more details
Premature end of script headers: git-http-backend
Run Code Online (Sandbox Code Playgroud)
Suexec日志
error: target uid/gid (503/500) mismatch with directory (0/0) or program (0/0) or trusted user (0/10)
Run Code Online (Sandbox Code Playgroud)
任何人都可以评论一个人通常如何解决suexec问题?
编辑
主要问题似乎是不允许Web服务器运行cgi脚本.
目前,关于配置suexec的文档已经超出了我的范围.我现在选择禁用它,这允许Web服务器运行这些脚本.我现在可以成功地推销回购.我发现这篇文章很有帮助.
我正在开发一个使用许多PHP脚本实现的网站.整个网站是一个在专用Apache服务器上运行的git存储库.服务器将向全世界提供网站,但不包含任何经销商子帐户/经销商帐户.
检查错误日志后,我看到以下内容:
SoftException in Application.cpp:256: File "/home/test/public_html/t.php" is writeable by group
Run Code Online (Sandbox Code Playgroud)
似乎该权限g+w
阻止PHP脚本执行,并简单地将"500 Internal Server Error"页面抛回Web浏览器.每次从git存储库中提取脚本时脚本都会自动获取权限g+x
.
我该怎么办?
禁用suEXEC?这似乎没有帮助.
有没有办法禁用"按组写可写"要求?那会不够呢?
以某种方式配置git不添加g+w
权限?
别的什么?