GNU/Linux >> Znalost Linux >  >> Linux

Apache CGI v uživatelském adresáři Konec výstupu skriptu před hlavičkami

Nakonec jsem to vyřešil. Děkuji @JimB, protože ve svém komentáři upozornil na SUEXEC, o kterém jsem nevěděl (nebo jsem ho doteď prostě ignoroval).

Po přečtení dokumentace suEXEC jsem pochopil, že problém tam musí být. Tak jsem se podíval na konfiguraci:

# suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=1000
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_SYSLOG
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=1000
 -D AP_USERDIR_SUFFIX="public_html"

a vše vypadalo v pořádku (dobré uid/gid pro mého uživatele, userdir_suffix je v pořádku atd.). Tak jsem se podíval na systémové protokoly:

# journalctl -b | grep "suexec"
May 22 11:43:12 caladan suexec[5397]: uid: (1000/user) gid: (1000/user) cmd: test.cgi
May 22 11:43:12 caladan suexec[5397]: directory is writable by others: (/home/user/public_html/cgi-bin)

a to je problém:můj cgi-bin do adresáře mohli zapisovat ostatní .

Opravil jsem jednoduchou změnou oprávnění na 755 .


To se někdy objeví, když se pokusíte volat jiné metody modulu Python z vašeho cgi, kde jste možná nechali nějaké příkazy 'print' (možná pro ladění). Naskenujte tedy svůj kód, abyste našli jakýkoli příkaz „vytisknout“, někdy to problém snadno vyřeší.


Pro mě to fungovalo, když jsem změnil řádek shebang (#!/usr/bin/sh ) až #!/usr/bin/env sh . Zjistil jsem, že všechny linie shebang z What is the prefered Bash shebang? zdálo se, že to funguje (avšak všimněte si, že sh se liší od bash takže pokud chcete použít sh držte se toho).

Takže tento kód fungoval pro mě:

#!/usr/bin/env sh
echo "Content-type: text/plain"
echo ""
echo "Hello"

Také podle výše uvedeného příspěvku to vypadá na /usr/bin/env sh se zdá být preferován před /bin/sh . Nemám ponětí o věcech podle adresáře.


Linux
  1. Spustit skript s argumenty jako uživatel?

  2. Odkud se spouští skript Shell?

  3. Adresář Cgi bin pro každého uživatele v Apache

  1. Nainstalujte WordPress na Linux pomocí Apache

  2. Nastavení umask uživatele Apache

  3. Aktuální adresář skriptu Shell?

  1. Panic Password na Linuxu

  2. Spuštění Apache jako jiný uživatel

  3. Co je výstupem pwd?