Shellbox/de

Shellbox safely sandboxes unsafe command execution.
Für Informationen über die Shellbox-Initiative von Wikimedia siehe: wikitech:Shellbox.

Shellbox ist eine Bibliothek zur Befehlsausführung und auch ein Server und Client zur Fernausführung von Befehlen. It was primarily implemented to sandbox LilyPond (used by the Score extension) and provide a way for MediaWiki to utilize external binaries without needing to run them in the same container. It was designed and approved via RFC: PHP microservice for containerized shell execution. Shellbox ist mit MediaWiki 1.36 zu verwenden.

Informationen zur Verwendung von Shellbox in MediaWiki sind unter Handbuch:BoxedCommand erhältlich.

Server-Konfiguration

Es wird empfohlen, Shellbox so einzurichten, dass er als nicht privilegierter Benutzer in einem isolierten Behälter ohne externen Netzwerkzugang ausgeführt wird. Wikimedia nutzt dafür Kubernetes und hat eine Helm-Übersicht, die wiederverwendet werden kann.

Die folgenden Packete sollten in dem Behälter installiert sein: Apache2 (httpd), PHP-FPM, and whatever commands you need to shell out to (e.g. lilypond, imagemagick, etc.).

In den folgenden Beispielen verwenden wir shellbox.internal als den internen Behälternamen.

  • Holen Sie sich die Shellbox Quellen und ihre Abhängigkeiten:
cd /srv
git clone https://gerrit.wikimedia.org/r/mediawiki/libs/Shellbox shellbox
cd shellbox
composer install --no-dev
  • Erstellen Sie einen nicht privilegierten Benutzer für Shellbox:
useradd -r shellbox
  • Erstelle ein vorübergehendes Arbeitsverzeichnis für Shellbox:
 install -o shellbox -g shellbox -d /var/tmp/shellbox
  • Erstelle die Shellbox-Konfigurationsdatei mit Bezug auf das vorübergehende Arbeitsverzeichnis /srv/shellbox/config/config.json:
 {
 	"url": "http://shellbox.internal/shellbox",
 	"tempDir": "/var/tmp/shellbox"
 }
  • Generiere einen geheimen Schlüssel; es wird dringend empfohlen, eine Minimalstärke von 128 Bit zu verwenden, also verwenden wir hier 16 zufällige Bytes, die in eine hexadezimalformatierte Zeichenfolge formatiert sind:
php -r 'print bin2hex(fread(fopen("/dev/urandom","r"),16))."\n";'
  • Erstelle die Apache-Konfiguration /etc/apache2/sites-available/shellbox.internal.conf, und fügen Sie den geheimen Schlüssel darin ein:
<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>
  • Protect the Apache configuration file against unprivileged reads of the secret key and unprivileged modifications, by any other system user or group than those configured to run Apache itself on the server:
chown root:root /etc/apache2/sites-available/shellbox.internal.conf
chmod 600 /etc/apache2/sites-available/shellbox.internal.conf
  • Create the PHP-FPM pool configuration. When configured in this way, Shellbox does not have permission to connect to the PHP-FPM socket:
[shellbox]
user = shellbox
group = shellbox
listen = /run/php/shellbox.sock
listen.owner = www-data
listen.group = www-data
pm = static
pm.max_children = 1

MediaWiki-Konfiguration

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

Vorgefertigte Behälter

Wikimedia hat vorgefertigte Behälter, die Shellbox, dessen Ahängigkeiten und PHP-FPM enthalten:

Diese Bilder haben derzeit keine Stabilitätsgarantie/Version (Hilfe bei der Feststellung erwünscht).

Routen

Shellbox zeigt eine /healthz-Route für manuelle und automatisierte Gesundheitsprüfungen. It also has a PHP-RPC interface for executing sandboxed PHP code.

Anmerkungen

Shellbox unterstützt keine plattformübergreifenden Anfragen, so ist es notwendig, Shellbox auch auf Windows zu laufen, wenn Sie MediaWiki auf Windows ausführen.

Category:PHP libraries/de