Die Benutzer auf diesem System sind vorsichtig und haben ihre Umasks auf den sehr privaten 0077 eingestellt. Die Benutzer möchten jedoch gruppenspezifische Verzeichnisse, in denen sich Dateien befinden kann kopiert werden, um sie explizit nur unter anderen Gruppenmitgliedern zu teilen. Es kann mehrere solcher Freigabeverzeichnisse geben, obwohl jedes für eine Gruppe spezifisch ist.

Das Festlegen des Gruppen-Sticky-Bits in einem bestimmten Verzeichnis, das für die Freigabe verwendet werden soll, reicht nicht aus. Obwohl das Setzen des Sticky-Bits dazu führt, dass der Gruppenbesitz für Dateien, die sich im Verzeichnis befinden, korrekt ist, werden die Berechtigungen für diese Dateien häufig so festgelegt, dass die Dateien nicht gelesen oder bearbeitet werden können, d. H. Nicht tatsächlich gemeinsam genutzt werden können. Sie erscheinen nur in der Verzeichnisliste. Dies liegt daran, dass einige Benutzer entweder nicht daran denken oder nicht wissen, wie sie die erforderlichen Gruppenberechtigungsanpassungen manuell vornehmen sollen, um Lesen und Schreiben zu ermöglichen. Wir können ihnen eine Pause geben, weil Benutzer schließlich keine Administratoren sind. acls kann verwendet werden, um anzugeben, dass eine bestimmte Gruppe Zugriff auf die Dateien im Freigabeverzeichnis hat, unabhängig davon, wie die Gruppenberechtigungen ohne acls gewesen wären. Das ist die perfekte Lösung, funktioniert aber nicht ganz.

Im Folgenden lautet die freigegebene Gruppe „customer_gateway“ und der Beispielbenutzer, der versucht, eine Datei freizugeben, „svw“. Wie im Transkript zu sehen ist, ist der svw-Benutzer Mitglied der Gruppe customer_gateway. Das Verzeichnis, in dem die Freigabe erfolgen soll, wird auch als „customer_gateway /“

bezeichnet. Im Folgenden wird acls verwendet. Ich habe die Gruppenberechtigungen, die Standardgruppenberechtigungen, die Maske und die Standardmaske festgelegt. Es funktioniert gut für Dateien, die im Verzeichnis erstellt wurden, oder für Dateien, die über cat (oder tar) dorthin verschoben wurden, aber seltsamerweise nicht für Dateien, die dort „cp“ sind:

# rm -r customer_gateway/ # umask 0077 # cat ~/script1 mkdir customer_gateway chown :customer_gateway customer_gateway/ chmod g+rwx customer_gateway/ setfacl -m group:customer_gateway:rwX customer_gateway/ setfacl -m d:group:customer_gateway:rwX customer_gateway/ setfacl -m m::rwX customer_gateway/ setfacl -m d:m::rwX customer_gateway/ getfacl customer_gateway cd customer_gateway touch cga cat << EOF > cgb c g b EOF ls -l # . ~/script1 # file: customer_gateway # owner: root # group: customer_gateway user::rwx group::rwx group:customer_gateway:rwx mask::rwx other::--- default:user::rwx default:group::rwx default:group:customer_gateway:rwx default:mask::rwx default:other::--- total 4 -rw-rw----+ 1 root root 0 Mar 2 20:43 cga -rw-rw----+ 1 root root 6 Mar 2 20:43 cgb # su - svw /home/svw/bin:/usr/local/bin:/usr/bin:/bin (note umask is 0077) > cd /share/customer_gateway/ > groups svw adm dip video plugdev google-sudoers customer_gateway > cat >> cga e f g > cat > cgc c g c > ls -l total 12 -rw-rw----+ 1 root root 6 Mar 2 20:44 cga -rw-rw----+ 1 root root 6 Mar 2 20:43 cgb -rw-rw----+ 1 svw svw 6 Mar 2 20:44 cgc > ls ~/dat ta tb tc > cat ~/dat/ta > ta > cp ~/dat/tb tb > ls -l total 20 -rw-rw----+ 1 root root 6 Mar 2 20:44 cga -rw-rw----+ 1 root root 6 Mar 2 20:43 cgb -rw-rw----+ 1 svw svw 6 Mar 2 20:44 cgc -rw-rw----+ 1 svw svw 4 Mar 2 20:45 ta -rw-------+ 1 svw svw 4 Mar 2 20:45 tb > getfacl ta # file: ta # owner: svw # group: svw user::rw- group::rwx #effective:rw- group:customer_gateway:rwx #effective:rw- mask::rw- other::--- > getfacl tb # file: tb # owner: svw # group: svw user::rw- group::rwx #effective:--- group:customer_gateway:rwx #effective:--- mask::--- other::--- > 

Dies zeigt, dass eine Datei, die im Verzeichnis erstellt wird, die Standardberechtigungen erhält und gemeinsam genutzt werden kann. Aber Benutzer erstellen ihre Dateien nicht immer dort, normalerweise kopieren sie sie dort.

Aber eine Kopie zu erstellen ist dasselbe, denn um eine Kopie zu erstellen, müssen wir zuerst eine neue Datei erstellen. Wir sprechen über Hier handelt es sich um eine einfache Kopie, nicht um eine Kopie der Aufbewahrungsberechtigung. Dies entspricht dem folgenden Formular, das übrigens funktioniert und eine Datei kopiert, die unabhängig von den ursprünglichen Gruppenberechtigungen im Verzeichnis freigegeben werden kann:

cat < data.in > shared/data.out 

funktioniert einwandfrei, Piping durch tar funktioniert auch, aber die Form

cp data.in shared/data.out 

schlägt fehl. Die cat ed-Datei erhält die Standardmaske und die Standardberechtigungen. Die cp ed-Datei behält ihre Berechtigungen in der ACL-Maske und den Gruppenberechtigungen bei, als ob dies der Fall wäre a cp -p (aber es war nicht „t“), und daher lesen sich die effektiven Berechtigungen wie die Originaldatei, nicht wie die, auf die die acls eingestellt wurden.

Als zweiten Versuch führte ich dieses Experiment mit dem aus Gruppe klebriges Bit, chmod g + rwxs, zusammen mit dem facl ch anges und erhielt genau die gleichen Ergebnisse. Obwohl die Verzeichnislisten aufgrund des Gruppeneigentums, der für alle freigegebenen Dateien angezeigt wird, hübscher sind. Ich habe es auch ausgeführt, wobei nur das Gruppen-Sticky-Bit gesetzt wurde, ohne das Setfacl. Es hatte auch das gleiche Ergebnis für kopierte Dateien (so dass Facls für ein Verzeichnis, in das Dateien kopiert werden, um gemeinsam genutzt zu werden, ziemlich nutzlos aussehen).

Auf welcher Grundlage und mit welcher Begründung unterscheiden Linux-Facls zwischen verschiedenen Formen von Daten erstellen? Warum cp zwingen, Berechtigungen beizubehalten, wenn es nicht dazu aufgefordert wurde? Welcher Grund würde die Verwirrung rechtfertigen, die durch diese Unterscheidung zwischen Katze und Rohrleitungen durch Teerarbeiten verursacht wird, aber cp funktioniert nicht? Fehlt mir eine magische Beschwörung, die diese Unterscheidung treffen würde? verdampfen?

Ist diese Zusammenfassung korrekt: Mit Facls können Sie den Besitz für die Freigabe von Dateien überwinden. Dadurch werden Berechtigungen beim „Erstellen“ von Dateien zulässiger als mit der Umask, es sei denn, diese Erstellung ist auf den Befehl cp und zurückzuführen aus gutem Grund, weil … weil warum?

Kommentare

  • Welches Betriebssystem (Linux-Distribution und -Version) und welches Dateisystem verwenden Sie? Wäre es in Ordnung, Benutzer dazu zu bringen, cat zu verwenden, möglicherweise über ein spezielles Shellscript für diesen Zweck?
  • Beabsichtigen Sie, dass jeder Benutzer in der Gruppe Änderungen oder Löschungen vornehmen kann Jede Datei, oder sollte nur der Ersteller über solche Berechtigungen verfügen? Mit anderen Worten, nur Leseberechtigungen (und möglicherweise Berechtigungen ausführen) für das o Weitere Benutzer.
  • Debian 10. Da die Dateierstellung funktioniert, habe ich ‚ Kopien durch tar geleitet. Ich ‚ packe das als proj_cp-Befehl in / usr / local / bin. Wenn ein Benutzer jedoch einen speziellen Kopierbefehl verwenden muss, kann er einfach das Gruppen-Sticky-Bit ohne Facls verwenden und die Berechtigungen festlegen. Ich möchte wissen, wie man die acls so einstellt, dass cat tar und cp funktionieren.Ich ‚ denke, dass es ein Problem mit acls mit cp gibt, da sie das cp-p-Verhalten anstelle des cp-Verhaltens ausführen. Ich ‚ freue mich darauf, von Berechtigungsexperten zu hören.
  • Gruppenfreigabe ist ein wiederkehrendes Problem mit Variationen, wie Sie hervorheben. In diesem Fall haben Softwareentwickler Zugriff auf das Testversionsverzeichnis. Es ist ihre, mit der sie Mist machen können. Sie können in diesem Verzeichnis arbeiten, pushen, ziehen, in der virtuellen Umgebung installieren usw. Das Problem tritt auf, wenn sie Dinge aus einem anderen Bereich kopieren, in dem sie gearbeitet haben, und ihre Aufgaben nicht mit Gruppenberechtigungen festgelegt sind. Es ist verwirrend für sie, weil das Erstellen und Kopieren von Dateien mit tar gut funktioniert. Es ist auch lustig, dass ich ihnen ein Kopierskript geben muss, das genau das tut, was cp tut. ‚ acls ‚ sie sind magisch Ich sage LOL
  • Ich bin kein Berechtigungsexperte, aber ich hoffe, dass meine Fragen und Ihre Antworten können den Experten helfen, relevante Antworten zu geben.

Antwort

Diese Tatsache, ein Verzeichnis zu erstellen, in dem Benutzer können ziemlich einfach darauf zugreifen.

  • Zuerst müssen Sie einen geeigneten Ort finden, um dieses Verzeichnis zu erstellen. Ich empfehle, es unter einem Verzeichnis zu erstellen, auf das zugegriffen werden kann an alle (für den Moment). Verwenden Sie den Befehl sudo mkdir , um Ihr neues Verzeichnis zu erstellen.

  • Zweitens Wenn Sie eine Gruppe erstellen müssen, ist eine Gruppe einfach eine Sammlung von Benutzern, die aufgerundet werden, um bestimmte Teile eines Linux-Systems einzuschränken oder darauf zuzugreifen. Möglicherweise haben Sie Gruppen gesehen, als Sie den Befehl ls -l eingegeben haben, der Folgendes auflistet:

rwxrwxrwx 3 Root-Administratoren 4736 24. Oktober 12:32 File1.doc

Der Teil, der root sagt, ist der Eigentümer und ** admins ** ist die Gruppe, der die Datei gehört. Gruppen bieten eine einfache Möglichkeit, bestimmten Personen das Anzeigen von Dateien zu ermöglichen. Um eine Gruppe zu erstellen, geben Sie „sudo groupadd“ ein. Dies ist die Gruppe, die für das Verzeichnis verwendet wird.

  • Sobald die Gruppen erstellt wurden, können Sie Benutzer hinzufügen, über die Sie auf das Verzeichnis zugreifen möchten Verwenden Sie den folgenden Befehl sudo adduser Auf diese Weise können Sie Benutzer hinzufügen, mit denen Sie überprüfen können, ob sich der Benutzer in der Gruppe mit der Gruppe befindet Befehl.

Navigieren Sie anschließend zu dem von Ihnen erstellten Verzeichnis und setzen Sie die Gruppenberechtigung auf 7 (rwx). Denken Sie daran, dass Sie diese an Ihre Einstellungen anpassen können, 7 jedoch den Benutzern der Gruppe die vollständigen Berechtigungen erteilt In das Verzeichnis können Sie dies tun, indem Sie „sudo chmod 770“ eingeben.

Als Nächstes müssen Sie den Gruppeneigentum des Verzeichnisses ändern, sodass der Gruppeneigentümer des Verzeichnisses die Gruppe ist, die Sie erstellt haben mit dem folgenden Befehl „sudo chown -R: Gruppenname.

Sobald dies alles erledigt ist, können Sie der Gruppe jetzt hinzufügen, wen Sie möchten, und sie haben Zugriff auf das Kopieren und Freigeben von Dateien, solange th Sie befinden sich in dieser bestimmten Gruppe, um auf das Verzeichnis zuzugreifen. Bitte lassen Sie mich wissen, wenn Sie dies hilfreich fanden !!!!!!

Kommentare

  • Danke, ich habe den ursprünglichen Beitrag geklärt, um zu erklären, warum ich es nicht getan habe ‚ Verwenden Sie diesen manuellen Ansatz nicht.

Antwort

I. würde alle acl „s entfernen und nur Benutzer- und Gruppenberechtigungen verwenden. Dann chmod 777 den Ordner, auf den jeder Zugriff haben soll. Dann testen Sie Ihren Zugriff.

Dann chmod 770 Der Ordner testet erneut auf den Zugriff.

Wenn dies so funktioniert, wie es sein sollte, fügen Sie acls nacheinander wieder hinzu.

Wenn sie keine Ausführungsberechtigungen benötigen, können Sie sie mit dem Ordnernamen chmod 660 noch niedriger auf rw *, rx *, *** reduzieren.

Denken Sie für den Zeitraum, in dem Sie keine Berechtigungen für acl und chmod 777 haben, daran Der Ordner ist für alle offen, lassen Sie ihn also nicht so.

Kommentare

  • Nicht alle, nur Personen in einer bestimmten Gruppe. Ich könnte das Gruppen-Sticky-Bit im Verzeichnis setzen. Das Problem ist, dass Benutzer dann Dateien in das Verzeichnis einfügen und die Gruppe korrekt ist, aber entweder ‚ nicht wissen oder vergessen, den Gruppenzugriff festzulegen. Mit acls kann angegeben werden, dass eine bestimmte Gruppe unabhängig von ihren Gruppenberechtigungen Zugriff auf die Dateien hat. Das ist die perfekte Antwort. Das Problem ist, dass acls eine Maske haben und cp die acl-Maske so löscht, dass sie mit der umask des Benutzers übereinstimmt, sodass die Dateien aufgrund der effektiven Berechtigungen nicht gelesen werden können.

Antwort

Ich habe es versucht. Es scheint, dass die Umask die Gruppenberechtigungen überprüft, da die Gruppenberechtigungen die Maske der ACL sind. Es blockiert alle Gruppen und ACLs.

Eine Problemumgehung besteht darin, die Umask weniger restriktiv zu gestalten.Um dies sicher zu tun, müssen Sie für jeden Benutzer eine Gruppe hinzufügen und diese Gruppe zur Standardgruppe machen. (Siehe Warum hat jeder Benutzer seine eigene Gruppe? )

Dies ist nicht ideal, da immer noch unterschiedliche Umasks vorliegen (g = rx und g = rwx). Diese Strategie macht nur keine Gruppenberechtigungen überflüssig.

Kommentare

  • Ja, das habe ich getan, ich habe stattdessen Benutzermasken auf 007 gesetzt von 077 als Problemumgehung. Es ist jedoch nicht ´ nicht perfekt, da viele Dateien immer noch weniger Berechtigungen haben und kopiert werden. Ich wollte hier lernen, warum sich cp so verhält. Es scheint mir, dass dies das cp-p-Verhalten sein sollte. Ich hatte gehofft, dass jemand hier es erklären könnte.

Antwort

Alle bisherigen Antworten haben Ratschläge gegeben, wie zum Freigeben von Dateien über Gruppenverzeichnisse. Ich denke, Non hat Ihre Hauptfrage beantwortet: Warum verhält sich cp a b so, als ob cp -p a b angegeben wurde? Die Manpage spricht zwar nicht darüber, aber texinfo enthält die Details. info coreutils "cp invocation" zeigt:

 ‘-p’ ‘--preserve[=ATTRIBUTE_LIST]’ Preserve the specified attributes of the original files. ... ... In the absence of this option, the permissions of existing destination files are unchanged. Each new file is created with the <=== mode of the corresponding source file minus the set-user-ID, <=== set-group-ID, and sticky bits as the create mode; the operating system then applies either the umask or a default ACL, possibly resulting in a more restrictive file mode. ... 

Wenn das Ziel vorhanden ist, wird der Inhalt ersetzt, die Modusbits jedoch nicht geändert. Wenn das Ziel nicht vorhanden ist, werden Modusbits von der Quelle kopiert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.