Linux/SELinux/04/10 Labels beibehalten: Unterschied zwischen den Versionen
K Textersetzung - „Kategorie:SELinux“ durch „Kategorie:Linux/SELinux“ |
K Dirkwagner verschob die Seite SELinux/DOC/04 Arbeiten mit SELinux/SELinux-Labels beibehalten nach Linux/SELinux/DOC/04 Arbeiten mit Linux/SELinux/Linux/SELinux-Labels beibehalten, ohne dabei eine Weiterleitung anzulegen: Textersetzung - „SELinux“ durch „Linux/SELinux“ |
(kein Unterschied)
| |
Version vom 26. März 2026, 11:14 Uhr
SELinux-Labels beibehalten
Diese Abschnitte beschreiben, was mit SELinux-Kontexten geschieht, wenn Dateien und Verzeichnisse kopiert, verschieben und archivieren von Dateien und Verzeichnissen
- Außerdem wird erklärt, wie Kontexte beim Kopieren und Archivieren beibehalten werden können
Kopieren von Dateien und Verzeichnissen
Wenn eine Datei oder ein Verzeichnis kopiert wird, wird eine neue Datei oder ein neues Verzeichnis erstellt, falls diese noch nicht existieren
- Der Kontext dieser neuen Datei oder dieses neuen Verzeichnisses basiert auf den Standard-Labeling-Regeln und nicht auf dem Kontext der ursprünglichen Datei oder des ursprünglichen Verzeichnisses, es sei denn, es wurden Optionen verwendet, um den ursprünglichen Kontext beizubehalten
Beispielsweise werden Dateien, die in Benutzer-Home-Verzeichnissen erstellt werden, mit dem Typ user_home_t gekennzeichnet
touch file1
$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
Wenn eine solche Datei in ein anderes Verzeichnis kopiert wird, beispielsweise /etc, wird die neue Datei gemäß den Standard-Kennzeichnungsregeln für /etc erstellt
- Das Kopieren einer Datei ohne zusätzliche Optionen bewahrt möglicherweise den ursprünglichen Kontext nicht
ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
sudo cp file1 /etc/
$ ls -Z /etc/file1
-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
Wenn file1 nach /etc kopiert wird und /etc/file1 nicht existiert, wird /etc/file1 als neue Datei erstellt
- Wie im obigen Beispiel gezeigt, wird /etc/file1 gemäß den Standard-Labeling-Regeln mit dem Typ etc_t gekennzeichnet
Wenn eine Datei über eine bereits vorhandene Datei kopiert wird, bleibt der Kontext der vorhandenen Datei erhalten, es sei denn, der Benutzer hat cp-Optionen angegeben, um den Kontext der Originaldatei zu erhalten, wie z. B. --preserve=context
- Die SELinux-Richtlinie kann verhindern, dass Kontexte beim Kopieren erhalten bleiben
- Kopieren ohne Beibehaltung von SELinux-Kontexten
Dieses Verfahren zeigt, dass beim Kopieren einer Datei mit dem Befehl cp, und keine Optionen angegeben werden, der Typ vom Zielverzeichnis, dem übergeordneten Verzeichnis, übernommen wird
- Erstellen einer Datei im Home-Verzeichnis eines Benutzers
- Die Datei wird mit dem Typ user_home_t gekennzeichnet
touch file1 ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
- Das Verzeichnis /var/www/html/ ist mit dem Typ httpd_sys_content_t gekennzeichnet, wie der folgende Befehl zeigt
ls -dZ /var/www/html/drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
- Wenn file1 nach /var/www/html/ kopiert wird, erbt sie den Typ httpd_sys_content_t
sudo cp file1 /var/www/html/ ls -Z /var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
- Beibehaltung von SELinux-Kontexten beim Kopieren
Dieses Verfahren zeigt, wie man die Option --preserve=context verwendet, um Kontexte beim Kopieren beizubehalten. # Erstellen einer Datei im Home-Verzeichnis eines Benutzers
- Die Datei wird mit dem Typ user_home_t gekennzeichnet
touch file1 ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1# Das Verzeichnis /var/www/html/ ist mit dem Typ httpd_sys_content_t gekennzeichnet, wie der folgende Befehl zeigt ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/# Durch die Verwendung der Option --preserve=context bleiben die SELinux-Kontexte bei Kopiervorgängen erhalten* Wie unten gezeigt, wurde der Typ user_home_t von file1 beibehalten, als die Datei nach /var/www/html/ kopiert wurde sudo cp --preserve=context file1 /var/www/html/ ls -Z / var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1; Kopieren und Ändern des KontextsDieses Verfahren zeigt, wie man die Option --context verwendet, um den Kontext der Zielkopie zu ändern* Das folgende Beispiel wird im Home-Verzeichnis des Benutzers ausgeführt# Erstellen Sie eine Datei im Home-Verzeichnis eines Benutzers* Die Datei ist mit dem Typ user_home_t gekennzeichnet touch file1 ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1# Verwenden Sie die Option --context, um den SELinux-Kontext zu definieren cp --context=system_u:object_r:samba_share_t:s0 file1 file2# Ohne --context würde file2 mit dem unconfined_u:object_r:user_home_t-Kontext gekennzeichnet ls -Z file1 file2-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1-rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2; Kopieren einer Datei über eine vorhandene DateiDieses Verfahren zeigt, dass beim Kopieren einer Datei über eine vorhandene Datei der Kontext der vorhandenen Datei beibehalten wird, sofern keine Option zur Beibehaltung von Kontexten verwendet wird. # Erstellen Sie als root eine neue Datei, file1, im Verzeichnis /etc* Wie unten gezeigt, wird die Datei mit dem Typ etc_t gekennzeichnet sudo touch /etc/file1 ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1# Erstellen Sie eine weitere Datei, file2, im Verzeichnis [ [/tmp]]-Verzeichnis* Wie unten gezeigt, wird die Datei mit dem Typ user_tmp_t gekennzeichnet touch /tmp/file2 ls -Z /tmp/file2-rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
sudo cp /tmp/file2 /etc/file1
- Nach dem Kopieren zeigt der folgende Befehl, dass file1 mit dem Typ etc_t gekennzeichnet ist, nicht mit dem Typ user_tmp_t aus /tmp/file2, der /etc/file1 ersetzt hat
ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
- Wichtig
Kopieren Sie Dateien und Verzeichnisse, anstatt sie zu verschieben
- Dies trägt dazu bei, dass sie mit den richtigen SELinux-Kontexten gekennzeichnet werden
- Falsche SELinux-Kontexte können verhindern, dass Prozesse auf solche Dateien und Verzeichnisse zugreifen
Verschieben von Dateien und Verzeichnissen
Dateien und Verzeichnisse behalten ihren aktuellen SELinux-Kontext bei, wenn sie verschoben werden
- In vielen Fällen ist dieser für den Zielort, an den sie verschoben werden, falsch
- Das folgende Beispiel zeigt das Verschieben einer Datei aus dem Home-Verzeichnis eines Benutzers in das Verzeichnis /var/www/html/, das vom Apache-HTTP-Server verwendet wird
- Da die Datei verschoben wird, erbt sie nicht den richtigen SELinux-Kontext
- Verschieben von Dateien und Verzeichnissen
- Wechseln Sie in Ihr Home-Verzeichnis und erstellen Sie dort eine Datei
- Die Datei ist mit dem Typ user_home_t gekennzeichnet
touch file1
ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
- Geben Sie den folgenden Befehl ein, um den SELinux-Kontext des Verzeichnisses /var/www/html/ anzuzeigen
ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd _sys_content_t:s0 /var/www/html/
Standardmäßig ist /var/www/html/ mit dem Typ httpd_sys_content_t gekennzeichnet
- Dateien und Verzeichnisse, die unter /var/www/html/ erstellt werden, erben diesen Typ und sind somit mit diesem Typ gekennzeichnet
- Verschieben Sie als root file1 nach /var/www/html/
- Da diese Datei verschoben wird, behält sie ihren aktuellen Typ user_home_t
sudo mv file1 /var/www/html/
sudo ls -Z /var/www/html/file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1
Standardmäßig kann der Apache-HTTP-Server keine Dateien lesen, die mit dem Typ user_home_t ] gekennzeichnet sind
- Wenn alle Dateien, aus denen eine Webseite besteht, mit dem Typ user_home_t gekennzeichnet sind oder einem anderen Typ, den der Apache-HTTP-Server nicht lesen kann, wird der Zugriff verweigert, wenn versucht wird, über Webbrowser wie ‚‘'Mozilla Firefox'‚‘
- Wichtig
Das Verschieben von Dateien und Verzeichnissen mit dem Befehl mv kann zu einem falschen SELinux-Kontext führen, wodurch Prozesse wie der Apache-HTTP-Server und Samba daran gehindert werden, auf solche Dateien und Verzeichnisse zuzugreifen
Überprüfen des Standard-SELinux-Kontexts
Verwenden Sie das Dienstprogramm matchpathcon, um zu überprüfen, ob Dateien und Verzeichnisse den richtigen SELinux-Kontext haben
- Dieses Dienstprogramm fragt die Systemrichtlinie ab und gibt dann den mit dem Dateipfad verbundenen Standard-Sicherheitskontext aus.[6] Das folgende Beispiel zeigt, wie man mit matchpathcon überprüft, ob Dateien im Verzeichnis /var/www/html/ korrekt gekennzeichnet sind
- Überprüfen des Standard-SELinux-Kontexts mit matchpathcon'‚‘
- Erstellen Sie als Root-Benutzer drei Dateien (file1, file2 und file3) im Verzeichnis /var/www/html/
- Diese Dateien erben den Typ httpd_sys_content_t von /var/www/html/
sudo touch /var/www/html/file{1,2,3}
sudo ls -Z /var/www/html/
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- root root unconfined_u: object_r:httpd_sys_content_t:s0 file3
- Ändern Sie als root den Typ von file1 in samba_share_t
- Beachten Sie, dass der Apache-HTTP-Server keine Dateien oder Verzeichnisse lesen kann, die mit dem Typ samba_share_t ] gekennzeichnet sind
sudo chcon -t samba_share_t /var/www/html/file1
- Die Option -V von matchpathcon vergleicht den aktuellen SELinux-Kontext mit dem korrekten Standardkontext in der SELinux-Richtlinie
- Geben Sie den folgenden Befehl ein, um alle Dateien im Verzeichnis /var/www/html/ zu überprüfen
matchpathcon -V /var/www/html/ * /var/www/html/file1 hat den Kontext unconfined_u:object_r:samba_share_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein /var/www/html/file2 verifiziert /var/www/html/file3 verifiziert
Die folgende Ausgabe des Befehls matchpathcon erklärt, dass file1 mit dem Typ samba_share_t gekennzeichnet ist, aber mit dem Typ httpd_sys_content_t gekennzeichnet sein sollte
/var/www/html/file1 hat den Kontext unconfined_u:object_r:samba_share_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein
Um das Label-Problem zu beheben und dem Apache-HTTP-Server als root Zugriff auf file1 zu gewähren, verwenden Sie das Dienstprogramm restorecon
sudo restorecon -v /var/www/ html/file1 restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t: s0
Dateien mit tar archivieren
Das Dienstprogramm tar behält standardmäßig keine erweiterten Attribute bei
- Da SELinux-Kontexte in erweiterten Attributen gespeichert sind, können Kontexte beim Archivieren von Dateien verloren gehen
- Verwenden Sie den Befehl tar --selinux, um Archive zu erstellen, die Kontexte beibehalten, und um Dateien aus den Archiven wiederherzustellen
- Wenn ein tar Archiv Dateien ohne erweiterte Attribute enthält oder wenn Sie möchten, dass die erweiterten Attribute den Systemstandardwerten entsprechen, verwenden Sie das Dienstprogramm restorecon
tar -xvf ‚'archive.tar‘' | restorecon -f -
Beachten Sie, dass Sie je nach Verzeichnis möglicherweise Root-Rechte benötigen, um das [ [restorecon]]
Das folgende Beispiel zeigt, wie ein tar-Archiv erstellt wird, das SELinux-Kontexte beibehält
- Erstellen eines tar-Archivs
- Wechseln Sie in das Verzeichnis /var/www/html/ und zeigen Sie dessen SELinux-Kontext an
cd /var/www/html/
ls -dZ /var/www/html/
drwxr-xr-x
- root root system_u:object_r:httpd_sys_content_t:s0
- Erstellen Sie als Root drei Dateien (file1, [ [file2] und file3) im Verzeichnis /var/www/html/
- Diese Dateien erben den Typ httpd_sys_content_t vom Verzeichnis /var/www/html/
html]# touch file{1,2,3}
ls -Z /var/www/html/
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw -r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
- Verwenden Sie die Option --selinux, um den SELinux-Kontext beizubehalten
sudo tar --selinux -cf test.tar file{1,2,3}
- Erstellen Sie als root ein neues Verzeichnis namens test/ und gewähren Sie anschließend allen Benutzern vollen Zugriff darauf
sudo mkdir /test sudo chmod 777 /test/
cp /var/www/html/test.tar /test/
- Wechseln Sie in das Verzeichnis test/
- Geben Sie in diesem Verzeichnis den folgenden Befehl ein, um das tar-Archiv zu entpacken
- Geben Sie die Option --selinux erneut an, da sonst der SELinux-Kontext auf default_t geändert wird
cd /test/
tar --selinux -xvf test.tar
- SELinux-Kontexte anzeigen
- Der Typ httpd_sys_content_t wurde beibehalten und nicht in default_t geändert, was geschehen wäre, wenn --selinux nicht verwendet worden wäre
test]$ ls -lZ /test/ -rw -r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t: s0 file3 -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.tar
- Wenn das Verzeichnis test/ nicht mehr benötigt wird, geben Sie als root den folgenden Befehl ein, um es sowie alle darin enthaltenen Dateien zu entfernen
sudo rm -ri /test/
Weitere Informationen zu tar, wie beispielsweise die Option - -xattrs, die alle erweiterten Attribute beibehält
Dateien mit star archivieren
Das Dienstprogramm star behält standardmäßig keine erweiterten Attribute bei
- Da SELinux-Kontexte in erweiterten Attributen gespeichert sind, können Kontexte beim Archivieren von Dateien verloren gehen
- Verwenden Sie den Befehl star -xattr -H=exustar, um Archive zu erstellen, die Kontexte beibehalten
- Das star-Paket ist standardmäßig nicht installiert
- Um star zu installieren, führen Sie als Root-Benutzer den Befehl yum install star aus
Das folgende Beispiel zeigt die Erstellung eines star-Archivs, das SELinux-Kontexte beibehält
- Erstellen eines [ [star]]-Archiv
- Erstellen Sie als Root drei Dateien (file1, file2 und file3) im Verzeichnis /var/www/html/
- Diese Dateien erben den Typ httpd_sys_content_t von /var/www/html/
sudo touch /var/www/html/file{1,2,3}
sudo ls -Z / var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
- Wechseln Sie in das Verzeichnis /var/www/html/
- Geben Sie in diesem Verzeichnis als root den folgenden Befehl ein, um ein star-Archiv mit dem Namen test.star zu erstellen
cd /var/www/html
html]# star -xattr -H=exustar -c -f=test.star file{1,2,3}
star
1 Blöcke + 0 Bytes (insgesamt 10240 Bytes = 10,00 k)
- Erstellen Sie als Root ein neues Verzeichnis namens test/ und gewähren Sie allen Benutzern vollständigen Zugriff darauf
sudo mkdir /test
sudo chmod 777 /test/
cp /var/www/html/test.star /test/
- Wechseln Sie in das Verzeichnis test/
- Sobald Sie sich in diesem Verzeichnis befinden, geben Sie den folgenden Befehl ein, um das star-Archiv zu extrahieren
cd /test/
test]$ star -x -f=test.star star
1 Blöcke + 0 Bytes (insgesamt 10240 Bytes = 10,00 kB)
- Zeigen Sie die SELinux-Kontexte an
- Der Typ httpd_sys_content_t wurde beibehalten und nicht in [ [default_t] geändert worden wäre, was geschehen wäre, wenn die Option -xattr -H=exustar nicht verwendet worden wäre
ls -lZ /test/ -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r --r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file3 -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.star
- Wenn das Verzeichnis test/ Verzeichnis nicht mehr benötigt wird, geben Sie als root den folgenden Befehl ein, um es sowie alle darin enthaltenen Dateien zu entfernen
sudo rm -ri /test/
- Wenn star nicht mehr benötigt wird, entfernen Sie das Paket als root
sudo yum remove star
Weitere Informationen zu star finden Sie auf der Handbuchseite star(1)