目标:我想在私有 linux 机器(它是未连接到互联网的本地系统)上触发 webhook,它可以删除 /var/tmp 文件夹中 CUPS 服务器生成的假脱机数据。
为了达成这个
方法1我首先检查了默认的 CUPS 配置文件并在那里编辑了文件。像 /etc/cups/cupsd.conf 中的行
PreserveJobFiles No
和 /etc/cups/cups-files.conf 中
RequestRoot /var/tmp
我认为将 PreserveJob 更改为 no 会在打印完成后自动删除 cups spool 文件。
好吧,方法 1 不起作用,所以我尝试了方法 2
方法2:我有一台安装了 Apache 和 PHP 的 Ubuntu 22.04 机器。我设置了一个新的虚拟主机“example.io”,并将 DocumentRoot 设置为 /var/www/example.io/
在此目录中,我有一个 index.php 文件,它成功地向 Web 浏览器提供内容。
从这个 index.php 文件中,我调用位于我的主目录中的 bash 脚本。 bash 脚本包含以下命令:
#!/bin/bash
echo "Hello, I am above the ls command"
ls /var/tmp/
echo "Hello, I am below the ls command"
touch example.txt
rm -rf /var/tmp/cn*
echo "I am below the touch command"
bash 脚本正在执行,我可以在 Web 浏览器上看到 echo 语句的输出。但是,我无法列出 /var/tmp 文件夹的内容或在其中创建文件。
以下是我尝试过的更改,但没有解决问题:
我尝试在 bash 脚本中使用 ls & touch 的相对路径和绝对路径。
我将“www-data”用户添加到“%sudo”行下的 sudoers 文件中。
www-data ALL=(ALL) NOPASSWD: /home/example/script.sh
www-data ALL=(ALL) NOPASSWD: /var/tmp
- 我将 bash 脚本的权限更改为“www-data”用户拥有。
drwxrwxrwx 5 www-data www-data 6 Jun 6 08:39 script.sh
- 我将 /var/tmp 文件夹的权限更改为“www-data”用户可以访问。
drwxrwxrwt 5 www-data www-data 6 Jun 6 08:39 tmp
- 我从 /var/tmp 文件夹中删除了粘滞位,并将其权限设置为 777。
drwxrwxrwx 5 www-data www-data 6 Jun 6 08:39 tmp
我授予了 bash 脚本及其父目录的完全权限。
当我从命令行检查时,我可以使用 www-data 用户在 /var/tmp 中列出和创建文件,例如
root@cups-lxc-at-ct:~/instantpost# sudo -u www-data touch /var/tmp/cnijb
root@cups-lxc-at-ct:~/instantpost# sudo -u www-data ls /var/tmp
cnijb
systemd-private-329d46999f134f4a9470ce054ae837e9-apache2.service-iHoe2E
systemd-private-329d46999f134f4a9470ce054ae837e9-systemd-logind.service-lGcUhs
systemd-private-329d46999f134f4a9470ce054ae837e9-systemd-resolved.service-Rqvc7r
/var/tmp 上的 ACL 是
root@cups-lxc-at-ct:~/instantpost# getfacl /var/tmp
getfacl: Removing leading '/' from absolute path names
# file: var/tmp
# owner: root
# group: root
# flags: --t
user::rwx
group::rwx
other::rwx
我检查了AppArmor:
sudo apparmor_status
我得到这个输出
root@cups-machine:~# sudo apparmor_status
apparmor module is loaded.
11 profiles are loaded.
11 profiles are in enforce mode.
/usr/bin/man
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/connman/scripts/dhclient-script
/{,usr/}sbin/dhclient
lsb_release
man_filter
man_groff
nvidia_modprobe
nvidia_modprobe//kmod
tcpdump
0 profiles are in complain mode.
0 profiles are in kill mode.
0 profiles are in unconfined mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
0 processes are in mixed mode.
0 processes are in kill mode.
=> 有趣的是,我用不同的文件夹测试了相同的方法,例如:/usr、/usr/example、/tmp/example、/home/example 等...,并且它成功运行。
我很难理解为什么我会在默认的 /var/tmp 文件夹中遇到这个问题。任何见解或建议将不胜感激。