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

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
git clone https://gerrit.wikimedia.org/r/mediawiki/libs/Shellbox shellbox
cd shellbox
composer install --no-dev
  • Vytvoření neprivilegovaného uživatele pro Shellbox:
useradd -r shellbox
  • Vytvoření dočasný pracovní adresář pro Shellbox:
 install -o shellbox -g shellbox -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>
	ServerName shellbox.internal
	DocumentRoot /srv/shellbox/public_html
	Alias /shellbox /srv/shellbox/shellbox.php
	SetEnv SHELLBOX_SECRET_KEY "...YOUR SECRET KEY HERE..."
	<Directory /srv/shellbox/public_html>
		Order deny,allow
		Satisfy Any
	</Directory>
	<FilesMatch ".+\.php$">
		SetHandler "proxy:unix:/run/php/shellbox.sock|fcgi://localhost"
	</FilesMatch>

	RewriteEngine On
	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:
chown root:root /etc/apache2/sites-available/shellbox.internal.conf
chmod 600 /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

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

Předpřipravené kontejnery

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

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

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

Externí odkazy