Forum: PC Hard- und Software Linux Ordner für einzelne Benutzer sperren


von LinuxNewbie (Gast)


Lesenswert?

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?
1
chmod -R A B -rwx /mnt/NW

Wäre der Befehl so richtig?

von Joerg W. (joergwolfram)


Lesenswert?

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

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Joerg W. schrieb:
> Nein, so geht das nicht.

Was du beschreibst ist normalerweise schon der bevorzugte weg, rechte zu 
managen. Aber dass das was der TO beschreibt so nicht gienge, ist 
falsch. Linux unterstützt ACLs, mit denen geht das.

https://www.redhat.com/sysadmin/linux-access-control-lists
https://unix.stackexchange.com/questions/282517/is-it-possible-to-create-a-negative-acl

von Theor (Gast)


Lesenswert?

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. :-)

von Joerg W. (joergwolfram)


Lesenswert?

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

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

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.

von LinuxNewbie (Gast)


Lesenswert?

Danke,
also würde ich "Mich" und "C" einer Gruppe (z.b. NW_access) zuordnen. 
Das mache ich mit
1
sudo usermod -a -G NW_access Mich
und
1
sudo usermod -a -G NW_access C

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

Ist das soweit vom Prinzip richtig?

@ Joerg W: Warum schriebst du "0770"?

von Joerg W. (joergwolfram)


Lesenswert?

> @ Joerg W: Warum schriebst du "0770"?

Die vorangestellte 0 soll verdeutlichen, dass es sich dabei um eine 
Oktalzahl handet.

Jörg

von Joerg W. (joergwolfram)


Lesenswert?

> 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:
1
chmod -R o-rwx /mnt/NW

Jörg

von Markus (Gast)


Lesenswert?

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.

von LinuxNewbie (Gast)


Lesenswert?

Okay, danke. Werd emein Glück versuchen

von LinuxNewbie (Gast)


Lesenswert?

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?

von Joerg W. (joergwolfram)


Lesenswert?

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

von Sheeva P. (sheevaplug)


Lesenswert?

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! ;-)

von Sheeva P. (sheevaplug)


Lesenswert?

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.

von Sheeva P. (sheevaplug)


Lesenswert?

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.

von LinuxNewbie (Gast)


Lesenswert?

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

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch User
von LinuxNewbie (Gast)


Lesenswert?

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.

von Joerg W. (joergwolfram)


Lesenswert?

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

: Bearbeitet durch User
von LinuxNewbie (Gast)


Lesenswert?

Schade, trotzdem Danke für alle Hilfe.

von Diese Aussage ist Quatsch (Gast)


Lesenswert?

🐧 DPA 🐧 schrieb:
> Joerg W. schrieb:
>> Nein, so geht das nicht.
>
> Was du beschreibst ist normalerweise schon der bevorzugte weg, rechte zu
> managen. Aber dass das was der TO beschreibt so nicht gienge, ist
> falsch. Linux unterstützt ACLs, mit denen geht das.
>
> https://www.redhat.com/sysadmin/linux-access-control-lists
> 
https://unix.stackexchange.com/questions/282517/is-it-possible-to-create-a-negative-acl

Frickel, frickel, frickel..

Du bist auf dem Holzweg!

Was Joerg schrieb ist der richtige Linux konforme weg!


Der Rote Hut ist ein Amidreck wie Windows!

Ok?

von Diese Aussage ist Quatsch (Gast)


Lesenswert?

🐧 DPA 🐧 schrieb:
> Joerg W. schrieb:
>> Nein, so geht das nicht.
>
> Was du beschreibst ist normalerweise schon der bevorzugte weg, rechte zu
> managen. Aber dass das was der TO beschreibt so nicht gienge, ist
> falsch. Linux unterstützt ACLs, mit denen geht das.
>
> https://www.redhat.com/sysadmin/linux-access-control-lists
> 
https://unix.stackexchange.com/questions/282517/is-it-possible-to-create-a-negative-acl

Frickel, frickel, frickel..

Du bist auf dem Holzweg!

Was Joerg schrieb ist der richtige Linux konforme Weg!


Der Rote Hut ist ein Amidreck wie Windows!

Ok?

von Drago S. (mratix)


Lesenswert?

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
sudo smbpasswd -a username
 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.
1
[bilder]
2
path = /srv/shares/bilder
3
browsable = yes
4
writable = yes
5
guest ok = yes
6
read only = no
7
valid users = meinuser,@users,@smbbilder

Hier https://wiki.ubuntuusers.de/Samba_Server/smb.conf/ gibts ein paar 
praktische Beispiele. Auch für den Gast.

: Bearbeitet durch User
von Sheeva P. (sheevaplug)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.