PHP调用C程序问题(C程序需要在后台驻留)涉及LINUX权限问题
2015-06-20 09:52
543 查看
一、最近在搞虚拟机,前端通过PHP发送命令过来,PHP通过proc_open进行与本地的C程序通信(PHP即发送参数给C程序,程序在后台运行)。C程序实现开启虚拟机、关闭虚拟机等操作。但是在执行的时候出现了问题,首先是PHP传递过来参数C程序启动后,无法在后台驻留执行,而是一闪而过,经大神指点,查找原因是因为C程序的权限问题。一般我们是在ROOT全下下编译程序,所以程序的权限是-RWXR-XR-X,PHP调用C程序是以apache的身份调用,我这里的身份是www-data用户作为apache用户来调用,所以在权限上有限制。
解决方法:1.首先我修改了C程序的文件权限。chmod777发现无效。原因不祥。
2.大神指点,要修改程序临时运行的权限,换句话说让www-data用户在执行C程序的时候是以ROOT权限去执行的,这样就可以了。采用chmod 4777 程序名 即可。
下边是一些关于 chmod u+s的说明:(摘自鸟哥)
文件的特殊权限SUID:设置后在相应的执行位(X位)上显示S。
基本的SUID有这样的权限和功能:
1.SUID 权限仅对二进制其程序有效
2.执行者对于改程序需要具有X的可执行权限
3本权限尽在执行该程序的过程中有效
4 执行者酱油该程序的所有者权限。
举例来说,LINUX系统中,所有帐号密码都是记录在/etc/shadow中,这个文件的访问权限为“-R------ root root ”,意思是这个文件仅有ROOT可读,且仅有ROOT可以强制写入,但我们发现我们以普通用户身份登录LINUX系统中时候,我们输入"passwd"命令看,一般用户也可以修改自己的密码。为什么普通用户还可以访问只有ROOT才可以访问的文件呢,这个就是因为SUID的功能了,普通用户对于passwd程序是可执行的具有X权限,而passwd的拥有者是root,普通用户在执行passwd的过程中会暂时获得ROOT权限,这样就是原理了。
我们就是要借助这个功能来实现我们的PHP调用C的过程中,以ROOT权限去执行C程序。
二、就是与虚拟机通信执行开关机命令是通过虚拟机自动生成的UNIX SOCKET本地文件进行通信,每次生成文件的时候,权限都会改变,所以在执行和虚拟机通信的相关程序下都要使用SUID的方式来运行,不然会出现通信失败,即因为C程序没有足够权限访问本地UNIX SOCKET文件,造成通信失败,也可以获取connect失败的错误代码,在errno中获取,再对照一下。进行错误定位。
解决方法:1.首先我修改了C程序的文件权限。chmod777发现无效。原因不祥。
2.大神指点,要修改程序临时运行的权限,换句话说让www-data用户在执行C程序的时候是以ROOT权限去执行的,这样就可以了。采用chmod 4777 程序名 即可。
下边是一些关于 chmod u+s的说明:(摘自鸟哥)
文件的特殊权限SUID:设置后在相应的执行位(X位)上显示S。
基本的SUID有这样的权限和功能:
1.SUID 权限仅对二进制其程序有效
2.执行者对于改程序需要具有X的可执行权限
3本权限尽在执行该程序的过程中有效
4 执行者酱油该程序的所有者权限。
举例来说,LINUX系统中,所有帐号密码都是记录在/etc/shadow中,这个文件的访问权限为“-R------ root root ”,意思是这个文件仅有ROOT可读,且仅有ROOT可以强制写入,但我们发现我们以普通用户身份登录LINUX系统中时候,我们输入"passwd"命令看,一般用户也可以修改自己的密码。为什么普通用户还可以访问只有ROOT才可以访问的文件呢,这个就是因为SUID的功能了,普通用户对于passwd程序是可执行的具有X权限,而passwd的拥有者是root,普通用户在执行passwd的过程中会暂时获得ROOT权限,这样就是原理了。
我们就是要借助这个功能来实现我们的PHP调用C的过程中,以ROOT权限去执行C程序。
二、就是与虚拟机通信执行开关机命令是通过虚拟机自动生成的UNIX SOCKET本地文件进行通信,每次生成文件的时候,权限都会改变,所以在执行和虚拟机通信的相关程序下都要使用SUID的方式来运行,不然会出现通信失败,即因为C程序没有足够权限访问本地UNIX SOCKET文件,造成通信失败,也可以获取connect失败的错误代码,在errno中获取,再对照一下。进行错误定位。
相关文章推荐
- 【Linux计划】XSI IPC
- CentOS 6.5下二进制安装 MySQL 5.6
- linux安装rlwrap软件包
- 项目总结--实现Linux下的find命令
- Linux 必学和要掌握的路径
- 如何在安装Linux之后自己修改Swap分区大小
- Linux中消除扬声器的嘟嘟叫声
- linux下安装小鹤双拼-鹤形
- win7下virtualbox虚拟机中安装centos后设置共享文件夹
- Linux_3.5_时间编程
- linux IO
- Linux中xargs命令的重要作用------顺便分享一次面试经历和一次实战经历
- Centos 6.5系统更改yum源为163
- linux权限
- linux diff命令详解
- Linux系统信息查看命令大全
- linux学习(一)
- centos7解决中文乱码问题
- linux程序设计——MySQL管理(第八章)
- linux基础知识个人总结