Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php (U) 通过“安装”;执行官;加上;“sudo”;。用户是一个;“苏多尔”;用NOPASSWD_Php_Linux_Root_Sudo_Archlinux - Fatal编程技术网

Php (U) 通过“安装”;执行官;加上;“sudo”;。用户是一个;“苏多尔”;用NOPASSWD

Php (U) 通过“安装”;执行官;加上;“sudo”;。用户是一个;“苏多尔”;用NOPASSWD,php,linux,root,sudo,archlinux,Php,Linux,Root,Sudo,Archlinux,我已经看了这两个方面: 但是,我的问题似乎不同 我构建了一个扩展库,用于调用Linux CLI工具。它是围绕着家庭而建的 我正在使用它成功地执行所有(直到我点击这个mount/umountbug)CLI工具 现在,我正在构建一个RAID设置例程,它涉及到partprobe,parted-rm,mklabel,mkpart,mdadm-停止,零超级块,创建,dd,mkfs并最终mount/umount 实际上有两个优雅的例程,一个用于组装RAID,另一个用于拆解 正如标题所说,问题在于m

我已经看了这两个方面:

但是,我的问题似乎不同


我构建了一个扩展库,用于调用Linux CLI工具。它是围绕着家庭而建的

我正在使用它成功地执行所有(直到我点击这个
mount
/
umount
bug)CLI工具

现在,我正在构建一个RAID设置例程,它涉及到
partprobe
parted
-rmmklabelmkpart
mdadm
-停止零超级块创建
dd
mkfs
并最终
mount
/
umount

实际上有两个优雅的例程,一个用于组装RAID,另一个用于拆解

正如标题所说,问题在于
mount
umount
。上面列出的其他工具及其命令成功执行

环境 Arch Linux-Linux stone 3.11.6-1-Arch#1 SMP抢占周五10月18日23:22:36 CEST 2013 x86_64 GNU/Linux

Arch正在运行
systemd
-可能会以某种方式影响安装

Apache web服务器(最新版本),运行mod_php(最新版本)。Apache以
http:http
的形式运行

http
wheel
组中,
wheels
是sudoers-
%wheel ALL=(ALL)NOPASSWD:ALL

请不要开始讨论
webserver
的完整根功能-该单元是一个NAS,它运行一个定制的WebOS,并且仅用于内部网。即使有黑客企图-这些很可能会破坏整个系统,这对客户来说是不健康的。NAS是用于存储的,它运行大量的相关服务,并且这些单元已部署在30多个对象中,没有任何问题。简而言之,
webserver
不是为web服务,而是为操作系统服务

在编写之前,为了快速测试,我向sudoers显式地添加了
http
-
httpall=(ALL)NOPASSWD:ALL
-不起作用

问题 RAID组装过程中运行的最后一个命令是
mount/dev/md/stone\:supershare/mnt/supershare
,它返回的退出代码为
0

执行后续装载会导致:

mount: /dev/md127 is already mounted or /mnt/supershare busy
/dev/md127 is already mounted on /mnt/supershare
退出代码为
32
。所以,阵列安装在某个地方

执行
umount/dev/md/stone \:supershare
在上述
mount
之后,返回退出代码
0
。执行后续的
umount
会导致:

umount: /dev/md/stone:supershare: not mounted
上面的命令是使用sudo自动运行的

所以,它安装成功,卸载成功,但是。。。我在TTY0上以
root
身份登录,在执行
mount
操作后运行
lsblk
,但我没有看到
mountpoint

NAME      MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda         8:0    0  55.9G  0 disk
├─sda1      8:1    0     1M  0 part
├─sda2      8:2    0     1G  0 part  [SWAP]
├─sda3      8:3    0    12G  0 part  /
└─sda4      8:4    0  16.6G  0 part  /home
sdb         8:16   0 931.5G  0 disk
└─sdb1      8:17   0   899M  0 part
  └─md127   9:127  0   1.8G  0 raid0
sdc         8:32   0 931.5G  0 disk
└─sdc1      8:33   0   899M  0 part
  └─md127   9:127  0   1.8G  0 raid0
尝试从TTY0使用相同的
mount
命令将其成功装载(lsblk在之后显示)


如果我使用CLI工具装载它,然后同时使用CLI工具运行
mount-l
lsblk
,则装载点可见

从TTY0以root用户身份立即运行这两个命令时,不显示装入点


重新启动,重置所有装载(非自动装载),然后从TTY0装载并从TTY0运行
lsblk
,显示装载点

然后,使用CLI工具运行
lsblk
,显示装入点

然后,使用CLI工具运行
umount
,退出code
0
-卸载

再次使用CLI工具运行
lsblk
,不会显示装入点

从TTY0运行
lsblk
,仍然显示装入点


当使用my CLI工具运行
mount
/
umount
时,它似乎会私下执行
sudo
会话运行程序的命令

umount
ing在TTY0装载后,确实会卸载它,但再次-私下卸载


从TTY0以
http
身份登录并在从CLI工具装入RAID后运行
lsblk
,装入点不会显示。这种类型否定了“为
sudo
会话运行程序私自执行”


我还发现了以下内容:

mount命令使用真实用户ID而不是有效用户ID来确定用户是否具有适当的访问权限。系统组成员可以发布设备装载,前提是他们对装载点和/etc/filesystems文件中指定的装载具有写访问权具有root用户权限的用户可以发出任何装载命令


我希望我的解释足够好,不要太混乱,我也希望你们能帮助我抓住这个问题


更新(2013-10-28) 我尝试在web上下文之外使用CLI工具进行测试,这是一个简单的PHP文件,我使用
root
和一个自定义用户执行该文件

在这两种情况下,装载和卸载都是成功的。所以,这一定是Apache执行命令的原因,不过,我不明白为什么其他命令可以工作

问题: 是什么导致了这个问题,我该如何克服它呢?

简而言之,就是这个问题

是Apache相应的
systemd
服务发出了指令。显然,该指令使用新的文件系统名称空间执行该进程


这个问题,在试图调试和修复这个问题时,在互联网上引发了许多其他帖子

  • 每一个都来自于我在这个过程中学到的东西

    我从获取有关
    mount
    使用
    EUID
    的更深入信息开始。很快,我发现我的简单的
    sudo
    cal
    <?php
    ...
    exec("sudo mount /dev/sda1 /mnt/drive", $output, $ret);
    ...
    ?>
    
    exec("ls /mnt/drive", $o, $r);
    foreach ($o as $line){
      echo $line.'<BR>';
    }
    
    PrivateTmp=false
    
    /lib/systemd/system/apache2.service
    
     system('ischroot;echo $?');