CentOS下Python安全设置的关键措施
SELinux(Security-Enhanced Linux)是Linux内核的安全模块,可限制Python进程的权限,防止越权操作。需先启用SELinux:sudo yum install selinux-policy-targeted、sudo systemctl enable --now selinux;再通过audit2allow工具根据日志生成自定义策略(如针对Python应用的访问控制):sudo cat /var/log/audit/audit.log | grep python | audit2allow -M my_python_policy,最后加载策略:sudo semodule -i my_python_policy.pp。还可通过chcon命令设置Python可执行文件的安全上下文(如sudo chcon -t bin_t /usr/local/bin/python3.8),或用setsebool调整布尔值(如允许HTTP服务连接网络:sudo setsebool -P httpd_can_network_connect 1)。
虚拟环境可避免不同Python项目间的依赖冲突,减少因依赖漏洞引发的安全风险。创建虚拟环境:python3 -m venv myenv,激活环境:source myenv/bin/activate,之后在环境中安装所需包(如pip install package_name)。建议为每个项目单独创建虚拟环境,避免全局安装包。
通过firewalld工具限制对Python应用端口的访问,仅允许可信IP或网络访问。安装并启动firewalld:sudo yum install firewalld -y、sudo systemctl enable --now firewalld;开放指定端口(如8000):sudo firewall-cmd --permanent --zone=public --add-port=8000/tcp,重载配置:sudo firewall-cmd --reload。若使用iptables,可通过iptables -A INPUT -p tcp --dport 8000 -j ACCEPT添加规则,并保存配置(service iptables save)。
及时更新系统和Python包以修复已知安全漏洞。更新系统:sudo yum update -y;升级pip:pip install --upgrade pip;检查过期包并升级:pip list --outdated --format=freeze | grep -v '^\-e' | cut -d= -f1 | xargs -n1 pip install -U。若需更新Python版本,建议下载官方源码编译安装(如Python 3.8),确保使用最新安全版本。
遵循最小权限原则,避免使用root用户运行Python应用。创建专用用户(如pythonapp):sudo adduser -r -s /sbin/nologin pythonapp,将应用目录所有权赋予该用户:sudo chown -R pythonapp:pythonapp /opt/myapp。设置复杂口令(包含大小写字母、数字、特殊字符,长度超过10位),可通过修改/etc/login.defs文件强制执行口令策略(如PASS_MIN_LEN 12、PASS_COMPLEXITY y)。禁用不必要的超级用户账户(如锁定未使用的账户:passwd -l username),或将其shell改为/sbin/nologin(usermod -s /sbin/nologin username)。
forms模块)确保输入符合预期格式,防止SQL注入、XSS等攻击。eval()、exec()等动态执行函数,尤其是处理用户输入时,防止恶意代码执行。{{ variable|e }})过滤特殊字符(如<、>),防止XSS攻击。.env文件(通过python-dotenv库加载)存储敏感信息(如数据库密码、API密钥),避免硬编码在代码中。确保.env文件加入.gitignore,防止误提交到代码仓库。若Python应用为Web服务(如Flask、Django),需配置HTTPS加密数据传输。使用Let’s Encrypt获取免费SSL证书,或通过证书颁发机构(CA)购买证书。以Nginx为例,配置HTTPS:编辑Nginx配置文件(如/etc/nginx/conf.d/myapp.conf),添加以下内容:
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
location / {
proxy_pass http://localhost:8000; # 转发到Python应用
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重载Nginx配置:sudo systemctl reload nginx。若使用Flask,可通过ssl_context参数直接启用HTTPS(仅用于开发测试):app.run(ssl_context=('cert.pem', 'key.pem'))。
/var/log/messages、应用自身日志)和SELinux日志(/var/log/audit/audit.log),识别异常行为(如频繁的权限拒绝、未授权访问)。scapy监控网络数据包(检测异常流量)、用python-iptables动态调整防火墙规则(如封锁频繁访问的IP)。supervisor管理Python进程,确保进程崩溃后自动重启,并记录进程输出(如stdout、stderr),便于排查问题。