Rob*_*sto 16 script bash permissions php
我正在尝试从 PHP 执行 .sh 脚本,但是它没有执行。
我检查了错误日志,并且收到了“sh:权限被拒绝”错误。我检查了在哪个用户下运行 php,它是在 apache 用户下完成的。
我尝试将 .sh 的所有权更改为 apache 用户,但没有结果。
起初我以为这是因为脚本在 www/ 目录之外,但是即使我将脚本放在同一目录中,仍然会出现错误。
除了将 apache 用户添加到 SUDOers 列表之外,还有其他解决方案吗?
如果我使用 'php filename.php' 命令从 putty 启动它,sh 脚本运行良好。
Læt*_*æti 14
此类问题可能取决于您使用的操作系统及其配置方式。一些 linux 发行版(主要是那些基于 RHEL 的发行版,如 CentOS 或 Fedora)默认启用 SELinux。可以使用以下命令进行检查和临时更改:
root@ls:~# /usr/sbin/getenforce
Enforcing
root@ls:~# /usr/sbin/setenforce Permissive
root@ls:~# /usr/sbin/getenforce
Permissive
Run Code Online (Sandbox Code Playgroud)
您还可以通过以下方式更完整地查看当前配置:
root@ls:~# /usr/sbin/sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
Run Code Online (Sandbox Code Playgroud)
可以通过编辑/etc/selinux/config文件并将SELINUX变量设置为permissive或来永久更改此更改disabled。
但是,解决此类问题的正确方法(如果您确实遇到这种情况)是检查/var/log/audit/audit.log日志文件。它将包含与 SELinux 规则相关的所有事件。然后您可能应该为您的脚本提供正确的上下文,即被授权由 apache/php 用户运行。检查 SELinux 安全上下文是通过以下方式完成的ls -Z:
root@ls:~# ls -alZ /var/www/cgi-bin/
drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t .
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t ..
Run Code Online (Sandbox Code Playgroud)
这列出了每个文件/目录的用户、角色和类型。这里的httpd_sys_script_exec_ttype赋予了cgi目录下的文件被httpd执行的权限。您的 shell 脚本可能应该具有相同的类型。
您还可以将audit.log行提供给audit2allow命令。它将向您输出使 SELinux 满意所需的更改。但通常建议的更改需要在 SELinux 策略本身上完成,这不是您应该在您的情况下执行的操作(不过,此输出可以提供有关正在发生的事情的一些线索)。
以下页面描述了一个类似的问题和不同的解决方法:http : //sheltren.com/stop-disabling-selinux
ken*_*orb 11
尝试以下建议:
php -r "echo exec('whoami');"r-x标志权限:
chmod 755 dir; chmod 755 file+s在文件中添加一个标志(sudo)(不推荐):
chmod u+s file,safe_mode.include_path,例如:
php.ini 文件: include_path ".:/usr/local/lib/php:/your/dir".htaccess文件:php_value include_path ".:/usr/local/lib/php:/your/dir"/bin/sh对您的 Apache 用户有效(例如)(例如检查:)finger。php.ini不使用:disable_functions用于exec功能selinux-utils安装(安全性增强的 Linux 系统),请按照@Tonin回答中的说明检查getenforce/setenforce配置。php.ini或httpd.conf文件,请不要忘记重新启动网络服务器,php.ini所有类型的错误(的display_error,error_reporting等等)。