gpt4 book ai didi

linux - 用于 cat 用户拥有的文件的 Cgi-bin 脚本

转载 作者:太空狗 更新时间:2023-10-29 11:37:51 24 4
gpt4 key购买 nike

我正在使用 Ubuntu 服务器,我有一个 cgi-bin 脚本执行以下操作。 . .

#!/bin/bash
echo Content-type: text/plain
echo ""
cat /home/user/.program/logs/file.log | tail -400 | col -b > /tmp/o.txt
cat /tmp/o.txt

现在,如果我运行这个脚本,我是“su”,脚本会填充 o.txt,然后 host.com/cgi-bin/script 运行,但只显示我上次从 CLI 运行它的那一点

我的 Apache 错误日志显示“权限被拒绝”错误。所以我知道用户 apache 正在以某种方式无法运行此文件。我尝试使用 chown 无济于事。由于此文件位于用户目录中,复制它或符号链接(symbolic link)它的最佳方法是什么?

我什至考虑过在 crontab 中以 root 用户身份运行该脚本来“更新”/tmp/中的文件,但这对我不起作用。有 cgi-bin 经验的人会如何处理对用户目录中文件的访问?

最佳答案

Apache 用户 www-data 没有对另一个用户拥有的临时文件的写入权限。

但在这种特殊情况下,不需要临时文件。

tail -n 400 logfile | col -b

但是,如果 Apache 在受限的 chroot 中运行,它也无法访问 /home

日志文件需要是 chmod o+r 并且指向它的所有目录都应该是 chmod o+x。确保您了解其中的含义!如果用户有理由想要阻止对中间目录的访问,那么对文件本身具有读取权限是不够的。 (使某些东西具有 www-data 作为其组所有者在理论上是可能的,但不切实际且毫无意义,因为找到 CGI 脚本的任何人无论如何都可以访问该文件。)

更一般地说,如果您确实需要一个临时文件,简单的解决方法(甚至不是解决方法)是生成一个唯一的临时文件名,然后将其删除。

temp=$(mktemp -t cgi.XXXXXXXX) || exit $?
trap 'rm -f "$temp"' 0
trap 'exit 127' 1 2 15

tail -n 400 logfile | col -b >"$temp"

第一个 trap 确保文件在脚本终止时被删除。如果脚本被中断或终止,第二个确保第一个 trap 运行。

关于linux - 用于 cat 用户拥有的文件的 Cgi-bin 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22387265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com