Hallo,
sorry für meine Newbie-Frage:
Wie kann ich unter Linux einen Ordner für einzelne Benutzer sperren.
Konkret: Ich möchte nicht, dass zwei Gastkonten (A und B) auf die
Netzzwerkfreigabe zugreifen können, dass dritte (C) soll es aber können.
Das ganze Gruppen. und Rechte-Gedöhns hat mich aber etwas verwirrt.
Bevor ich etwas kaputt mache, frage ich lieber.
Muss ich das mit chwon machen und die Dateirechte entziehen?
Dann würde ich jetzt meine Netwerkfreigabe NW (gemountet nach mnt)
hernehmen und mit chown für A und B lese- und schreibrechte sperren?
Nein, so geht das nicht. Man kann die Rechte nur für den Eigentümer, die
Gruppe und den "Rest der Welt" (others) festlegen.
Der richtige Weg wäre meiner Meinung nach:
1. eine neue Gruppe anlegen
2. Alle User, die auf den Ordner zugreifen können sollen, in diese
Gruppe packen
3. Den Ordner der Gruppe zuweisen (chown)
4. Die Zugriffsrechte des Ordners so setzen, dass nur Eigentümer und
Gruppe darauf zugreifen können (0770)
Jörg
Ich sehe das wie Jörg: Ich denke, dass das so nicht geht.
Dein Ansatz würde erfordern, das jeder einzelne Benutzer einer Datei
positiv oder negativ zugeordnet werden könnte, und davon Mehrere.
Der Weg bei Unix ist allerdings (ohne Weiteres) umgekehrt. Dateien haben
einen "Eigentümer", eine "eigentümelnde Gruppe" (mir ist nach
Wortspielen), oder "Alle Anderen", deren Rechte Du bestimmen kannst.
Man kann also feinere Rechtevergabe mit Gruppen bestimmen. Vermutlich
ist das für einen Anfänger oder wenig Erfahrenen am Besten, wenn auch
manchmal mühsam.
Allerdings gibt es noch die ACLs, die Access Control Lists. Mit denen
kann man Rechte bezogen auf einzelne Nutzer aufheben. Allerdings ist
auch mehr Aufmerksamkeit gefordert, denn man kann, wenn man nicht
aufpasst, einiges verwurschteln. :-)
Danke für die Info, mit ACLs habe ich mich (mangels Notwendigkeit)
bisher noch nicht beschäftigt. Ich bezog mich mit
> Nein, so geht das nicht.
aber auf den vom TO vorgeschlagenen Befehl mit chmod.
Jüör
Wenn man es mit Gruppen erledigen möchte, dann würde ich vor dem Anlegen
einer eigenen mal nachsehen ob die verwendete Linux-Distribution nicht
bereits eine Gruppe für diesen Fall vorgesehen hat.
Gerade wenn automount-Mechanismen verwendet werde kann das sonst zu
Überraschungen führen.
> chmod -R 770 /mnt/NW
Das ist nicht unbedingt eine gute Idee, denn so werden alle unter
/mnt/NW vorhandenen Dateien als ausführbar markiert. Wenn man das nicht
haben will, kann man auch die aktuellen Rechte modifizieren:
Theor schrieb:> Allerdings gibt es noch die ACLs, die Access Control Lists. Mit denen> kann man Rechte bezogen auf einzelne Nutzer aufheben. Allerdings ist> auch mehr Aufmerksamkeit gefordert,
Deswegen hätte ich sie einem Anfänger nicht empfohlen. Der Umweg über
Gruppen mag zunächst unnötig kompliziert erscheinen, ist aber am Ende
der einfachere Weg.
Hallo,
entweder ich habe etwas falsch gemacht, oder ich muss die neue Gruppe
jetzt auf jedem Rechner anlegen, der auf das Netzlaufwerk zugreifen
darf...
Wäre das mit den angesprochenen ACLS anders?
Das mit den Usern und Gruppen funktioniert natürlich nur, wenn man sich
lokal oder remote auf der Maschine einloggt. Davon war ich bei dem
Begriff "Konten" ausgegangen.
Wenn es "nur" um Netzwerkfreigaben geht, wäre meine nächste Frage, auf
welche Weise das geschieht. Also NFS/SMB/etc? Und wie die "Konten" auf
die weiteren Rechner verteilt sind.
Jörg
LinuxNewbie schrieb:> sorry für meine Newbie-Frage:
Da gibt's nichts zu entschuldigen, kein Problem. Wir haben alle klein
angefangen.
> Wie kann ich unter Linux einen Ordner für einzelne Benutzer sperren.> Konkret: Ich möchte nicht, dass zwei Gastkonten (A und B) auf die> Netzzwerkfreigabe zugreifen können, dass dritte (C) soll es aber können.> Das ganze Gruppen. und Rechte-Gedöhns hat mich aber etwas verwirrt.
Also, wenn ich das richtig verstehe, hast Du eine Netzwerkfreigabe und
drei User, von denen einer auf die Netzwerkfreigabe zugreifen können
soll. Korrekt?
> Muss ich das mit chwon machen und die Dateirechte entziehen?> Dann würde ich jetzt meine Netwerkfreigabe NW (gemountet nach mnt)> hernehmen und mit chown für A und B lese- und schreibrechte sperren?>>
1
chmod -R A B -rwx /mnt/NW
>> Wäre der Befehl so richtig?
Er ist leider nicht richtig; chmod(1) stellt nur die Rechte für eine
oder mehrere Dateien und / oder Verzeichnisse ein. Benutzer- oder
Gruppennamen haben in diesem Befehl also prinzipbedingt nichts zu
suchen. Um den Besitzer und / oder die Gruppe einer Datei zu ändern,
gibt es die Befehle chown(1) und chgrp(1), dabei haben dann allerdings
die Datei- bzw. Verzeichnisrechte nichts verloren.
Wenn ich Dich richtig verstanden habe, möchtest Du nur einem Benutzer C
Zugriff auf die Netzwerkfreigabe geben. Das wäre der einfachste Fall:
gib' das Verzeichnis, auf das dieser Benutzer zugreifen können soll,
ebendiesem Benutzer, und entzieh' allen anderen alle Rechte:
1
# chown -R C /mnt/NW
2
# chmod u=rwx,go-rwx /mnt/NW
Wenn mehrere Benutzer auf /mnt/NW zugreifen sollen (sagen wir: Dein
Gastbenutzer C und ein Benutzer namens sheeva), ist es das Einfachste,
eine neue Gruppe anzulegen, alle Benutzer, die auf /mnt/NW zugreifen
sollen, in diese Gruppe zu stecken, und allen anderen diesen Zugriff zu
verbieten. Ich mag es, in solchen Fällen sprechende Namen zu vergeben,
daher heißt meine Gruppe nach Deiner Netzwerkfreigabe mnt_NW.
1
# groupadd mnt_NW
2
# usermod -aG mnt_NW sheeva
3
# usermod -aG mnt_NW C
4
# chown -R sheeva:mnt_NW /mnt/NW
5
# chmod a+t,u=rwx,g=rwxs,o-rwx /mnt/NW
In diesem Fall mache ich allerdings etwas, das eigentlich gar nicht
nötig wäre: ich stecke auch den Benutzer "sheeva" in die Gruppe
"mnt_NW". Da "sheeva" aber ohnehin der Eigentümer des Verzeichnisses
/mnt/NW ist und dieser Benutzer alle Rechte auf dem Verzeichnis hat
(u=rwx), wäre das an sich unnötig. Ich mache das trotzdem, um die
Zugriffsrechte im System einfacher dokumentieren zu können.
Wenn Du ganz genau hinschaust, wirst Du bemerken, daß ich hier noch zwei
weitere "Rechte" vergebe, nämlich das setgid-Bit (das "s" in "rwxs").
Die bewirken eine besondere Magie: sie vererbt die Gruppe des
Verzeichnisses /mnt/NW an alle Dateien und Verzeichnisse, die der
Benutzer C in diesem Verzeichnis anlegt. Außerdem setze ich das Sticky
Bit (a+t), damit Benutzer in dem Verzeichnis /mnt/NW nur Dateien löschen
können, die ihnen selbst gehören. Das sind aber zusätzliche Goodies; ob
Du sie brauchst, mußt Du selbst entscheiden.
In meinem Text wirst Du sehen, daß ich hinter Programmnamen (wenn ich
daran denke) eine Zahl in Klammern schreibe, wie beispielsweise bei
chmod(1). Die Zahl bezeichnet die Sektion der Manualseiten (man pages),
in der Du die Dokumentation des genannten Kommandos findest; wenn ich
also chmod(1) schreibe, kannst Du mit "man 1 chmod" das Manual für
diesen Befehl aufrufen. Dies macht man unter UNIX deswegen, weil es in
diesen Manualseiten -- so sie denn korrekt installiert sind -- oft
mehrere Seiten zum selben Thema gibt: ein "man 2 chmod" würde die
Manpage für den Systembefehl chmod(2) anzeigen. Wenn Du eine Manpage
anzeigst, kannst Du mit den Pfeiltasten hoch- oder herunterscrollen und
die Anzeige mit einem Druck der Taste "q" wieder beenden und zu Deiner
Shell zurückkehren.
Ansonsten wirst Du eine weitere beliebte UNIX-Konvention bemerken,
nämlich, daß ich ein Hashpound ("#") vor meine Beispielbefehle mache.
Das wird gemacht, damit der Leser unterscheiden kann, ob der Befehl mit
Root-Rechten -- also in einer Rootshell oder mit sudo(1) -- oder mit
einfachen Benutzerrechten ausgeführt wird, was dann mit einem
Dollarzeichen ("$") gezeigt würde.
Abschließend möchte ich Dir noch so ein paar kleine Tipps dazu mitgeben.
Wenn Du wissen möchtest, in welchen Gruppen sich ein Benutzer befindet,
kannst Du dazu den Befehl id(1) benutzen: "id sheeva" zeigt Dir zum
Beispiel an, in welchen Gruppen sich der Benutzer "sheeva" befindet. Um
Dir anzuschauen, wie die Zugriffsrechte und Eigentümer Deines
Verzeichnisses /mnt/NW sind, kannst Du den Befehl ls(1) mit dem
Parameter "-l" benutzen: "ls -l /mnt/NW". Auch der Befehl ls(1) besitzt
den Schalter "-R" (den Du ja für chmod(1) schon gefunden hast) für eine
rekursive Anzeige: "ls -lR /mnt/NW". Außerdem zeigt ls(1), wenn man ihm
ein Verzeichnis angibt, nur dessen Inhalt an; wenn Du das Verzeichnis
selbst anzeigen möchtest, gibt es entweder den Schalter "-d" oder die
Möglichkeit, das übergeordnete Verzeichnis zu übergeben. Ich persönlich
finde as Ausgabeformat eines rekursiven ls(1) jedoch nicht besonders
übersichtlich, und habe deswegen auf meinen Maschinen überall das Paket
"tree" installiert, das den Befehl tree(1) bereitstellt. Standardmäßig
gibt tree(1) aber keine Berechtigungen, Benutzer- oder
Gruppeneigentümerschaft aus, das kann jedoch mit den Schaltern "-p",
"-u" und "-g" erreicht werden: "tree -pug /mnt/NW" zeigt Dir Dein
gesamtes Verzeichnis in einem übersichtlichen Format.
Nun, erstmal genug gesabbelt; wenn Du noch weitere Fragen oder
Schwierigkeiten hast, dann nur zu, frag' einfach. Viel Spaß, Erfolg, und
Glück mit Linux! ;-)
LinuxNewbie schrieb:> also würde ich "Mich" und "C" einer Gruppe (z.b. NW_access) zuordnen.
Richtig.
> Das mache ich mit>
1
sudo usermod -a -G NW_access Mich
Naja, zuerst mußt Du die Gruppe anlegen... ;-)
> und dann würde ich mit chown das gemountete Laufwerk der enuen Gruppe> zuordnen:>
1
chown -R :NW_access /mnt/NW
>> und dann die Zugriffsrechte einschränken:>
1
chmod -R 770 /mnt/NW
Das solltest Du unter gar keinen Umständen tun, denn damit machst Du
jede einzelne Datei in diesem Verzeichnis ausführbar! Besser:
1
find /mnt/NW -type d -exec chmod 770 {} \;
oder bei modernen Versionen von find etwas effizienter:
1
find /mnt/NW -type d -exec chmod 770 {} +
(Ich habe die 770 jetzt mal aus Deinem Beispiel genommen, mein
vorheriger Beitrag zeigt und erklärt eine IMHO bessere Variante.)
> @ Joerg W: Warum schriebst du "0770"?
Neben den Zugriffsrechten für User, Group, und Others gibt es noch
weitere, nämlich die Setuid-, Setgid-, und das Sticky Bit. Die haben für
Dateien und Verzeichnisse eine besondere Bedeutung: das Setuid-Bit auf
ausführbaren Dateien sagt, daß diese Datei unter der Benutzerkennung
ihres Eigentümers ausgeführt werden soll, anstatt unter der des
Aufrufenden, selbiges gilt für das Setgid-Bit. Dadurch können einem
Benutzer zusätzliche Berechtigungen eingeräumt werden, zum Beispiel für
das Programm ping(1): das braucht nämlich sogenannte Raw Sockets und muß
daher als Root laufen. Selbstverständlich ist so etwas ein inhärentes
Sicherheitsrisiko; Programme mit dem Setuid- und / oder Setgid-Bit
sollten besonders sorgfältig geschrieben sein und der Gebrauch dieser
Einstellungen so minimal wie möglich erfolgen. Diese Bits werden unter
Linux auch nur für kompilierte Binärprogramme benutzt, bei Skripten
bleiben sie ohne Wirkung. Bei Verzeichnissen hat das Setgid-Bit eine
andere Aufgabe: es bewirkt, daß alle in dem Verzeichnis neu angeleten
Dateien und Verzeichnisse mit dem Gruppenbesitz des Elternverzeichnisses
angelegt werden, wie in meinem anderen Beitrag erklärt; dort sage ich
auch ein paar Worte zum Sticky Bit.
Jedenfalls werden die genannten Bits in der von Jörg gewählten
vierstelligen oktalen Schreibweise mit der ersten Zahl bezeichnet; die
anderen drei bezeichnen dann rwx für ugo. In einer dreistelligen
Oktalschreibweise fällt diese erste Zahl weg.
LinuxNewbie schrieb:> entweder ich habe etwas falsch gemacht, oder ich muss die neue Gruppe> jetzt auf jedem Rechner anlegen, der auf das Netzlaufwerk zugreifen> darf...
Noch viel schlimmer: die Gruppen-ID muß auf allen Rechnern dieselbe
sein! ;-)
> Wäre das mit den angesprochenen ACLS anders?
Nein.
Okay, danke erstmal für die vielen und ausführlichen antworten.
Hat mir jedenfalls einen guten Einblick ins Thema gegeben, auch wenn das
Ergebnis nicht wie erwartet war.
Falls noch jemand eine Lösung einfällt, wie ich einen Ordner für
"unbefugte" Nutzer sperren/verstecken/... kann - immer raus damit, hier
nochaml die Wünsche
- Netzwerkfreigabe soll vor bestimmten Benutzern versteckt werden bzw.
nicht zugreifbar sein
- Benutzer sind z.T. auf verschiedenen PCs
LinuxNewbie schrieb:> - Netzwerkfreigabe soll vor bestimmten Benutzern versteckt werden bzw.> nicht zugreifbar sein> - Benutzer sind z.T. auf verschiedenen PCs
Und warum weigerst Du Dich so beharrlich, nun endlich einmal die Art
dieser "Netzwerkfreigaben" zu verraten, z.B. NFS, AFP, SMB/CIFS,
SPX/IPX? Glaubst Du etwa, dadurch bessere Informationen zu erhalten?
Die Ausführungen der anderen Diskussionsteilnehmer beziehen sich ja
überwiegend auf die Dateizugriffsberechtigungen auf dem Zielrechner, die
nicht identisch sein müssen mit denen des entsprechenden
Netzwerkdienstes.
Andreas S. schrieb:> Und warum weigerst Du Dich so beharrlich, nun endlich einmal die Art> dieser "Netzwerkfreigaben" zu verraten?
Ich schweig still, weil ich die einzige Anfrage dazu schlicht überlesen
habe.
Der Zugriff erfolgt vorrangig per SMB. Es kann sein, dass noch einige
Geräte per NFS/AFP drauf zugreifen, das liegt aber nicht in meiner
Verantwortung und sollte auch nicht stören.
Für NFS lässt sich das mittels Kerberos bewerkstelligen, was aber nicht
ganz trivial ist und auch einen gewissen organisatorischen Aufwand nach
sich zieht.
Bei SMB muss ich leider passen, da mir dazu einfach die Erfahrungen
fehlen. Man braucht wohl einen Domänencontroller für die
Authentifizierung der Nutzer.
Jörg
Joerg W. schrieb:> Bei SMB muss ich leider passen, da mir dazu einfach die Erfahrungen> fehlen. Man braucht wohl einen Domänencontroller für die> Authentifizierung der Nutzer.
Der Samba Server verwaltet die Shares, User und Gruppen. Die lokalen
User und Gruppen werden darüber berechtigt. Domänencontroller ist was
anderes.
Den User mit
1
sudosmbpasswd-ausername
zu aktivieren wird sehr oft vergessen.
Der Remoteuser geht über den smbclient and den smbserver, meldet sich
mit seinem samba-Usernamen an, nicht mit der UID/GID.
Und ein Gast ist Gast. Es gibt keinen Unterschied zwischen Gast A und B.
Nur seine Herkunft von einem bestimmten host, subnet etc.
Beitrag "Re: Linux Ordner für einzelne Benutzer sperren"
Das ist richtig. Mehr würde ich am Dateisystem nicht herumdrehen.
Dafür gibt es die Shares, um ACLs anzupassen.
LinuxNewbie schrieb:> Falls noch jemand eine Lösung einfällt, wie ich einen Ordner für> "unbefugte" Nutzer sperren/verstecken/... kann - immer raus damit, hier> nochaml die Wünsche>> - Netzwerkfreigabe soll vor bestimmten Benutzern versteckt werden bzw.> nicht zugreifbar sein
Es mag nur ein Detail am Rande sein, aber Deine Denkweise ist
problematisch. Die Idee kann nicht sein, erstmal den Zugriff für alle
zuzulassen und ihn dann für bestimmte Benutzer zu verbieten. Die Idee
muß sein, den Zugriff für alle zu verbieten und ihn dann nur für
bestimmte Benutzer freizugeben.
Das mag sich jetzt nach pingeliger Korinthenkackerei anhören, ist es
aber nicht. Denn einerseits ist diese Herangehensweise die
Kernphilosophie nahezu aller Sicherheits- und Zugriffskontrollsysteme,
jedenfalls der mir bekannten. Der Gedanke dahinter ist, eine Sicherheit
per Default herzustellen; denn wenn Du oder einer Deiner Kollegen in
vier oder fünf Jahren auf die Idee kommt, einen neuen Benutzer
hinzuzufügen, und ihn beim "Verbieten" einfach vergißt, dann kann dieser
Benutzer auf Daten zugreifen, die gar nicht für ihn bestimmt sind.