sneakyX
Anmeldungsdatum: 6. April 2013
Beiträge: 80
Wohnort: Wittgenstein
|
Hallo zusammen,
ich betreibe bei mir ein heterogenes Netzwerk. Einen Linux-Server mit mehreren Windows-Clients und mehreren (KDE)Linux-Clients. Bisher war es so, das an den Linux-Clients nur ein Benutzer eingerichtet war. Ich hatte auf den Linux -Clients dann in der fstab gemäß
//IP-Adresse/Freigabe /lokalerMountpunkt cifs user=user,passwd=XYZ,gid=1000,uid=1000,file_mode=0660,dir_mode=0770
eingebunden. (Ich hoffe, ich habe an alle Optionen gedacht) Ich möchte auf den Linux-Clients 3 neue Benutzer einrichten und auf dem Linux-Server möchte ich sehen, welcher Benutzer eine Datei angelegt oder geändert hat. Außerdem habe ich sehr unterschiedliche Freigaberechte (über UNIX-Gruppenrichtlinien geregelt, wer auf welchen Ordner bzw welche Freigabe zugreifen darf). Deshalb kann ich keinen "allgemeinen" Gruppenbenutzer zum mounten anlegen. Ich habe mir die Informationen zu cifs, fuseSMB und smbclient durchgelesen, bin mir aber ziemlich unsicher, welche Methode da überhaupt zum Ziel führt.
Ich hatte mir gedacht, mit Hilfe eines mount-scripts, das ich in ~/.kde/Autostart anlege und individuell die Freigaben, Benutzername und Passwörter eintrage diese individuellen Mounts hinzubekommen, aber ich erhalte dann die Meldung mount: Nur „root“ kann dies tun Um dies zu nutzen, muss ich den Benutzern das Recht geben, mount auszuführen. Gibt es noch eine andere Möglichkeit, die eleganter ist?
Wie habt Ihr das Problem gelöst? Vielen Dank für Eure Hilfe! MfG sneakyX
|
patlkli
Anmeldungsdatum: 20. April 2006
Beiträge: 646
Wohnort: Landshut
|
Das ging früher einfach so und wurde aus Sicherheitsgründen standardmäßig deaktiviert.
Im Wiki-Artikel über cifs steht das nochmal recht ausführlich beschrieben, warum es deaktiviert ist und wie man es wieder aktivieren kann.
|
Max-Ulrich_Farber
Anmeldungsdatum: 23. Januar 2007
Beiträge: 7788
|
Was für Clients (Rechner) sind das denn? Bei Linux-Clients kann man mit den UNIX Extensions viel machen. Bei Windows-Clients ist das schwieriger, soweit überhaupt möglich. Man kann in Samba die Windows-ACL mappen, aber ich habe das noch nie gemacht, und ich weiß nicht, wie (un)vollständig das Mapping ist. Einfach ist das auf jeden Fall nicht. Für Windows-Clients am einfachsten sind die Optionen valid users = xxx,yyy,zzz... und write list = zzz,... . Wenn Du damit hin kommst, ist es nicht schwierig. Doch mit den ACL auf dem Client brauchen diese Angaben nicht übereinzustimmen. Schwierig ist es evtl., ein gemeinsames Verfahren zu finden, das für Windows- und Linux-Clients gleichermaßen geeignet ist.
Ich möchte auf den Linux-Clients 3 neue Benutzer einrichten und auf dem Linux-Server möchte ich sehen, welcher Benutzer eine Datei angelegt oder geändert hat. Außerdem habe ich sehr unterschiedliche Freigaberechte (über UNIX-Gruppenrichtlinien geregelt, wer auf welchen Ordner bzw welche Freigabe zugreifen darf). Deshalb kann ich keinen "allgemeinen" Gruppenbenutzer zum mounten anlegen.
Das geht über die UNIX-Dateirechte, wenn die UNIX-Extensions aktiv sind und Du evtl. außerdem noch POSIX-ACL verwendest. Aber eben leider nicht für Windows-Clients ☹ . Gruß- Max-Ulrich
|
sneakyX
(Themenstarter)
Anmeldungsdatum: 6. April 2013
Beiträge: 80
Wohnort: Wittgenstein
|
Hallo, ersteinmal vielen Dank für die Antworten! @ Max-Ulrich: die Clients, um die es geht, sind (K)ubuntu 12.04 Clients.
Der Server ist ein openSuse Server
Übrigens: Das mit den Dateirechten funktioniert bei einem Benutzer schon einwandfrei:
Bis war es so, das PC1 nur Benutzer 1 arbeitet. Er hat auch nur Zugriff auf die Ordner, die für ihn bestimmt sind. Will er auf einen anderen Ordner zugreifen, ist der Ordner gesperrt. Egal, ob Windows oder Linux-Client, der Zugriff war wegen der Unix-Rechte auf dem Linux-Server nicht möglich.
Auf PC2 arbeitete bisher Benutzer 2 usw. Jetzt soll aber Benutzer 1 auch auf PC2 und PC3 arbeiten.
Das Problem dabei ist, das der Eintrag in der fstab, den ich bis jetzt gemacht habe den Benutzernamen und das Passwort des jeweiligen bisher einzigen Benutzer tragen, und genau das will ich nicht. Loggt sich Benutzer 1 ein (egal auf welchem PC) soll er nur seine Freigabe und die gemeinsamen Freigaben sehen. Innerhalb der gemeinsamen Freigaben nur auf die Ordner zugreifen, die für ihn bestimmt sind. @patlkli: Ich habe mir den Artikel durchgelesen. In dem betreffenden Abschnitt steht jedoch nur, wie ein Benutzer einen persönlichen Mount erstellen kann. Mir ist schon klar, das ich dafür einen Eintrag in der fstab hinzufüge. Das nutze ich ja schon. Jedoch muss der Benutzer, der die Freigabe nutzen möchte, auch Eigentümer des Ordners sein. Wenn ich auf dem Client aber mehrere Benutzer habe, die alle 3 gleiche und 1 unterschiedliche Freigabe(n) mit Ihren eigenen Namen und Passwort einbinden möchten, und bei jedem diese Freigabe unterhalb des Homeordners eingebunden werden soll, würde das ja ein Mordskonstrukt werden.
Oder habe ich das falsch verstanden? lg sneakyX
|
Max-Ulrich_Farber
Anmeldungsdatum: 23. Januar 2007
Beiträge: 7788
|
Ich glaube, da ist noch ein kleiner Denkfehler: Beim fstab-Eintrag muss man unterscheiden, wer die Verbindung herstellt und wer nachher auf die gemountete Freigabe zugreift. Hergestellt wird die Verbindung in der Regel vom Administrator (also von Dir) mit seinen Namen und Passwort. Wer auf die Freigaben zugreifen kann, wird durch die UNIX-Dateirechte festgelegt. Diese werden entweder per UNIX-Extensions vom Server übernommen, oder aber ohne UNIX-Extensions im fstab-Eintrag mit den Optionen uid, gid, file_mode, dir_mode für den Client neu festgelegt ("simuliert"). Für den Zugriff auf die bereits gemounteten Freigaben braucht man keinen eigenen Samba-Account. Du kannst also bei jeder einzelnen Freigabe festlegen, wem sie nach dem Mounten gehören soll und wer diese sehen und ggf. auf sie zugreifen darf, auch wenn immer Du es bist, der mit Deinem Benutzernamen und Passwort die Verbindung herstellt. Da die anderen Benutzer ja keinen eigenen Samba-Account haben, können sie auch nicht auf anderem Wege (z.B. Nautilus, GVFS) auf Freigaben zugreifen, die Du nicht im fstab-Eintrag für sie zugänglich gemacht hast. Ein Nachteil: Wenn die UNIX-Extensions nicht aktiv sind, gehören auf dem Server alle neu angelegten Ordner und Dateien Dir, egal wer sie angelegt hat. Aber auf dem Client merkt man das dann gar nicht. Denn aus der Sicht des Servers bist es ja dann immer Du, der zugreift, alle Andern tun es sozusagen in Deinem Namen. Gruß - Max-Ulrich
|
sneakyX
(Themenstarter)
Anmeldungsdatum: 6. April 2013
Beiträge: 80
Wohnort: Wittgenstein
|
Hallo Max-Ulrich,
danke für Deine Antwort. Jetzt weiß ich, wo mein Fehler liegt...
Ich habe mich total falsch ausgedrückt.
Für jeden Benutzer gibt es einen Samba-Account auf dem Server, ebenso auch Gruppenzugehörigkeit, etc. (Das musste ich ja schon für die Windows-Clients machen.) Wenn ich das richtig verstanden habe, wären folgenden Lösungen für die Linux-Clients möglich:
(Korrigiere mich bitte, wenn ich wieder falsch liege) 1. Ich schreibe für jeden Benutzer ein KDE-Script, das die Freigaben mit dem pasenden SAMBA-Benutzernamen mountet und setze für mount das SUID-Bit, damit die Benutzer auch selbst mounten und unmounten können, ohne nach dem Passwort gefragt zu werden. Wenn ich die Homeverzeichnisse verschlüssele, kann das Passwort aus dem Script nicht ausgelesen werden, auch wenn die Benutzer root-Rechte haben, um Updates aufzuspielen. 2. Ich setze NFS für die Linux-Clients ein. Eventuell auch mit LDAP-Server. (Obwohl im Wiki bei NFS entweder zusätzlich Kerberos oder alternativ Samba empfohlen wird). Dann muss ich mir aber Gedanken um die root-Rechte für die Updates machen. Gebe ich allen Benutzern root-Rechte zum Durchführen von Updates (damit ich nicht soviel Arbeit habe 😉 ) können sie ganz einfach die BenutzerID wechseln, um in Ordner zu kommen, auf die sie keinen Zugriff haben sollten. 3. die von Dir angesprochene Lösung, aber nur bei eingeschalteten Unix-Extensions auf dem Server. Gibt es hier - wie in (2.) nicht auch die Möglichkeit, einfach die UID zu wechseln, um Zugriff auf andere Ordner zu bekommen? Bevor jemand fragt, warum ich den Usern auf den Clients Root-Rechte geben möchte:
Die User dürfen auf ihren Rechnern machen, was sie wollen, das ist mir egal, aber sie dürfen auf keinen Fall an alle Daten auf dem Server kommen!
(Meine Kinder und Eltern dürfen nicht auf meine Firmendaten zugreifen, meine Frau schon. Umgekehrt sollen wir nicht auf die privaten Daten meiner Kinder und meiner Eltern zugreifen. Für den Austausch über die ganze Familie gibt es eine extra Freigabe. Meine Sekretärin darf nicht auf den Chef-Ordner in der Firmenfreigabe zugreifen, ebenso nicht auf die privaten Freigaben. Jeder soll aber an dem Rechner, an dem er sitzt auch Updates machen können.)
Beim Samba-Server und Windows-Clients bin ich mir sicher, das das funktioniert. Ebenso, wenn ich einen Linux-Client nur für einen Benutzer vorsehe. Ich wollte jetzt einige der Windows-Clients durch Kubuntu-Clients ersetzen. lg sneakyX
|
patlkli
Anmeldungsdatum: 20. April 2006
Beiträge: 646
Wohnort: Landshut
|
Du hast mich falsch verstanden, ja. Ich hab dir den Wiki-Artikel nur wegen dem SUID-Bit nochmal verlinkt. 😉 Bei deinen Möglichkeiten würde ich dir wirklich zur ersten raten. Nachdem ich es gerade ausprobieren wollte, bin ich allerdings über ein Problem gestolpert. Bei mount.cifs wurde vor einigen Versionen die Möglichkeit als regulärer User mit gesetztem SUID-Bit zu mounten, entfernt! Der Grund wird höchst wahrscheinlich der hier sein: http://www.samba.org/samba/security/CVE-2009-2948.html Demnach müsstest du vielleicht die /etc/sudoers so verändern, dass normale User mount.cifs als Root ausführen dürfen. Das öffnet aber wohlgemerkt die Sicherheitslücke wieder, die durch den SUID-Patch in mount.cifs geschlossen wurde! Es sei denn, du schreibst wirklich die vollständigen Befehle mit allen Parametern in die sudoers oder du schreibst ein systemweites Skript, dass das Mounten übernimmt (und mittels sudo als Root ausführbar ist) und liest die Zugangsdaten nur aus einer Konfigurationsdatei im Home-Verzeichnis des aufrufenden Users auf. EDIT: Ich les gerade nochmal was du geschrieben hast, und wenn ich dich richtig verstehe, haben deine Benutzer eh Root-Rechte? Dann könntest du dir den ganzen Kram mit sudoers und SUID-Bit sowieso sparen und das Skript einfach mittels sudo umsetzen. 😉
|
Max-Ulrich_Farber
Anmeldungsdatum: 23. Januar 2007
Beiträge: 7788
|
Wenn Du auch Windows-Clients hast (steht ja oben, hatte ich nur übersehen), dann ist es im Sinne von "Arbeitsaufwand minimieren" sinnvoll, das Problem für alle möglichst ähnlich zu lösen, also nicht Lösungen zu verwenden, die allzu Linux-spezifisch sind. Da wäre wohl der Vorschlag 1. am ehesten geeignet.
setze für mount das SUID-Bit
Ist das nicht ein bisschen gewagt? Wenn Du das Mounten mit fstab-Einträgen mit den Optionen users und noauto vorbereitest, geht es auch ohne das. Das ist wohl auch nicht mehr Arbeit als das Erstellen der Skripte. Gibt es hier - wie in (2.) nicht auch die Möglichkeit, einfach die UID zu wechseln, um Zugriff auf andere Ordner zu bekommen?
Ja, wenn die User Root-Rechte haben. Deshalb scheiden die Lösungen 2. und 3. da wohl aus. Die Freigaben dürfen beim Anmelden der User nicht schon systemweit gemountet sein, sonst kann jeder, der sich Root-Rechte verschaffen kann, letztlich damit machen was er will. Gruß - Max-Ulrich
|
sneakyX
(Themenstarter)
Anmeldungsdatum: 6. April 2013
Beiträge: 80
Wohnort: Wittgenstein
|
Hallo,
vielen Dank für die vielen Hinweise. Jetzt habe ich das mounten geschafft, nur das unmounten funktioniert noch nicht.
Ich bin wie folgt vorgegangen: 1. Ich habe eine neue Gruppe angelegt (sambamounter) 2. Danach habe ich
ausgeführt.
|
%sambamounter ALL=NOPASSWD: /usr/bin/netzwerk
|
habe ich hinzugefügt. 3. danach habe ich mit
| sudo nano /usr/bin/netzwerk
|
folgendes Script hinzugefügt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 | #!/bin/sh
mounten () {
# pruefen ob lokales Verzeichnis vorhanden
if [ ! -d $HOME/Server/$1 ]
then
mkdir $HOME/Server/$1
fi
# Verzeichnis mounten
mount -t cifs -o credentials=$HOME/.smbcredentials,gid=$SUDO_GID,uid=$SUDO_UID,file_mode=0660,dir_mode=0770 //Server/$1 $$
} # Funktion mounten zuende
if [ $1="mount" ]
then
if [ ! -d $HOME/Server ]
then
mkdir $HOME/Server
fi # $HOME/Server ist jetzt angelegt
if [ $SUDO_USER != "kind1" ]
then
# Firmendaten nicht zugaenglich fuer Kinder
mounten "firmendaten"
fi
mounten "programmdaten"
mounten "downloads"
if [ $SUDO_USER = "chef" ]
then
# Servicelaufwerke nur fuer chef erreichbar
mounten "install"
if [ ! -d $HOME/Server/datensicherung ]
then
mkdir $HOME/Server/datensicherung
fi
mount -t cifs -o username=xyz,password=xyz,gid=$SUDO_GID,uid=$SUDO_UID,file_mode=0660,dir_mode=0770 //Server/datensicherung #HOME/Server/datensicherung
# hier muss mit anderem Passwort verbunden werden - ist sowas wie ein GuestLogin
fi
if [ $SUDO_USER != "sekretaerin" ]
then
# private Daten nicht fuer sekretaerin erreichbar
mounten "privat"
fi
elif [$1="unmount"]
then
if [$SUDO_USER != "kind1" ]
then
umount -l $HOME/Server/firmendaten
fi
umount -l $HOME/Server/programmdaten
umount -l $HOME/Server/downloads
if [ $SUDO_USER != "sekretaerin" ]
then
umount -l $HOME/Server/privat
fi
if [ $SUDO_USER = "chef" ]
then
umount -l $HOME/Server/install
umount -l $HOME/Server/datensicherung
fi
else
echo "Fehler bei Parameteruebergabe!"
fi
|
4. Danach habe unter Systemeinstellungen - Starten und Beenden - Autostart - ein neues Programm hinzugefügt.
In der Registerkarte Programm habe ich | sudo /usr/bin/netzwerk mount
|
eingetragen Alles bestätigt,
5. Die Datei .smbcredentials angelegt, Dateirechte auf 0600 (Punkt 4+5 für jeden Benutzer wiederholen!) 6. neu angemeldet im KDE, fertig. Wie gesagt, das unmounten beim Wechseln von Benutzern funktioniert noch nicht. Dafür bräuchte ich nochmal Eure Hilfe. Wie bekomme ich den unmount beim Abmelden von KDE hin? lg und vielen Dank sneakyX
|
Max-Ulrich_Farber
Anmeldungsdatum: 23. Januar 2007
Beiträge: 7788
|
Schau mal, ob Du im Wiki-Artikel LightDM nicht eine Lösung findest. Ich könnte mir vorstellen, dass es mit einem session-cleanup-script geht. Gruß - Max-Ulrich
|
sneakyX
(Themenstarter)
Anmeldungsdatum: 6. April 2013
Beiträge: 80
Wohnort: Wittgenstein
|
Hallo, ich werde es demnächst mal probieren. Im Moment klappt die Lösung mit Neustarten auch ganz gut. Schließlich startet der Rechner sehr schnell. Vielen Dank für Eure Hilfe! MfG sneakyX
|
sneakyX
(Themenstarter)
Anmeldungsdatum: 6. April 2013
Beiträge: 80
Wohnort: Wittgenstein
|
Hallo zusammen, der Fehler lag an meinem Script. (Leerzeichen zuwenig in der IF-Funktion)
Ich habe noch zwei neue Funktionen hinzugefügt. Vielleicht kann das ja jemand auch gebrauchen, deshalb hier jetzt korrigierte und verbesserte Version. lg sneakyx 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116 | #!/bin/sh
# Mounten von Netzlaufwerken, SAMBA Client an SAMBA Server. Die HOME-Verzeichnisse müssen freigegeben sein!
# 2013-06-29-16-15
mounten () {
# pruefen ob lokales Verzeichnis vorhanden
if [ ! -d $HOME/Server/$1 ]
then
mkdir $HOME/Server/$1
fi
# Verzeichnis mounten
mount -t cifs -o credentials=$HOME/.smbcredentials,gid=$SUDO_GID,uid=$SUDO_UID,file_mode=0660,dir_mode=0770 //server/$1 $HOME/Server/$1
} # Funktion mounten zuende
syncmount () {
if [ ! -d $HOME/Server/$SUDO_USER/$1 ]
then
# Wenn Ordner auf Server fehlt, dann erst den Ordner auf dem Server erzeugen
mkdir $HOME/Server/$SUDO_USER/$1
# Danach den lokalen auf den Serverordner syncen
rsync -a $HOME/$1 $HOME/Server/$SUDO_USER
fi
if [ $2 = "mount" ]
then
# Laufwerk mounten
mount $HOME/Server/$SUDO_USER/$1 $HOME/$1 --bind
elif [ $2 = "synchome" ]
then
# Synchronisieren mit Server
rsync -a --delete $HOME/Server/$SUDO_USER/$1 $HOME
elif [ $2 = "unmount" ]
then
umount $HOME/$1
elif [ $2 = "syncserver" ]
then
rsync -a --delete $HOME/$1 $HOME/Server/$SUDO_USER
fi
}
if [ $1 = "mount" ]
then
if [ ! -d $HOME/Server ]
then
mkdir $HOME/Server
fi # $HOME/Server ist jetzt angelegt
# Home-Verzeichnis vom Server mounten
mounten $SUDO_USER
syncmount "Dokumente" "mount"
syncmount "Downloads" "mount"
syncmount "Musik" "mount"
syncmount "Bilder" "mount"
syncmount "Desktop" "synchome"
syncmount "Videos" "mount"
syncmount "Vorlagen" "mount"
# syncmount ".thunderbird" "mount"
# syncmount ".firefox" "mount"
# syncmount ".openoffice.org" "mount"
if [ $SUDO_USER != "Kind1" ]
then
# Firmendaten nicht zugaenglich fuer Kinder
mounten "firmendaten"
fi
mounten "programmdaten"
mounten "downloads"
if [ $SUDO_USER = "chef" -o $SUDO_USER = "Mitarbeiter" ]
then
# Servicelaufwerke nur fuer chef erreichbar
mounten "install"
if [ ! -d $HOME/Server/datensicherung ]
then
mkdir $HOME/Server/datensicherung
fi
mount -t cifs -o username=xyz,password=xyz,gid=$SUDO_GID,uid=$SUDO_UID,file_mode=0660,dir_mode=0770 //server/datensicherung $HOME/Server/datensicherung
// allgemeine Freigabe fuer z.B. Datensicherung
fi
if [ $SUDO_USER != "Sekretaerin" -o $SUDO_USER = "Mitarbeiter" ]
then
# private Daten nicht fuer Sekretaerin erreichbar
mounten "privat"
fi
elif [ $1 = "unmount" ]
then
syncmount "Dokumente" "unmount"
syncmount "Downloads" "unmount"
syncmount "Videos" "unmount"
syncmount "Vorlagen" "unmount"
syncmount "Musik" "unmount"
syncmount "Bilder" "unmount"
syncmount "Desktop" "syncserver"
umount -f $HOME/Server/$SUDO_USER
if [ $SUDO_USER != "Kind1" ]
then
umount -f $HOME/Server/firmendaten
fi
umount -f $HOME/Server/programmdaten
umount -f $HOME/Server/downloads
if [ $SUDO_USER = "chef" -o $SUDO_USER = "Mitarbeiter" ]
then
umount -f $HOME/Server/install
umount -f $HOME/Server/datensicherung
fi
if [ $SUDO_USER != "Sekretaerin" -o $SUDO_USER = "Mitarbeiter" ]
then
umount -f $HOME/Server/privat
fi
else
echo "Fehler bei Parameteruebergabe!"
fi
|
Außerdem muss noch in $HOME/.kde/Autostart
ein Script mit folgenden Inhalt angegeben werden
| #!/bin/bash
sudo /usr/bin/netzwerk mount
|
und in $HOME/.kde/shutdown
(wird wirklich kleingeschrieben) - wenn der Ordner nicht besteht, muss er erzeugt werden!
| #!/bin/bash
sudo /usr/bin/netzwerk unmount
|
Falls die Scripte automatisch beim Anlegen eines neuen Benutzers angelegt werden sollen, legt sie in
bzw
Vergesst nicht, die .smbcredentials für jeden Benutzer anzulegen! Viel Spaß! lg sneakyx
|