Eigene User für Webapps

ServerSide

New Member
Hallo.

Ich bin gerade dabei etwas an meinem Server zu experimentieren und dabei kam folgende Fragen auf:

Macht Ihr für Eure Webapps eigene User? Ich bin meistens mit meinem ganz normalen User Account eingeloggt. Da dieser auch sudo Rechte hat ist es wohl besser für meine Python Webapp einen eigenen User zu erstellen.

Wie handhabt Ihr das normalerweise? Eigene Gruppe? Eigener User?
 
Ich starte meine WebApps mit einem eigenen User.

Da du Python erwähnst, benötigst du auch einen CGI Wrapper.
Ich verwende meistens den uwsgi.
Der Klassische Aufbau mit dem Nginx:

Besucher <-> Nginx <-> uwsgi <-> myapp:main

Die WebApp läuft mit ihrem eigenen User und die Instanzen werden durch uwsgi mit dem User gestartet, den du eingestellt hast.

Im Netz gibt es gute Beschreibungen wie man eine Flask-App oder Django-App mit Nginx + uwsgi einrichtet.
 
Pro Website (oder sogar Anwendung) ein eigener Benutzer und Gruppe ist absolut empfehlenswert. Die Zeiten von mod_php o.ä. will man nicht mehr freiwillig haben, wenn (Fast)CGI fast überall das Mittel der Wahl ist :)


MfG Christian
 
Ich mache es so ähnlich:

Besucher <-> nginx <-> gunicorn <-> myapp.wsgi

Gunicorn aus dem PyPI und als systemd service.

Und bisher habe ich auch immer einen extra User und eine extra Gruppe erstellt. Wobei wobei es auch einfach reicht alle "webapp" user in einer "webapp" Gruppe zu gruppieren. Kennt jemand von Euch eine Situation in der dies nachteilig wäre?

Ganz früher habe ich "useradd --system und groupadd --system" verwendet. Dies scheint aber gar keine Auswirkungen zu haben ausser dass die UIDs niedriger sind und dass kein Home-Verzeichnis erstellt wird.
 
Wenn man solche Optionsschalter nutzt, sollte man auch mal nachlesen, was diese überhaupt machen:

Code:
       -r, --system
           Create a system account.

           System users will be created with no aging information in /etc/shadow, and their numeric identifiers are chosen in the SYS_UID_MIN-SYS_UID_MAX range, defined
           in /etc/login.defs, instead of UID_MIN-UID_MAX (and their GID counterparts for the creation of groups).

           Note that useradd will not create a home directory for such an user, regardless of the default setting in /etc/login.defs (CREATE_HOME). You have to specify
           the -m options if you want a home directory for a system account to be created.

Die UID liegt dann von SYS_UID_MIN bis SYS_UID_MAX, was in /etc/login.defs definiert ist.
Bei mir ist es auskommentiert:
Code:
#SYS_UID_MIN		  100
#SYS_UID_MAX		  999
#SYS_GID_MIN		  100
#SYS_GID_MAX		  999

Auf jeden Fall liegt es unter 1000. Das gleiche wird für groupadd gelten.

Das kein Home-Verzeichnis erstellt worden ist, liegt daran, dass du den Optionsschalter -m nicht verwendet hast.

Code:
       -m, --create-home
           Create the user's home directory if it does not exist. The files and directories contained in the skeleton directory (which can be defined with the -k
           option) will be copied to the home directory.

Interessant finde ich noch den Parameter k. So ließe sich ein Verzeichnis festlegen, dass z.B. schon die virtuelle Umgebung für Python x.x beinhaltet.

Bei Debian ist es normal, dass jeder angelegte User eine gleichnamige Gruppe zugewiesen bekommt.
Steht auch in der login.defs:
Code:
# 
# Enable setting of the umask group bits to be the same as owner bits
# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
# the same as gid, and username is the same as the primary group name.
#
# If set to yes, userdel will remove the user  s group if it contains no
# more members, and useradd will create by default a group with the name
# of the user.
#        
USERGROUPS_ENAB yes
 
Ja genau das sagte ich doch oben. Niedrigere UIDs (keine Auswirkung ausser "Kosmetik"). Und dass kein home Verzeichnis erstellt wird ist auch gewünscht, da ich all meine webapps in einem anderen/extra Ordner habe.

Mit der --skel Option habe ich auch schon experimentiert. Man kann damit "leere" Virtualenvs automatisch hinzufügen lassen. Bei meinen 2-3 Usern ist es noch egal, aber wenn man sowas in höherer Anzahl braucht...sehr praktisch.

Im Moment benutze ich --skel nur für meine .profile Datei. Dann hab ich meine am häufigst-benutzten Aliase bei allen Usern griffbereit
 
Ich hab nur ausgeführt wieso die UIDs/GIDs so niedrig waren. Alles unter 1000 ist halt für das System reserviert.
 
Back
Top