在Apache中加载Python时必须添加执行权限吗?

时间:2018-12-28 06:08:45

标签: python apache2 ubuntu-16.04

我在DigitalOcean Droplet中使用Ubuntu 16.04服务器,Python 2.7.12和Apache 2.4.18。

我将index.py上传到了网络根目录。该脚本的内容如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Turn on debug mode.
import cgitb
import platform
cgitb.enable()

# Print necessary headers.
print "Content-Type: text/html\n"
print "<html><body>Python Version: %s</body></html>" % (platform.python_version())

如果我将index.py设置为644(没有执行权限),则脚本将返回500 Internal Server Error。日志说:

  

[2018年12月28日星期五04:05:18.035946] [cgi:error] [pid 29045] [client 202.75.86.173:54912]标头之前的脚本输出结束:index.py

从另一个答案中,建议我应该通过chmod +x index.py添加许可权:

-rwxr-xr-x 1 root www-data  254 Dec 28 04:05 index.py

添加执行权限后,Python脚本可以正常运行。

  1. 我这样做正确吗?
  2. 这会导致安全问题吗?

这是Apache站点配置:

<VirtualHost *:80>
    ServerName abc.example.com
    DocumentRoot /var/www/vhosts/abc.example.com

    <Directory /var/www/vhosts/abc.example.com/>
        Options -Indexes
        Options +ExecCGI
        DirectoryIndex index.py
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
    AddHandler cgi-script .py

    ErrorLog ${APACHE_LOG_DIR}/abc-apache2.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access-logfile.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =abc.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

更新

这个问题与我遇到的错误无关,正如我在问题中提到的那样,我已经使脚本工作了。我只是担心安全。简而言之,不是重复的。

1 个答案:

答案 0 :(得分:1)

1。。是的,您做对了。

您说过要Apache将.py文件作为cgi-script执行。 这意味着如果授权,apache将“执行”您的index.py文件。然后,您必须授予apache权限才能执行python文件。

在index.py文件中,有一个shebang,用于指示要使用哪个解释器执行该文件。

2。。根据您的情况,您可以像这样设置良好的安全性:

chown www-data:www-data index.py
chmod 550 index.py

然后只有root用户才能修改或删除文件。 而且只有apache用户和apache组才能读取或执行脚本(假设您的apache用户/组是www-data)。