AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[exec](server)

Martin Hope
Tom Tucker
Asked: 2021-02-16 14:40:11 +0800 CST

如何允许 PHP exec 重新加载 NGINX

  • 0

如何在 PHP 中允许这些命令:

$output = exec('sudo nginx -t 2>&1');
$output2 = exec('sudo /usr/sbin/service nginx reload 2>&1');

我已经查看了终端,但当我只需要上述两个时sudo visudo,似乎可以访问所有sudo 命令。

我想重新加载不是那么重要,因为我可以运行一个 cron 作业来做到这一点。

我正在使用 NGINX,带有 Ubuntu 20 + PHP 7

ubuntu php sudo nginx exec
  • 1 个回答
  • 859 Views
Martin Hope
mhost
Asked: 2020-08-27 10:52:48 +0800 CST

php exec 返回 127,因为 /bin/sh 在 apache chroot 中获得“权限被拒绝”

  • 0

我有一个 php 脚本,它试图使用 exec(或 shell_exec)在系统上执行二进制文件。exec 失败,返回码 127。

返回代码 127 通常表示未找到命令。所以我确保使用二进制文件的绝对路径。没变。

Apache 被配置为使用 apache 的 ChrootDir 在 chroot 中运行。

我确保将二进制文件复制到 chroot、/bin/sh 以及这两者所需的所有链接库中的正确路径中。

Apache(以及因此 php)作为 www-data 运行。我已经确认 www-data 具有对二进制文件(包括 /bin/sh)和所有父文件夹的读取和执行权限。为了确认这不是文件权限问题,我使用 /bin/sh -c 使用 sudo 运行命令:

sudo -u www-data /chrootdir/bin/sh -c /chrootdir/path/to/binary

这没有问题。

使用 strace,我得到了这个:

execve("/bin/sh", ["sh", "-c", "/path/to/binary"], 0x7ffe436b3618 /* 11 vars */) = -1 EACCES (Permission denied)

只是为了确认权限问题是针对 sh 二进制文件(以及 chrootdir 中的那个),我尝试将 /chrootdir/bin/sh 重命名为其他内容并再次执行 strace,现在它抱怨找不到文件。

所以,我现在知道问题出在通过 apache 通过 php 运行时访问 /chrootdir/bin/sh ,但不是 www-data 用户的权限。

我不确定下一步该尝试什么。

这是在 Debian 10、apache 2.4.38 和 php 7.3.11 上运行的。

我已经清除了 open_basedir,也清除了 disable_functions。

我已经确认 apache 不受 apparmor 的限制,但无论如何都禁用了它。

最后,如果我禁用 apache chroot,这确实有效。

所以我的问题是在某个地方是否有任何其他限制可能会阻止 apache 这样做?

php chroot exec
  • 1 个回答
  • 1166 Views
Martin Hope
Baron Mingus
Asked: 2020-07-13 07:41:15 +0800 CST

Systemd 服务未启动 - '执行步骤生成失败...权限被拒绝'

  • 2

我已经阅读了类似问题的其他答案(在步骤执行生成失败...权限被拒绝),但似乎没有一个适用。

在我将我的比特币节点升级到 v0.20.0 后,它不再在启动时启动,也不再使用systemctl start bitcoind.service.

Journalctl 输出:-

$ journalctl -xe
...
Jul 12 15:58:22 $HOSTNAME systemd[572]: bitcoind.service: Failed to execute command: Permission denied
Jul 12 15:58:22 $HOSTNAME systemd[572]: bitcoind.service: Failed at step EXEC spawning /usr/bin/bitcoind: Permission denied
-- Subject: Process /usr/bin/bitcoind could not be executed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- The process /usr/bin/bitcoind could not be executed and failed.

我正在使用从我的主目录软链接到/etc/systemd/system/.

可执行文件从我的主目录软链接到 /usr/local/bin,因此我在上面链接的上一个答案表明可能适用 SELinux 问题,但我不相信它已启用:(-bash: getenforce: command not found)。我正在运行 Debian 10.4,并相信它默认被禁用。

$ ls -al /usr/bin/bitcoind 
lrwxrwxrwx 1 root root 34 May  5  2019 /usr/bin/bitcoind -> /home/$MY_NAME/src/bitcoin/src/bitcoind
$ ls -al /home/$MY_NAME/src/bitcoin/src/bitcoind
-rwxr-xr-x 1 bitcoin bitcoin 175058584 Jul  7 20:40 /home/$MY_NAME/src/bitcoin/src/bitcoind

一切都设置为在“比特币”nologin 用户下运行:

$ id bitcoin
uid=999(bitcoin) gid=999(bitcoin) groups=999(bitcoin)
$ cat /etc/passwd
...
bitcoin:x:999:999::/home/bitcoin:/bin/false
...

以下是相关目录的权限:

$ ls -al /etc/bitcoin
total 12
drwx--x---  2 bitcoin bitcoin 4096 Jul 11 22:30 .
drwxr-xr-x 87 root    root    4096 Jul 12 15:58 ..
-rw-rw----  1 bitcoin bitcoin  601 Jul 11 22:30 bitcoin.conf
$ ls -al /var/lib/bitcoind
total 21896
drwx--x---  5 bitcoin bitcoin     4096 Jul  9 11:55 .
drwxr-xr-x 32 root    root        4096 Dec  5  2019 ..
...
$ ls -al /run
total 24
drwxr-xr-x 18 root        root         560 Jul 12 15:59 .
drwxr-xr-x 22 root        root        4096 Jun  2 17:46 ..
...

我很难过 - 非常感谢任何输入。

编辑 - 二进制文件路径的权限:

$ ls -al /home/$MY_NAME
total 160
drwxr-xr-x 11 XXX  XXX   4096 Jul 12 15:58 .
drwxr-xr-x  3 root root  4096 May  4  2019 ..
...
drwxr-xr-x  6 XXX  XXX   4096 Oct 25  2019 src
...
$ ls -al /home/$MY_NAME/src
total 24
drwxr-xr-x  6 XXX XXX 4096 Oct 25  2019 .
drwxr-xr-x 11 XXX XXX 4096 Jul 12 15:58 ..
drwxr-xr-x 15 XXX XXX 4096 Jul  7 20:26 bitcoin
...
$ ls -al /home/$MY_NAME/src/bitcoin
total 1976
drwxr-xr-x 15 XXX XXX    4096 Jul  7 20:26 .
drwxr-xr-x  6 XXX XXX    4096 Oct 25  2019 ..
...
drwxr-xr-x 28 XXX XXX   12288 Jul  7 21:01 src
...
$ ls -al /home/$MY_NAME/src/bitcoin/src
total 936796
drwxr-xr-x 28 XXX     XXX         12288 Jul  7 21:01 .
drwxr-xr-x 15 XXX     XXX          4096 Jul  7 20:26 ..
...
-rwxr-xr-x  1 bitcoin bitcoin 175058584 Jul  7 20:40 bitcoind
...

linux debian permissions systemd exec
  • 1 个回答
  • 11062 Views
Martin Hope
Sharcoux
Asked: 2016-12-24 07:52:47 +0800 CST

错误:无法定义 SCIHOME 环境变量

  • 1

我正在尝试通过我的服务器上的 PHP 使用 Scilab,如本文档中所述。

我正在运行 Ubuntu 16.04。我有一个 Apache 服务器正在运行。我用apt-get install scilab. 我可以成功编写 scilab 代码,例如:

scilab -nwni -nb -e "m=[1 2 3; 3 4 5];disp(m);exit"

所以现在我正在尝试从 PHP 执行它。我尝试了文档中的示例。例如:

<?php
    exec('scilab -nwni -nb -e "m=[1 2 3; 3 4 5];disp(m);exit;"', $output);
    print_r($output);
?>

但我总是得到:

Error: Impossible to define SCIHOME environment variable.
SCIHOME not defined.

我不知道我做错了什么以及如何解决它......

任何帮助将不胜感激 !

php environment-variables exec
  • 3 个回答
  • 197 Views
Martin Hope
jython.li
Asked: 2016-08-03 02:07:46 +0800 CST

使用“exec 1>ok.log”时,如何在 shell 脚本中将指定的内容输出到屏幕?

  • 0

如下,我只希望命令echo "this is to stdout"输出到我的屏幕而不是文件ok.log,我该怎么办?
我搜索了execshell命令的用法,但没有结果,请指教

[root@161 tmp]# bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.

[root@161 tmp]# cat 2.sh
#!/bin/bash
exec 1>ok.log
exec 2>error.log
#exist dir
ls /home/
#no exist dir
ls /etca/
#to stdout
echo "this is to stdout"
#other cmds
...
shell stdout exec
  • 1 个回答
  • 632 Views
Martin Hope
remudada
Asked: 2016-06-01 02:34:59 +0800 CST

如何使用 find exec 命令将错误定向到日志文件

  • 0

嗨,我有以下命令可以进行 yui 优化并作为 cron 作业运行。我想将命令的输出记录到日志文件中。

find . -type d -exec bash -c "cd '{}' && pwd && java -jar /opt/yui/yui.jar -o '.css$:.css' *.css" \; > log

此命令记录 find 的输出,但不记录 yui.jar 的输出。记录到控制台。有什么办法可以将它记录到同一个文件中?

logging bash find exec
  • 2 个回答
  • 372 Views
Martin Hope
andrew
Asked: 2012-07-14 04:53:49 +0800 CST

如何配置 SSHd 以允许单个命令,而不向用户提供完全登录访问权限?

  • 12

我正在寻找通过 SSH 调用远程命令的最佳方式。我创建用户“rpcall”,生成新证书并填写 authorized_keys。用更多的方式保护它

from="ip",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty ssh-rsa ......

现在用户 rpcall 无法登录到终端

ssh -l rpc 192.168.12.1
PTY allocation request failed on channel 0

但是可以运行任何命令

ssh -l rpc 192.168.12.1 cat /etc/passwd

有什么解决方案可以将命令执行限制在一个处理脚本中吗?例如/home/rpcall/bin/command.sh

我为此用户设置了 bash shell 并使用 .bashrc 强制运行处理脚本,但我不知道如何从 ssh 调用传递参数。

.bashrc 用户 rpcall

/home/rpcall/bin/command.sh $params1 $params2
exit

从其他机器ssh调用

ssh -l rpcall 192.168.12.1 "param1" "param2"
ssh remote exec
  • 1 个回答
  • 10432 Views
Martin Hope
Banjer
Asked: 2012-06-15 05:17:18 +0800 CST

Puppet:仅当值不相等时才执行

  • 0

我有一个脚本,实际上只需要在服务器上运行一次,即在部署时,但我认为最好让 Puppet 管理它。该脚本重新映射了几个与本地系统用户冲突的旧用户 ID。

我检查这个的方法是 gopher 用户是否具有默认 uid 13。如果是这样,那么我需要运行我的重新映射脚本。

exec { "change_uid":
   command  => "/script/to/run.sh",
   provider => 'shell',
   path => [ "/bin", "/sbin", "/usr/bin", "/usr/sbin", "/usr/local/bin", "/usr/local/sbin" ],
   onlyif   => "test `/usr/bin/id -u gopher` -eq 13; echo $?",
}

我已经尝试了上述onlyif检查的几种不同排列,但 exec 总是被代理人解雇。

当我直接在命令行上运行该命令时,它返回 0 或 1。这可能与 bash在 true 时返回 0 而在 false 时返回 1这一事实有关,但我认为更有可能是我误解了onlyif工作方式.

当 gopher 的 uid=13 时,我怎样才能让这个 exec 启动?我愿意接受其他方法来实现我在这里想要完成的事情。

更新

我放弃了回声部分。最终的工作解决方案是:

exec { "change_uid":
   command  => "/script/to/run.sh",
   path     => [ "/bin", "/sbin", "/usr/bin", "/usr/sbin", "/usr/local/bin", "/usr/local/sbin" ],
   onlyif   => "test `id -u gopher` -eq 13",
}

使用ralsh命令有助于测试,感谢@Daniel C. Sobral。我将@Daniel 标记为已接受的答案,因为这是主要问题,除了我对一些概念的误解,而且他首先回答了问题。谢谢大家。

centos puppet exec
  • 2 个回答
  • 15201 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve