Jump to content
MediaWiki

Shellbox

From mediawiki.org
This page is a translated version of the page Shellbox and the translation is 100% complete.
Shellbox bezpečně uzavře nebezpečné provádění příkazů.
Pro informace o nasazení Shellboxu Wikimedie se podívejte na stránku: wikitech:Shellbox.

Shellbox je knihovna pro provádění příkazů a také server a klient pro vzdálené provádění příkazů. Primárně byl implementován do sandboxu LilyPond (používaný Score extension) a poskytuje způsob, jak MediaWiki může využívat externí binární soubory, aniž by je bylo nutné spouštět ve stejném kontejneru. Byl navržen a schválen prostřednictvím RFC:Mikroslužby PHP pro spouštění kontejnerového prostředí. Shellbox je použitelný od MediaWiki 1.36 .

Informace o používání Shellboxu v MediaWiki jsou k dispozici na Příručka:BoxedCommand .

Nastavení serveru

[edit ]

Doporučuje se nastavit Shellbox tak, aby běžel jako neprivilegovaný uživatel v izolovaném kontejneru bez přístupu k externí síti. Wikimedie pro tento účel používá Kubernetes a má Helm graf, který může být znovu použitelný.

Do kontejneru by měly být nainstalovány následující balíčky: Apache2 (httpd), PHP-FPM a jakékoli příkazy, které potřebujete (např. lilypond, imagemagick atd.).

V následujících příkladech používáme shellbox.internal jako interní název hostitele kontejneru.

  • Získání zdroj Shellbox a jeho závislosti:
cd/srv
gitclonehttps://gerrit.wikimedia.org/r/mediawiki/libs/Shellboxshellbox
cdshellbox
composerinstall--no-dev
  • Vytvoření neprivilegovaného uživatele pro Shellbox:
useradd-rshellbox
  • Vytvoření dočasný pracovní adresář pro Shellbox:
install-oshellbox-gshellbox-d/var/tmp/shellbox
  • Vytvoření konfigurační soubor Shellbox odkazující na dočasný pracovní adresář /srv/shellbox/config/config.json:
{
"url":"http://shellbox.internal/shellbox",
"tempDir":"/var/tmp/shellbox"
}
  • Vygenerování tajného klíče. Důrazně se doporučuje používat 128bitovou minimální sílu, takže zde používáme 16 náhodných bajtů formátovaných do hexadecimálního řetězce:
php-r'print bin2hex(fread(fopen("/dev/urandom","r"),16))."\n";'
  • Vytvoření konfiguraci Apache /etc/apache2/sites-available/shellbox.internal.conf a vložte tajný klíč dovnitř:
<VirtualHost*:80>
ServerNameshellbox.internal
DocumentRoot/srv/shellbox/public_html
Alias/shellbox/srv/shellbox/shellbox.php
SetEnvSHELLBOX_SECRET_KEY"...YOUR SECRET KEY HERE..."
<Directory/srv/shellbox/public_html>
Orderdeny,allow
SatisfyAny
</Directory>
<FilesMatch".+\.php$">
SetHandler"proxy:unix:/run/php/shellbox.sock|fcgi://localhost"
</FilesMatch>
RewriteEngineOn
RewriteCond%{HTTP:Authorization}^(.*)
RewriteRule.*-[e=HTTP_AUTHORIZATION:%1]
</VirtualHost>
  • Chránění konfiguračního souboru Apache před neoprávněným čtením tajného klíče a neoprávněnými úpravami jakýmkoli jiným uživatelem systému nebo skupinou než těmi, kteří jsou nakonfigurováni ke spuštění samotného Apache na serveru:
chownroot:root/etc/apache2/sites-available/shellbox.internal.conf
chmod600/etc/apache2/sites-available/shellbox.internal.conf
  • Vytvoření konfigurace fondu PHP-FPM. Když je Shellbox nakonfigurován tímto způsobem, nemá oprávnění k připojení k socketu PHP-FPM:
[shellbox]
user=shellbox
group=shellbox
listen=/run/php/shellbox.sock
listen.owner=www-data
listen.group=www-data
pm=static
pm.max_children=1

Konfigurace MediaWiki

[edit ]
$wgShellboxUrls = [
	'default' => 'http://shellbox.internal/shellbox'
];
$wgShellboxSecretKey = '... your secret key ...';

Předpřipravené kontejnery

[edit ]

Wikimedie má předpřipravené kontejnery, které obsahují Shellbox, jeho závislosti a PHP-FPM:

Tyto obrázky v současné době nemají žádnou záruku stability/verzování (potřebujeme pomoc, jak to zjistit).

Trasy

[edit ]

Shellbox odhaluje cestu /healthz pro manuální a automatické kontroly stavu. Má také rozhraní PHP-RPC pro spouštění kódu PHP v sandboxu.

Poznámky

[edit ]

Shellbox nepodporuje multiplatformní požadavky, takže pokud spustíte MediaWiki na Windows, je nutné spustit Shellbox i na Windows.

Externí odkazy

[edit ]

AltStyle によって変換されたページ (->オリジナル) /