问个问题了...现有nginx.php脚本来操控nginx。
如有启动、停止、重启、等。php与nginx都不是root权限。
用exec system函数,
基本的一些 ls  cp 命令是没问题。kill -INT `cat /usr/local/nginx/logs/nginx.pid`;
怎么测试都执行不了。
cat /usr/local/nginx/logs/nginx.pid是没问题,就是kill命令执行不了,
估计kill权限问题,不知要怎么搞。
还有假设能把nginx停止了。那nginx.php自己都不能运行了,是得上服务器来启动nginx了。
要保证nginx.php能正常运行,这个要怎么处理好些? 是要新开端口、进程什么的么?
有这方面经验的朋友指点下啊。
或大牛们给些资料来学习学习。

解决方案 »

  1.   

    http://www.osseye.com/?p=295
    找来的文章  希望有所帮助
      

  2.   

    chmod 755   试试
      

  3.   

    本帖最后由 PhpNewnew 于 2012-07-04 20:05:44 编辑
      

  4.   

    当然不能通过web接口操作了- -。。写个php脚本,使用ssh操作远程服务器执行nginx重启关闭等,相关接口:
    http://cn.php.net/ssh2,服务器sshd服务打开。这样的话,权限将与你的ssh user相关,用适当的用户ssh执行command即可。SYNOPSIS
           #include <signal.h>       int kill(pid_t pid, int sig);       For a process to have permission to send a signal to a process designated by pid, unless the sending process has appropriate  privileges,  the  real  or
           effective user ID of the sending process shall match the real or saved set-user-ID of the receiving process.这是Kill的权限问题,要么你是root,要么你和nginx进程的真实用户ID一样,要么和nginx进程的保存设置用户ID一样,你应该都可以实现。
      

  5.   

    从Nginx的C源码实现角度,master进程是root启动的,它的实际用户ID是文件属主,如果master bind 80后setuid切到其他有效用户ID,那么savfed set-user-ID将是root。所以你如果想kill nginx,你要么以root身份ssh,要么是Nginx这个二进制文件的属主身份ssh,这两者都可以实现kill。其他的都没戏,别看你nginx的配置文件里写的工作用户和工作组,都是没权利的,它们是nginx的worker进程setuid降低权限使用的。
      

  6.   

    哈哈。那个一样啊,我测试就是写个sh脚本来执行的。
    其它命令与kill都一起执行。
    其它命令可以执行返回数据,就kill不行。
      

  7.   

    这个ssh2也有了解过点点,这个是要远程登录吧?要root的密码。。
    我是写给别人用的要别人提供root密码好像有些不太妥啊。以root身份ssh,那就要root密码了也就要用你上面提到的ssh2?
    nginx与php我是以建立www用户以www身份安装的,所以才有这问题了,如果用root身份又不安全。还是纠结啊。
      

  8.   


    ll 看nginx二进制程序的用户是谁, 用那个用户执行Kill.
      

  9.   

    -rwxr-xr-x 1 root root 3874792 Jul  5 11:55 /usr/local/nginx/sbin/nginx还有你能说下#1楼提到的方法吗? 
      

  10.   


    chown把nginx改成www就行,写PHP脚本用www用户ssh上去操作。
      

  11.   

    终于解决这问题了。
    还是用www的,通过c来切换root执行。剩下最后那个问题了。
      

  12.   

    不知道你遇到了什么问题?
    nginx 与其他提供持续服务的软件一样,都需要由管理员级别用户启动,否则一旦用户注销了,服务也就停止了你说用 nginx.php 脚本来操控 nginx
    从 nginx.php 文件名上看,应该是以 web 方式运行的
    但 nginx 一旦停止,nginx.php 如何运行?如果是通过 shell,那有何必多此一举
      

  13.   

    是web方式啊。现在web www账号是能做到执行root的命令了。我记得之前用过一主机面板程序就有实现的。
    可以把某些虚拟主机网站php什么的都停止运行。
    而面板自己本身不受影响的。
    面板也是php语言,用的是apache,不是nginx。要找资料学习都不知怎么找。