Festlegen des Standardbenutzernamens und der Standardgruppe für Dateien im Verzeichnis

12

Mit diesem hilfreichen Beitrag kann ich eine Standardgruppe und Gruppenberechtigungen in einem Ordner festlegen.

Ich habe Probleme beim Festlegen eines Standardbesitzers (teamlead uid 1234).

setfacl -d -m g::rwx /my/test/folder
setfacl -d -m o::rx /my/test/folder

getfacl /my/test/folder

# file: /my/test/folder
# owner: teamlead
# group: web_prod
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Damit:

[mary@boxen]# touch /my/test/folder/somefile
[mary@boxen]# ll /my/test/folder/somefile
-rw-rw-r--. 1 mary web_prod 0 Nov  6 08:58 somefile

Die richtige Gruppe wird also zugewiesen, aber die neue Datei besitzt den Benutzer, der die Datei erstellt. Ich möchte, dass neu erstellte Dateien teamlead haben: web_prod owner / group.

Es scheint, dass setfacldamit auch ein Standardbenutzer festgelegt werden kann. Mit dem vorhandenen Ordner acl config (oben):

[mary@boxen]# setfacl -d -m u:1234:rwx /my/test/folder

Nun erstellen Sie eine Datei als anderer Benutzer. Ich erwarte, dass es teamlead: web_prod Besitz hat.

[mary@boxen]# touch /my/test/folder/anotherfile
[mary@boxen]# ll /my/test/folder/anotherfile
-rw-rw-r--+ 1 mary web_prod 0 Nov  6 08:58 somefile

Die neue Datei besitzt weiterhin den Eigentümer, der die Datei erstellt, nicht die UID 1234 (Teamlead).

Ist das, wonach ich suche, überhaupt möglich, oder ist die Art und Weise, wie ich das mache, falsch?

ein Kodierer
quelle

Antworten:

16

Mit setfacl können Sie Standardberechtigungen festlegen, jedoch nicht den Standardbesitzer / die Standardgruppe für neu erstellte Dateien.

Damit neue Dateien einem bestimmten Benutzer gehören, benötigen Sie ein Setuid-Bit, das wie das Setgid-Bit in Verzeichnissen funktioniert. Das ist leider nicht umgesetzt.

Mit setfacl können Sie etwas tun, das in den meisten Szenarien nahezu gleichwertig ist: Sie können eine ACL wie diese festlegen default:user:teamlead:rwx. Auf diese Weise kann der benannte Benutzer die neuen Dateien schreiben, auch wenn jemand anderes sie besitzt.

Michael Suelmann
quelle
Bitte aktualisieren Sie diese Antwort mit dem Befehl, um 'default: user: teamlead: rwx' auf das Verzeichnis '/ foo'
anzuwenden
10

Es wird immer eine neue Datei erstellt, die dem Benutzer gehört, unter dem der Prozess zum Erstellen der Datei ausgeführt wird. (Die effektive Benutzer-ID, um genau zu sein.) Dies kann nicht geändert werden, da das Erstellen von Dateien, die anderen Benutzern gehören, eine Sicherheitslücke darstellt, ähnlich wie das Zulassen einer Datei durch Nicht-Root-Benutzer .

Was auch immer Sie versuchen, Sie müssen dies nicht tun. ACLs reichen aus, um sicherzustellen, dass alles, was später zum Lesen der Datei benötigt wird, über ausreichende Berechtigungen verfügt. Überlassen Sie die Datei dem Benutzer, der sie erstellt hat.

Gilles 'SO - hör auf böse zu sein'
quelle
"ACLs reichen aus, um sicherzustellen, dass alles, was später zum Lesen der Datei benötigt wird, über ausreichende Berechtigungen verfügt." Falsch. Die Gruppe Ihrer neuen Datei ist die Standardgruppe Ihres Benutzers. Wenn die zusammenarbeitenden Benutzer unterschiedliche Standardgruppen haben, können Sie nicht auf die Dateien des anderen zugreifen. Sie benötigen setgid, damit die Gruppe des übergeordneten Ordners für alle untergeordneten Ordner "haftet".
bviktor
@bviktor Mit ACL können Sie den gleichen Effekt erzielen.
Gilles 'SO - hör auf böse zu sein'
Wie legen Sie den Eigentümer und die Gruppe für neue Dateien mit ACL fest?
bviktor
@bviktor Der Besitzer ist derjenige, der die Datei erstellt, der sich nicht ändert. Die Gruppe, der die Datei in den herkömmlichen Berechtigungen gehört, ist irrelevant. Die ACL für neue Dateien ist die Standard-ACL des Verzeichnisses, genauso wie die Eigentümergruppe für neue Dateien die Eigentümergruppe des Verzeichnisses mit BSD-Semantik ( g+s) ist.
Gilles 'SO - hör auf böse zu sein'
@ Gilles nein. Die Gruppe der neuen Dateien ist die "anfängliche Anmeldegruppe" des Erstellerbenutzers, nicht die Gruppe des übergeordneten Ordners. Für das von Ihnen beschriebene Verhalten (dh eine neue Datei erhält die Gruppe des übergeordneten Verzeichnisses) muss setgid für das übergeordnete Verzeichnis festgelegt werden. Und die Gruppe ist sehr relevant, da Benutzer bei der Zusammenarbeit nicht auf die Dateien der anderen zugreifen können, wenn die Gruppe unterschiedlich ist. Es sei denn, Ihre Dateien sind weltweit zugänglich, was nicht gerade eine gute Idee ist.
bviktor
0

Unter Linux muss sgid im übergeordneten Verzeichnis vorhanden sein, um die Gruppe für Dateien zu erben. (Obwohl Sie auf BSD-Systemen kein sgid on-Verzeichnis benötigen.)

Jirib
quelle
Bei der Frage geht es darum, neu erstellten Dateien den Besitz zuzuweisen. Gruppe ist bereits richtig zugeordnet.
Ein Codierer
0

Wenn Sie möchten, dass die neuen Dateien mit der neuen Gruppe erstellt werden, müssen Sie die primäre Gruppe ändern.

Hierfür können Sie usermod und den Parameter -g verwenden

   -g, --gid GROUP
       The group name or number of the user's new initial login group. The group must exist.
       Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group.
       The group ownership of files outside of the user's home directory must be fixed manually.

z.B

test2@kinakuta:/tmp$ id
uid=1002(test2) gid=1002(test2) grupos=1002(test2),1003(testgroup)
test2@kinakuta:/tmp$ touch test2
test2@kinakuta:/tmp$ ls -la test2
-rw-r--r-- 1 test2 test2 0 nov 23 22:26 test2
root@kinakuta:/tmp# usermod -g testgroup test2
root@kinakuta:/tmp# su test2
test2@kinakuta:/tmp$ touch test2_1
test2@kinakuta:/tmp$ ls -la test2_1 
-rw-r--r-- 1 test2 testgroup 0 nov 23 22:27 test2_1
sinkmanu
quelle