ubuntuusers.de

Text-Datei ausgeben mit PHP

Status: Ungelöst | Ubuntu-Version: Server 22.04 (Jammy Jellyfish)
Antworten |

jochenv

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

Hallo zusammen

hat jemand eine Idee warum die text1.txt nicht ausgegeben wird ?

1
2
3
4
5
6
7
8
9
<?php
echo "Vom Server 08<br>";
echo "=============<br>";
echo shell_exec('whoami');
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
$output = shell_exec('cat /home/jochen/text1.txt');
echo "<pre>$output</pre>";
?>

die Datei

:~$ ll /home/jochen/text1.txt 
-rw-rw-rw- 1 jochen jochen 849 Sep 12 22:47 /home/jochen/text1.txt

Gruß Jochen

DJKUhpisse Team-Icon

Supporter, Wikiteam
Avatar von DJKUhpisse

Anmeldungsdatum:
18. Oktober 2016

Beiträge: 18222

Wohnort: in deinem Browser, hier auf dem Bildschirm

Gibt es denn Logs? Darf der Webserver-User die auch lesen (eine Fehlermeldung landet in stderr, keine Ahnung ob das hier auch in $output geht). Ggf. mal noch 2>&1 anhängen an den Befehl.

jochenv

(Themenstarter)

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

DJKUhpisse schrieb:

Gibt es denn Logs? Darf der Webserver-User die auch lesen (eine Fehlermeldung landet in stderr, keine Ahnung ob das hier auch in $output geht). Ggf. mal noch 2>&1 anhängen an den Befehl.

Hallo, denke mal hier liegt das Problem ....

:~$ cat /var/log/apache2/error.log
[Thu Sep 15 00:00:04.091139 2022] [mpm_prefork:notice] [pid 8765] AH00163: Apache/2.4.52 (Ubuntu) configured -- resuming normal operations
[Thu Sep 15 00:00:04.091162 2022] [core:notice] [pid 8765] AH00094: Command line: '/usr/sbin/apache2'
cat: /home/jochen/text1.txt: Permission denied
cat: /home/jochen/text1.txt: Permission denied

aber Datei text1.txt ist doch offen Lesen+Schreiben für alle ... ?

Gruß Jochen

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

jochenv schrieb:

aber Datei text1.txt ist doch offen Lesen+Schreiben für alle ... ?

Auch das uebergeordnete Verzeichnis?

jochenv

(Themenstarter)

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

sebix schrieb:

jochenv schrieb:

aber Datei text1.txt ist doch offen Lesen+Schreiben für alle ... ?

Auch das uebergeordnete Verzeichnis?

welches Verzeichnis meinst du ?

Gruß Jochen

jochenv

(Themenstarter)

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

Hallo

ich habe mal unter /tmp ein Verzeichnis test angelegt und Recht für alle vergeben..

:/tmp/test$ ll
total 16
drwxrwxrwx  2 jochen   jochen   4096 Sep 16 02:03 ./
drwxrwxrwt 14 root     root     4096 Sep 16 02:09 ../
-rwxrwxrwx  1 jochen   jochen    849 Sep 16 01:03 text1.txt*
-rwxrwxr-x  1 www-data www-data  849 Sep 16 02:03 text2.txt*

und die php habe ich erweitert.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
?php
echo "Vom Server 08<br>";
echo "=============<br>";
echo shell_exec('whoami');
$output = shell_exec('ls -la');
echo "<pre>$output</pre>";
$output = shell_exec('cat /home/jochen/text1.txt');
echo "===tmp==========<br>";
echo "<pre>$output</pre>";
$output = shell_exec('ls -la /tmp/test/');
echo "<pre>$output</pre>";
$output = shell_exec('cat /tmp/test/text2.txt');
echo "<pre>$output</pre>";
?>

Apache Log gelöscht , Apache restart und eine die php am Laptop aufgerufen.

$ cat /var/log/apache2/error.log
[Fri Sep 16 02:26:29.092797 2022] [mpm_prefork:notice] [pid 65233] AH00163: Apache/2.4.52 (Ubuntu) configured -- resuming normal operations
[Fri Sep 16 02:26:29.092893 2022] [core:notice] [pid 65233] AH00094: Command line: '/usr/sbin/apache2'
cat: /home/jochen/text1.txt: Permission denied
ls: cannot access '/tmp/test/': No such file or directory
cat: /tmp/test/text2.txt: No such file or directory

gruß Jochen

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Zeig bitte mal systemctl cat apache2 und falls du PHP-FPM oder FCGI nutzt, auch dessen systemd unit file

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11261

Wohnort: München

Die apache2.service setzt PrivateTmp=true, also wird man mit der keine Dateien im normalen /tmp/ nutzen können.

Dann gibt es einen entscheidenden Hinweis in /usr/share/doc/apache2/NEWS.Debian.gz für die Version apache2 (2.4.1-1) unstable:

We did change the security model for Apache in our default configuration. We do not allow access to the file system outside /var/www and /usr/share. If you are running virtual hosts or scripts outside these directories, you need to whitelist them in your configuration to grant access through HTTP. Special care must be taken if you are using a sub-directory in /srv to serve your content as recommended by the File Hierarchy Standard (FHS). You must allow access to your served directory explicity in the corresponding virtual host, or by allowing access in apache2.conf as proposed.

Along the security model, we did also change the default Document Root, files are served from. Previous releases served /var/www by default when no other virtual host matched the request. Starting with this release, we changed the default document root to /var/www/html, so that sensitive files from other virtual hosts wich are typically put into some directory below /var/www are not exposed by the default virtual host. This change further improves the out of box security.

Darüber hinaus gibt es AppArmor-Profile für diverse Anwendungen, so dass ich da im Zweifelsfall mal nachsehen würde, auf welche Verzeichnisse Apache2 durch diese Einschränkungen zugreifen darf.

jochenv

(Themenstarter)

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

sebix schrieb:

Zeig bitte mal systemctl cat apache2 und falls du PHP-FPM oder FCGI nutzt, auch dessen systemd unit file

systemctl cat apache2

:~$ systemctl cat apache2
# /lib/systemd/system/apache2.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://httpd.apache.org/docs/2.4/

[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl graceful-stop
ExecReload=/usr/sbin/apachectl graceful
KillMode=mixed
PrivateTmp=true
Restart=on-abort

[Install]
WantedBy=multi-user.target

die anderen beiden

:~$ systemctl cat PHP-FPM
No files found for PHP-FPM.service.

:~$ systemctl cat FCGI
No files found for FCGI.service.

jochenv

(Themenstarter)

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

seahawk1986 schrieb:

Die apache2.service setzt PrivateTmp=true, also wird man mit der keine Dateien im normalen /tmp/ nutzen können.

Dann gibt es einen entscheidenden Hinweis in /usr/share/doc/apache2/NEWS.Debian.gz für die Version apache2 (2.4.1-1) unstable:

We do not allow access to the file system outside /var/www and /usr/share.

Danke, sehr guter Hinweis. Bekomme ich diese Text-Datei irgendwie, bei Aufruf der PHP von ~/text1.txt nach /var/www/kopiert ?

Gruß Jochen

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11261

Wohnort: München

Was genau ist denn das Ziel der ganzen Aktion? Der Grund dafür, dass Apache2 standardmäßig nicht auf beliebige Verzeichnisse zugreifen darf ist ja, dass Angreifer, die Fehler in der Konfguration bzw. Skripten ausnutzen, nicht auf beliebige Dateien auf dem Rechner zugreifen können sollen.

Eine einfache Lösung, wenn das Home-Verzeichnis und /var/www auf dem selben Dateisystem liegen und nur der Inhalt der Datei verändert wird (aber die Datei nicht gelöscht wird), wäre einen Hardlink: ln (Abschnitt „Beispiele-fuer-Hardlinks“)

Antworten |