umask für Apacheuser (oder Alternativen)

Apache, Lighttpd, nginx, Cherokee
dante
Posts: 128
Joined: 2010-04-20 12:50

umask für Apacheuser (oder Alternativen)

Post by dante » 2011-12-07 09:18

Hi zusammen,

für ein paar (nicht-root) Kollegen habe ich einen User auf unserem Webserver angelegt, der auf einer scponly Shell eingeloggt wird und diesem drei Verzeichnisse unterhalb des DocRoots in sein Homedir eingebunden.

Die entsprechenden Verzeichnisse haben default 0755 Rechte mit www-data (Apache2 unter Ubuntu 10.04) als Besitzer und Gruppe.

Es gibt eine Gruppe "grpkollegen", in der die entsprechenden scponly User Mitglied sind.

Ein chgrp grpkollegen und chmod +s bringt mir zumindest, dass alle neu erstellten Verzeichnisse direkt als Gruppe "grpkollegen" haben.

Jedoch bräuchte ich 0775 Rechte, damit man diese auch beschreiben darf.

In einigen Mailinglisten standen Lösungen wie "umask einfach ins Apache Init-Skript". Ich habs probiert, aber dadurch, dass der Parent Apache Prozess als root gestartet wird und eben nicht als www-data, bringt mir das auch kein Erfolg.

Ich bräuchte daher mal einen kurzen Gedankenanschubs von euch :wink:

ddm3ve
Moderator
Moderator
Posts: 1187
Joined: 2011-07-04 10:56

Re: umask für Apacheuser (oder Alternativen)

Post by ddm3ve » 2011-12-07 15:53

Erklär mal ganz kurz wer wohin und als "wer" schreiben soll.

Sofern es sich um Perl oder PHP Scripte handelt würde ich hier auf fastcgi ggf. suexec und nicht mod_php / mod_perl setzen.
02:32:12 21.12.2012 und dann sind Deine Probleme alle unwichtig.

dante
Posts: 128
Joined: 2010-04-20 12:50

Re: umask für Apacheuser (oder Alternativen)

Post by dante » 2011-12-07 16:03

Es geht um Verzeichnisse unter /var/www, d.h. Owner ist www-data und dank GUID Bit ist "grpkollegen" immer als Gruppe gesetzt.

Via WinSCP soll sich nun User "meier", "müller", "schulze" auf das System verbinden können. Alle landen auf einer scponly-Shell und sind Mitglied von "grpkollegen". Alle müssen unterhalb von /var/www Verzeichnisse anlegen können, was per se geht, diese Verzeichnisse haben aber durch die default umask 022 nur Schreibrechte für den Owner, also www-data. Ergo können die armen Schweine in ihre eigens angelegten Verzeichnisse keine Daten einfügen.

suexec ist angedacht, muss allerdings erst auf der Staging-Umgebung getestet werden (da mir schlicht das Know-How fehlt). Zeitlich habe ich mir das für Mitte 2012 vorgenommen, daher leider noch keine Alternative.

ddm3ve
Moderator
Moderator
Posts: 1187
Joined: 2011-07-04 10:56

Re: umask für Apacheuser (oder Alternativen)

Post by ddm3ve » 2011-12-07 17:27

Das mit der Umask bzw. dm anpassen der Rechte sollte sich als default im winscp Client einstellen lassen.

Ein interessanter Artikel zum Thema umask:

http://serverfault.com/questions/228396 ... onnections

I've been searching for a way to setup OpenSSH's umask to 0027 in a consistent way across all connection types.

By connection types I'm referring to:

sftp
scp
ssh hostname
ssh hostname program

The difference between 3. and 4. is that the former starts a shell which usually reads the /etc/profile information while the latter doesn't.

In addition by reading this post I've became aware of the -u option that is present in newer versions of OpenSSH. However this doesn't work.

I must also add that /etc/profile now includes umask 0027.

Going point by point:

sftp - Setting -u 0027 in sshd_config as mentioned here, is not enough.

If I don't set this parameter, sftp uses by default umask 0022. This means that if I have the two files:

-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write

When I use sftp to put them in the destination machine I actually get:

-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write

However when I set -u 0027 on sshd_config of the destination machine I actually get:

-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write

which is not expected, since it should actually be:

-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write

Anyone understands why this happens?

scp - Independently of what is setup for sftp, permissions are always umask 0022. I currently have no idea how to alter this.

ssh hostname - no problem here since the shell reads /etc/profile by default which means umask 0027 in the current setup.

ssh hostname program - same situation as scp.

In sum, setting umask on sftp alters the result but not as it should, ssh hostname works as expected reading /etc/profile and both scp and ssh hostname program seem to have umask 0022 hardcoded somewhere.

Any insight on any of the above points is welcome.

EDIT: I would like to avoid patches that require manually compiling openssh. The system is running Ubuntu Server 10.04.01 (lucid) LTS with openssh packages from maverick.

Answer: As indicated by poige, using pam_umask did the trick.

The exact changes were:

Lines added to /etc/pam.d/sshd:

# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027

Also, in order to affect all login shells regardless of if they source /etc/profile or not, the same lines were also added to /etc/pam.d/login.

EDIT: After some of the comments I retested this issue.

At least in Ubuntu (where I tested) it seems that if the user has a different umask set in their shell's init files (.bashrc, .zshrc,...), the PAM umask is ignored and the user defined umask used instead. Changes in /etc/profile did't affect the outcome unless the user explicitly sources those changes in the init files.

It is unclear at this point if this behavior happens in all distros.
ssh umask
link|improve this question

edited Aug 10 at 18:41


asked Jan 29 at 3:02
Unode
1385


Unode: "I would like to avoid patches that require manually compiling openssh." Why? – desasteralex Jan 29 at 8:13

@desasteralex - Because (if possible) I would like to avoid having the additional maintenance/administration task that comes with having source based packages and because I find it hard to believe that there is no other way to change umask other than patching openssh. Specially considering this is a rather basic security aspect on any system. – Unode Jan 31 at 14:35
1

After altering /etc/pam.d/sshd (and login), and restarting ssh, I see no behavioral change. Are there other needed changes implied but not mentioned here? – mrclay Jul 30 at 23:27

@mrclay - Do you have UsePAM yes in your sshd_config ? – Unode Jul 31 at 15:24

I don't see any behavioral change either. Did I do something wrong? I am using Transmit (SFTP client) to create a new file and it is not honoring my umask that I followed on here. – Doug Aug 10 at 0:28


Ob man das so haben will mit pam, sei mal dahin gestellt.
02:32:12 21.12.2012 und dann sind Deine Probleme alle unwichtig.

dante
Posts: 128
Joined: 2010-04-20 12:50

Re: umask für Apacheuser (oder Alternativen)

Post by dante » 2011-12-08 08:45

Obgleich die Umask per PAM zu setzen auch interessant ist, glaube ich wird
Das mit der Umask bzw. dm anpassen der Rechte sollte sich als default im winscp Client einstellen lassen.

meine präferierte Lösung.

dante
Posts: 128
Joined: 2010-04-20 12:50

Re: umask für Apacheuser (oder Alternativen)

Post by dante » 2011-12-08 09:15

OK, Müdigkeit hat wieder mal gewonnen.

Worums mir eigentlich ging (das ganze WinSCP Zeugs funktioniert an sich):

Wenn über ein CMS Ordner angelegt werden (www-data als User), dann hat die Gruppe "grpkollegen" keine Schreibrechte, weil umask 022.

Ergo bringt mir auch die PAM-Lösung dabei nichts oder? Ich muss dem www-data User irgendwie verklickern, dass er bitte umask 002 verwenden möchte anstatt 022.

Sorry für die Verwirrung ;)

ddm3ve
Moderator
Moderator
Posts: 1187
Joined: 2011-07-04 10:56

Re: umask für Apacheuser (oder Alternativen)

Post by ddm3ve » 2011-12-08 09:37

Dann hilft Dir entweder der Weg über suexec oder fastcgi.

Alternativ sollte: auto_prepend_file in der php.ini helfen.
Hier ein Script ausführen, was die Berechtigen prüft und setzt.
oder eben umask definiert.
http://de.php.net/manual/de/function.umask.php
Last edited by ddm3ve on 2011-12-08 09:42, edited 2 times in total.
02:32:12 21.12.2012 und dann sind Deine Probleme alle unwichtig.