Re: "umask" ist unlogisch?!

From: Oliver Fromme <olli(at)secnetix.de>
Date: Fri, 4 Apr 2003 22:36:50 +0200 (CEST)

Oliver Lehmann <lehmann(at)ans-netz.de> wrote:
> Jens Rehsack wrote:
> > Das System entscheidet
> > hier gar nicht, ob der Inhalt ausführbar wäre.
>
> Doch es trifft eine Entscheidung. Und zwar die, das gar keine Datei
> ausfuehrbar ist. Und es ignoriert meinen Wunsch den ich ihm (dem System)
> mittels umask mitteile das alle Dateien die ich anlege ausfuehrbar sind.

Wie Christian bereits erklärt hat, entscheidet die umask
eben _nicht_ alleine darüber, welche initialen Permissions
eine neue Datei erhält, sondern in Kombination mit dem
Wert, den das jeweilige Programm (cc, touch, mkdir) dem
open()-Call (bzw. mkdir(), mknod(), mkfifo() und möglicher-
weise noch andere) mitgibt. Dies ist auch in den jeweili-
gen manpages dokumentiert (und im SUSv3-Standard).

Da touch keine Binaries erzeugt, sondern leere Dateien
(die natürlich nicht ausführbar sind), ruft es den open()-
Call mit 0666 als Permissions auf. Dies erzeugt nunmal
keine x-Bits, egal was in der umask steht. Jedes andere
Verhalten wäre schlichtweg falschund eine POLA-Verletzung.

Ob Du's glaubst oder nicht, das ganze ergibt Sinn. :-)

Wenn Du daran etwas ändern willst (aus welchen Grund auch
immer), mußt Du den Source-Code des touch-Binaries anpas-
sen, so daß es den open()-Call mit 0777 statt 0666 macht.
Du kannst diese Änderung dann gerne per send-pr einschik-
ken (kommt bestimmt gut; die Comitter haben ja manchmal
echt nichts zu Lachen sonst ...).

Du möchtest dann vermutlich auch gleich sämtliche anderen
Programme patchen, die ein open() (mknod(), mkfifo(), ...)
machen. Also quasi alle. Sollte mit sed recht einfach
sein. (BTW, sed mußt Du natürlich auch patchen.)

Deine Änderung gilt dann natürlich systemweit, was dazu
führt, daß nach und nach _alle_ Dateien ein x-Bit haben.
Dann ist das x-Bit natürlich kein Unterscheidungsmerkmal
mehr, um ausführbare von nicht ausführbaren zu trennen.
Und dann kann man auch gleich ganz drauf verzichten.
Klingt alles wirklich furchtbar sinnvoll und logisch.

(Mir sind gerade die Smileys ausgegangen, und es ist schon
nach Ladenschluß.)

> > Du musst dem System das
> > explizit mitteilen, ggf. durch chmod(1).
>
> wozu - ich hab umask wenn ich das generisch bestimmen will *wiederhol*

Die umask bestimmt die Lese- und Schreibrechte, nicht mehr
und nicht weniger. Es werden auch keine Set-id-Bits oder
das Sticky-Bit in neuen Dateien gesetzt, nur weil die Bits
1000, 2000 oder 4000 in der umask nicht gesetzt sind.
Oder noch besser: »umask 37755; touch foo« müßte ein
Verzeichnis (!) foo anlegen, da S_IFDIR == 040000.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"In jedem Stück Kohle wartet ein Diamant auf seine Geburt."
         -- Terry Pratchett
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 04 Apr 2003 - 22:36:55 CEST

search this site