Archiv

Posts Tagged ‘Samba’

Konfiguration der host- und benutzer-basierten Sicherheit des Dienstes

2012/01/30 Kommentare aus

vsftpd

Die Standard-Konfiguration von vsftpd sieht vor allen in der Datei /etc/vsftpd/user_list angeführten Benutzern den Zugriff zu verweigern. Alle Benutzer, die nicht in dieser Datei enthalten sind können sich also am FTP-Server einloggen. Umgekehrt – Benutzer denen der Zugriff verweigert werden soll werden hier eingetragen.

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.

# ...

# Verweigere folgende Benutzer:
bill
steve

Dieses Verhalten macht auch meistens Sinn – vom Login ausgeschlossen sind nur System-Accounts und root. Gelegentlich will man aber nur einigen wenigen Benutzern den Zugriff auf den FTP-Server erlauben. In diesem Fall ist es praktischer die Bedeutung der Datei /etc/vsftpd/user_list umzukehren, um ausschließlich darin enthaltenen Benutzern FTP-Zugriff zu erlauben. Dazu wird der Eintrag userlist_deny in /etc/vsftpd/vsftpd.conf auf NO gesetzt:

userlist_deny=NO

Es folgt der Eintrag erlaubter Benutzer in /etc/vsftpd/user_list:

# Erlaube folgende Benutzer:
alice
bob
sam

Es können sich nun ausschließlich die Benutzer alice, bob und sam an dem FTP-Server anmelden.

Host-basierte Sicherheit

Die Direktive tcp_wrappers in /etc/vsftpd/vsftpd.conf sollte bereits standardmäßig aktiv sein:

tcp_wrappers=YES

Es können nun Host-basierte Zugangsbeschränkungen über die Dateien /etc/hosts.allow und /etc/hosts.deny gesetzt werden:

/etc/hosts.allow

vsftpd : 192.168.100.0/255.255.255.0 EXCEPT 192.168.100.12

/etc/hosts.deny

vsftpd : ALL

Auf diese Weise abgewiesene Clients bekommen die Antwort

421 Service not available

Samba

Host- und Benutzerbasierte Sicherheit wird am einfachsten in der Konfigurationsdatei des Samba-Servers, /etc/samba/smb.conf festgelegt. Unter global eingetragene Beschränkungen gelten global, unter den einzelnen Freigaben eingetragene Beschränkungen ausschließlich für die jeweilige Freigabe. Verwendet werden dazu die Direktiven hosts allow, hosts deny sowie valid users und invalid users.

Die localhost Addresse 127.0.0.1 ist immer erlaubt (wenn nicht explizit in hosts deny angeführt).

Erlaube alle IPs in 150.203.*.* außer einer

hosts allow = 150.203. EXCEPT 150.203.6.66

Erlaube gesamtes Netzwerk

hosts allow = 150.203.15.0/255.255.255.0

Erlaube einige Hosts

hosts allow = lapland, arvidsjaur

Erlaube Hosts in NIS netgroup „foonet“, verweigere einen bestimmten Host

hosts allow = @foonet
hosts deny = pirate

Erlaube Benutzer bob, sam, alice und lokale Gruppe team2, verweigere bill den Zugriff

valid users = bob sam alice +team2
invalid users = bill

SSH

User-basierte Sicherheit für SSH wird in der Konfigurationsdatei /etc/ssh/sshd_config festgelegt. Am wichtigsten ist dabei die Direktive AllowUsers – falls diese angegeben wird können sich ausschließlich die hier angegebenen Benutzer anmelden. Es ist auch möglich, Benutzer ein Login nur von bestimmten Hosts aus zu erlauben.

AllowUsers john fred
AllowUsers bob@192.168.100.102 michael@192.168.150.12
AllowGroups team1
DenyUsers steve bill alice
DenyGroups team2

Benutzer, denen der Zugriff nicht erlaubt ist bekommen nach Eingabe ihres Kennwortes die Meldung

Permission denied, please try again.

Es ist dabei nicht ersichtlich, ob das eingegebene Kennwort falsch war oder dem Benutzer das Login verweigert wurde.

Host-basierte Sicherheit wird am einfachsten über die Dateien /etc/hosts.allow und /etc/hosts.deny konfiguriert:

/etc/hosts.allow

sshd : 127. 192.168.100. EXCEPT 192.168.100.101

/etc/hosts.deny:

sshd : ALL

Per TCP-Wrappers abgelehnte Verbindungsversuche werden mit

ssh_exchange_identification: Connection closed by remote host

beantwortet. Es wird gar nicht erst die Eingabe eines Kennwortes verlangt.

NFS

Host-basierte Zugriffssteuerung sollte bereits bei der Erstellung von NFS-Freigaben konfiguriert sein.

/etc/exports

/mynfsshare   192.168.100.0/255.255.255.0(rw) 192.168.12.1(ro)
/projects       proj*.local.domain(rw)
/usr            *.local.domain(ro) @trusted(rw)
/home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)
/pub            *(ro,insecure,all_squash)

Beschränkungen auf Benutzerebene werden über das Dateisystem festgelegt, entweder über die normalen UNIX-Rechte oder auch unter Verwendung von ACLs.

HTTP

Benutzer- und Hostbasierte Sicherheit wird in der Konfigurationsdatei /etc/httpd/conf/httpd.conf festgelegt. Erlaubte bzw. zu verweigernde Hosts werden über die Direktiven Order, Allow from und Deny from für jedes Verzeichnis einzeln angegeben. Ein Eintrag innerhalb <Directory „/var/www/html“> wird jedoch an alle Unterverzeichnisse vererbt, soweit dort nicht anders angegeben.

<Directory "/var/www/html">
# ...
#
# Controls who can get stuff from this server.
#
 Order allow,deny
 Allow from all
 Deny from 192.168.100.103
</Directory>

Host 192.168.100.103 bekommt nun beim Versuch die Seite anzuzeigen den HTML-Error 403:

Forbidden
You don't have permission to access / on this server.

Benutzerbasierte Sicherheit wird ebenfalls für jedes Verzeichnis einzeln konfiguriert. In folgendem Beispiel wird das Verzeichnis myprivatedir nur nach Eingabe eines gültigen Benutzernamens und des zugehörigen Kennwortes angezeigt:

<Directory "/var/www/html/myprivatedir">
AuthType Basic
AuthName "Eingabe eines Kennwortes erforderlich"
AuthUserFile /etc/httpd/users
require valid-user
</Directory>

Möglich nach require sind valid-user, valid-group, user und group.

Bei Verwendung von Gruppen ist zusätzlich zu AuthUserFile das AuthGroupFile bekanntzugeben:

AuthType Basic
AuthName "Geschützte Ressource"
AuthUserFile /web/users
AuthGroupFile /web/groups
Require group admin

Benutzer anlegen:

htpasswd -c /etc/httpd/users alice
htpasswd /etc/httpd/users bob
htpasswd /etc/httpd/users sam

Gruppen werden in einer einfachen Textdatei verwaltet, z.B. /etc/httpd/groups:

admin: bob sam alice
team1: bill steve
Kategorien:RHCE Schlagwörter: , , , , ,

SMB: Einrichtung eines gemeinsamen Verzeichnisses für einzelne Clients, gemeinsames Verzeichnis für die Zusammenarbeit

2012/01/23 Kommentare aus

Die Einrichtung eines gemeinsamen Verzeichnisses für die Zusammenarbeit mehrerer Benutzer sollte zuerst auf Dateisystemebene funktionieren und erst danach über CIFS exportiert werden.

Die Installation des Samba-Servers erfolgt durch Aufruf von

yum install samba

Erstellung von Benutzerkonten

Der erste Schritt ist die Erstellung einer Gruppe und das Hinzufügen/Erstellen der jeweiligen Mitglieder der Gruppe:

groupadd team1
useradd -s /sbin/nologin -g team1 alice
useradd -s /sbin/nologin -g team1 bob
useradd -s /sbin/nologin -g team1 sam

In obigem Beispiel wurde die Gruppe team1 und die Benutzer bob, sam und alice als deren Mitglieder erstellt. Da ein Login auf dem lokalen System für diese Benutzer nicht notwendig ist wurde den Benutzern die Login-Shell /sbin/nologin zugewiesen.

Zuweisen von Benutzerkennworten

Kennworte werden von Samba in einer eigenen Datenbank geführt. Die Erstellung eines Kennwortes für einen Benutzer erfolgt durch Aufruf von smbpasswd. Nachfolgend werden Kennworte für die Mitglieder der Gruppe team1 erstellt:

smbpasswd -a bob
smbpasswd -a sam
smbpasswd -a alice

Erstellung eines gemeinsamen Verzeichnisses

Wichtig bei der Erstellung des gemeinsamen Verzeichnisses zur Zusammenarbeit sind korrekt gesetzte Zugriffsrechte, falls nötig ein gesetztes Sticky-Bit sowie der entsprechende SELinux-Sicherheitskontext.

mkdir /share
chgrp team1 /share
chmod 3770 /share

Das Verzeichnis zur Zusammenarbeit wird mit Hilfe des Befehls mkdir erstellt, chgrp ändert die Hauptgruppe des Verzeichnisses zu team1. Mit chmod werden ausreichende Zugriffsrechte gesetzt, um den Mitgliedern der Gruppe team1 eine Zusammenarbeit zu ermöglichen. Die Bedeutung der oktal angegebenen Unix-Rechte ist hier noch einmal im Detail aufgeschlüsselt:

3   Set Group ID (2) + Sticky Bit (1)

Durch Setzen von Set Group ID (oktal 2) befinden sich neu erstellte Dateien und Verzeichnisse automatisch im Eigentum der Gruppe team1. Das gesetzte Sticky-Bit (oktal 1) bewirkt dass nur der jeweilige Eigentümer einer Datei diese auch löschen darf – obwohl die gesamte Gruppe Schreibrechte hat. Das Sticky-Bit sollte nur dann gesetzt werden wenn diese Funktionalität gewünscht ist.

7 Benutzer: Lesen (4) + Schreiben (2) + Ausführen (1)

7 Gruppe: Lesen (4) + Schreiben (2) + Ausführen (1)

0 Andere: keine Rechte

Benutzer und Gruppe haben Lese- (oktal 4), Schreib- (oktal 2) und execute-Rechte (oktal 1), in Summe also jeweils oktal 7 (rwx). Alle Anderen haben keine gesetzten Rechte, können also weder den Inhalt des Verzeichnisses einsehen, in das Verzeichnis wechseln oder Dateien bzw. Verzeichnisse anlegen oder ändern.

Konfiguration von SELinux

Von Samba freigegebene Verzeichnisse und Dateien müssen den Kontext samba_share_t haben. Zur einfacheren Konfiguration von Sicherheitskontexten ist es empfehlenswert, das Paket policycoreutils-python zu installieren. Dieses stellt unter anderem den Befehl semanage bereit:

yum install  policycoreutils-python
semanage fcontext -a -t samba_share_t /share
restorecon -R /share

Wichtig ist der genaue Syntax bei Aufruf von semanage – kein Forward-Slash nach Angabe des Verzeichnisses (BASH fügt dieses bei Tab-Vervollständigung automatisch an). semanage setzt den Type samba_share_t auf das Verzeichnis /share, restorecon führt diese Änderung dann auch tatsächlich durch.

Ausnahme in die Firewall hinzufügen

Die Firewall wird am unkompliziertesten mit dem Werkzeug system-config-firewall-tui angepasst. Eine Installation erfolgt durch

yum install system-config-firewall-tui

Aufruf der Werkzeugs zur Firewallkonfiguration:

system-config-firewall-tui

–> Anpassen –> „Samba“ markieren –> Schließen

Konfiguration von Samba

Die eigentliche Konfiguration von Samba ist recht einfach. Es wird eine Freigabe mit Angabe des Pfades erstellt und ausreichende Rechte darauf gesetzt.

Zu editieren ist dabei die Konfigurationsdatei /etc/samba/smb.conf. Erforderlich ist eine Anpassung von workgroup und netbios name, sowie das Hinzufügen der eigentlichen Freigabe.

workgroup = MYGROUP
netbios name = MYSERVER

[myshare]
 path = /share
 writable = yes
 valid users = +team1
 create mask = 660
 directory mask = 770
 hosts allow = 192.168.100.
 hosts deny = 192.168.100.103

Mit workgroup wird der Name der Arbeitsgruppe angegeben, netbios name setzt den Rechnernamen, der im Netzwerk angezeigt wird. Unter interfaces kann noch angegeben werden auf welchen Netzwerkschnittstellen Samba erreichbar ist. writable ermöglicht schreibenden Zugriff auf die Freigabe, create mask und directory mask geben an, mit welchen Rechten neu erstellte Dateien bzw. Verzeichnisse angelegt werden. valid users enthält durch Leerzeichen getrennt Benutzer, die Zugriff auf die jeweilige Freigabe haben sollen. Gruppen werden durch vorangestelltes + gekennzeichnet. Hostbasierte Zugriffssteuerung kann mit hosts allow bzw. hosts deny erreicht werden.

Nach erfolgter Anpassung der Konfiguration muss der Netbios-Name Daemon nmb sowie der Samba-Server smb (neu) gestartet werden:

service nmb start
service smb start
chkconfig nmb on
chkconfig smb on

Die Freigabe sollte nun in der Netzwerkumgebung sichtbar sein und von den Benutzern bob, sam und alice zu benutzen sein.

Weiterführende Informationen bieten die Befehle

man samba
man samba_selinux
man smb.conf
tail -f /var/log/messages
tail -f /var/log/audit/audit.log
getsebool -a | grep samba

Samba Server als Active Directory Domänenmitglied

2011/01/06 Kommentare aus

Es ist mittlerweile sehr einfach einen Linux basierten Samba-Server als Domänenmitglied einer Microsoft Active-Directory Struktur zu betreiben. Damit fallen die Kosten für Client-Zugriffslizenzen auf Windows Server weg. Es bleiben die Vorteile einer zentralen Benutzerverwaltung und Single Sign-On durch Windows Server sowie Stabilität und Kostenersparnis durch die Verwendung eines Linux Systems erhalten.

Wichtig bei der Konfiguration von Samba ist der richtig gesetzte Hostname und die Verwendung des Active Directory Servers als DNS und NTP Server. Distributionseigene Tools erledigen den Domänenbeitritt sehr komfortabel (CentOS/Red Hat: authconfig-tui) und meist problemlos, hier soll nur der „harte“ Weg gezeigt werden: Manuelle Anpassung aller Konfigurationsdateien.

Windows Domäne: example.com

Active Directory Server: win2008.example.com

Netbios Name des AD-Servers: win2008

Hostname setzen:

Der Hostname ist entweder manuell in den Dateien /etc/sysconfig/network und /etc/hosts oder durch die entsprechenden Distributionseigenen Tools zu setzen, Im Falle von Red Hat Enterprise Linux durch system-config-network.

hostname suse.example.com

/etc/resolv.conf editieren:

search example.com
nameserver 192.168.10.1            # Active Directory Server

/etc/samba/smb.conf editieren:

[global]
realm = EXAMPLE.COM
security = ads
# nur verwenden wenn nicht automatisch gefunden
password server = win2008

/etc/krb5.conf editieren:

[libdefaults]
Default_realm = EXAMPLE.COM
[realms]
EXAMPLE.COM = {
               kdc = win2008.example.com
               admin_server = win2008.example.com
              }

Samba und Netbios-Name Daemon aktivieren und starten:

chkconfig nmb on        # Dienste bei Systemstart starten
chkconfig smb on       
service nmb start       # Dienste jetzt starten
service smb start

Netbios Namensauflösung testen:

nmblookup win2008

Domain beitreten

Kerberos verlangt eine gleichgeschaltete Systemzeit zur Authentifizierung. Falls die Abweichung mehr als fünf Minuten beträgt schlägt eine Anmeldung fehl. Hier wird die Systemzeit manuell gesetzt, es ist aber empfehlenswert den Linux Server als NTP-Client des Windows Servers zu konfigurieren. Der Windows Active Directory Server stellt auch automatisch einen NTP-Server zu Verfügung. Die Konfiguration des Linux NTP-Clients erfolgt in /etc/ntp.conf.

ntpdate win2008 ; hwclock --systohc    # Zeit synchronisieren, Toleranz 5 min
net ads join –U Administrator –S win2008     # verlangt Domain-Admin Passwort

Domain-Benutzer Accounts aus AD auslesen und lokal anlegen:

Um Dateirechte richtig setzen zu können sollten Domänenbenutzer auch lokal auf dem Samba-Server existieren. Diese dienen nicht zur Anmeldung, benötigen keine Login-Shell, kein Heimatverzeichnis und kein Passwort.

cd /tmp
net rpc user  –U Administrator –S win2008 > users
for i in `cat users` ; do  useradd –d /tmp/tmpADUSER –s /dev/null  $i ; done
cat /etc/passwd | sed s_/tmp/tmpADUSER_/dev/null_g > passwd.tmp
mv passwd.tmp /etc/passwd

Die Unix-Dateirechte der Samba Freigabe müssen den Zugriff erlauben!