Warum sollte in einem Verzeichnis das Sticky-Bit ohne das ausführbare Bit gesetzt sein?

7

In Ubuntu 14.04, die Auflistung der Inhalt des Verzeichnisses /var/spool/cronmit ls -lbietet die folgenden Berechtigungen für die Verzeichnisse innerhalb (irrelevant Spalten snipped):

drwxrwx--T daemon daemon atjobs
drwxrwx--T daemon daemon atspool
drwx-wx--T root crontab crontabs

Welchen Zweck hat das Setzen eines Sticky-Bits in einem Verzeichnis ohne das ausführbare Bit?

Q23
quelle
In diesen Verzeichnissen sind jedoch ausführbare Bits gesetzt.
user253751

Antworten:

9

Aus der Handbuchseite für sticky:

STICKY DIRECTORIES

Ein Verzeichnis, dessen "Sticky Bit" gesetzt ist, wird zu einem Nur-Anhängen-Verzeichnis oder genauer zu einem Verzeichnis, in dem das Löschen von Dateien eingeschränkt ist. Eine Datei in einem Sticky-Verzeichnis kann von einem Benutzer nur entfernt oder umbenannt werden, wenn der Benutzer über Schreibrechte für das Verzeichnis verfügt und der Benutzer der Eigentümer der Datei, der Eigentümer des Verzeichnisses oder der Superuser ist. Diese Funktion wird sinnvollerweise auf Verzeichnisse wie / tmp angewendet, die öffentlich beschreibbar sein müssen, den Benutzern jedoch die Lizenz zum willkürlichen Löschen oder Umbenennen der Dateien der jeweils anderen Benutzer verweigern sollten.

Jeder Benutzer kann ein Sticky-Verzeichnis erstellen. Siehe chmod (1) für Details zum Ändern von Dateimodi.

Das Ergebnis ist, dass nur der Eigentümer einer Datei in einem Sticky-Verzeichnis die Datei entfernen kann. Bei den cronTabellen bedeutet dies, dass ich dort nicht hineingehen und Ihre Cron-Tabelle entfernen und durch eine meiner Auswahl ersetzen kann , obwohl ich möglicherweise Schreibzugriff auf das Verzeichnis habe. Aus diesem Grund /tmpist auch klebrig.

DopeGhoti
quelle
1
Einverstanden, aber ich denke, was das OP verwirrt, ist, warum dies in einem Verzeichnis geschehen würde, das nicht weltweit beschreibbar ist. Nur der Benutzer daemonund die Mitglieder dieser Gruppe könnten atjobssowieso etwas tun . Ich gehe davon aus, dass die Entwickler an Fälle gedacht haben, in denen mehr als dieser Benutzer zur daemonGruppe gehörte. Ich kann mir keinen anderen Grund dafür vorstellen.
Terdon
In Fällen, in denen das Verzeichnis nicht weltweit beschreibbar oder ausführbar ist, ist es lediglich eine zusätzliche Sicherheitsebene, falls dies durch einen Fehler geändert wird chmod a+wx. Dies ist eine Spekulation, aber es kann vorkommen, dass das Sticky-Bit in historischen Distributionsversionen platziert wurde und der Eigentümer in jüngerer Zeit gewechselt hat. In diesen Fällen gibt es keinen Grund, kein Sticky-Set zu verwenden. "Wenn es also nicht kaputt ist, brechen Sie es nicht ".
DopeGhoti
1
@terdon trifft den Nagel auf den Kopf. Ich hatte den Eindruck, dass das Sticky-Bit in jedem Verzeichnis, das nicht für die Welt beschreibbar war, ziemlich nutzlos war und dass ein großes S oder T für die gesetzten {u, g} -ID-Bits und das Sticky-Bit eine Warnung war, um Ihren Kopf zu bekommen raus und benutze sie richtig.
Q23
@ Q23 Wenn der Eigentümer oder die Gruppe keine Ausführungsberechtigung hat, verhindert dies nicht, dass andere von den Bits setuid oder setgid profitieren. Sicher, das Entfernen Ihrer eigenen Ausführungsberechtigung aus Ihrer eigenen Datei wäre seltsam, aber ich denke nicht, dass dies die Funktion der gesetzten [ug] ID-Bits verhindert.
Ilkkachu
1
Wenn das Verzeichnis für Gruppen beschreibbar ist, bedeutet dies, dass Gruppenmitglieder die Dateien der anderen nicht entfernen können.
Barmar
7

Welchen Zweck hat das Setzen eines Sticky-Bits in einem Verzeichnis ohne das ausführbare Bit?

drwx-wx--T 2 root crontab 4096 Apr 24 15:00 /var/spool/cron/crontabs/

Was Sie sehen, ist bei Debian ähnlich. Für das Verzeichnis ist das ausführbare Bit für den Eigentümer und die Gruppe festgelegt. Nur für den Besitzer macht Sticky nicht viel Sinn, da dies per Definition nur ein Benutzer ist (und der Besitzer Sticky sowieso überschreiben kann). Für die Gruppe ist es jedoch genauso wichtig wie für weltweit beschreibbare Verzeichnisse /tmp, nämlich dass normale Benutzer keine Dateien entfernen können, die anderen Benutzern gehören.

Aber warum sollte jemand Mitglied der Gruppe sein crontab?

Natürlich, um ihre Crontabs modifizieren zu können! Debian crontabarbeitet mit setgid-Berechtigungen, sodass jeder normale Benutzer mit seiner eigenen UID und der GID von auf dieses Verzeichnis zugreifen kann crontab. Das ist etwas sicherer, als sie crontabmit festgelegten UID- Berechtigungen ausführen zu lassen, da die Benutzer voneinander getrennt bleiben .

-rwxr- s r-x 1 root crontab 36008 11. Juni 2015 / usr / bin / crontab

Normalerweise sind die Dateien im Verzeichnis Eigentum der jeweiligen Eigentümer und werden von diesen benannt. Wenn crontabnur die eigene Crontab des Benutzers entfernt werden kann, sollte es kein Problem geben. Wenn die Dateiberechtigungen so eingerichtet sind, schützt dies vor Fehlern im Programm und macht die tatsächliche UID des zugreifenden Benutzers relevant, nicht nur dessen Namen .

ilkkachu
quelle