/var/tmp 폴더의 내용을 나열하거나 PHP에서 실행된 Bash 스크립트에서 파일을 생성할 수 없습니다.

/var/tmp 폴더의 내용을 나열하거나 PHP에서 실행된 Bash 스크립트에서 파일을 생성할 수 없습니다.

여기에도 이 질문을 올렸어요

목표: /var/tmp 폴더의 CUPS 서버에서 생성된 스풀 데이터를 삭제할 수 있는 개인 Linux 시스템(인터넷에 연결되지 않은 로컬 시스템)에서 웹후크를 트리거하고 싶습니다.

이를 달성하기 위해서는

방법 1먼저 기본 CUPS 구성 파일을 확인하고 거기에서 파일을 편집했습니다. /etc/cups/cupsd.conf와 같은 라인

PreserveJobFiles No

그리고 /etc/cups/cups-files.conf

RequestRoot /var/tmp

PreserveJob을 no로 변경하면 인쇄가 완료된 후 컵 스풀 파일이 자동으로 삭제될 것 같습니다.

그런데 1번 방법이 안 되서 2번 방법을 시도해 봤습니다.

방법 2:Apache와 PHP가 설치된 Ubuntu 22.04 시스템이 있습니다. 새 가상 호스트 "example.io"를 설정하고 DocumentRoot를 /var/www/example.io/로 설정했습니다.

이 디렉토리에는 웹 브라우저에 콘텐츠를 성공적으로 제공하는 index.php 파일이 있습니다.

이 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 스크립트가 실행 중이며 웹 브라우저에서 echo 문의 출력을 볼 수 있습니다. 그러나 /var/tmp 폴더의 내용을 나열하거나 해당 폴더에 파일을 생성할 수 없습니다.

다음은 시도했지만 문제가 해결되지 않은 변경 사항입니다.

  1. bash 스크립트에서 ls & touch를 사용하여 상대 및 절대 경로를 시도했습니다.

  2. sudoers 파일의 "%sudo" 줄 아래에 "www-data" 사용자를 추가했습니다.

www-data ALL=(ALL) NOPASSWD: /home/example/script.sh                                                        
www-data ALL=(ALL) NOPASSWD: /var/tmp
  1. "www-data" 사용자가 소유하도록 bash 스크립트의 권한을 변경했습니다.
drwxrwxrwx  5 www-data www-data    6 Jun  6 08:39 script.sh
  1. "www-data" 사용자가 액세스할 수 있도록 /var/tmp 폴더의 권한을 변경했습니다.
drwxrwxrwt  5 www-data www-data    6 Jun  6 08:39 tmp
  1. /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 폴더에서 이 문제가 발생하는 이유를 이해하는 데 어려움을 겪고 있습니다. 어떤 통찰력이나 제안이라도 대단히 감사하겠습니다.

관련 정보