GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erstellen Sie eine Datei als ein anderer Benutzer und eine andere Gruppe?

Ich habe ein Bash-Skript, das rsync muss, um Dateien herunterzuladen, die sie lokal schreiben, und dann den Besitzer auf Apache und die Gruppe auf eine bestimmte Benutzergruppe setzen muss (in der Apache kein Mitglied ist).

Gibt es eine Möglichkeit, diese Dateien mit diesen Eigentümern zu erstellen, während sie vom rsync-Prozess geschrieben werden, ohne sie nachträglich mit chmod ändern zu müssen? Es gibt so viele Dateien, dass es unerschwinglich ist, sie später durchzugehen.

Ich muss dies für mehrere Benutzergruppen tun, also sollte ich Apache nicht zu diesen Gruppen hinzufügen und kann sicherlich nicht alle zur Standardgruppe machen.

Mit anderen Worten:Gibt es einen Weg, wie root eine Datei als Benutzer X und Gruppe Y erstellen kann, wenn X kein Mitglied von Y ist?

Ich habe versucht, runuser zu verwenden, aber ich kann die Gruppe nicht festlegen (vermutlich, weil Apache nicht zur Gruppe gehört).

Ich weiß, dass Sie chmod verwenden können, um Berechtigungen zu ändern und eine beliebige Benutzer-/Gruppenkombination hinzuzufügen. Was ich frage, ist, ob es eine Möglichkeit gibt, eine Datei zum Schreiben zu öffnen und beim Erstellen eine beliebige Benutzer-/Gruppenkombination zu verwenden.

Versuchen Sie es mit sudo:

[[email protected] tmp]# groups angelo
angelo : angelo wheel
[[email protected] tmp]# groups apache
apache : apache
[[email protected] tmp]# sudo -u angelo -g apache touch angelo-file
Sorry, user root is not allowed to execute '/bin/touch angelo-file' as angelo:apache on centos7
[[email protected] tmp]# ls -ld angelo-file
ls: cannot access angelo-file: No such file or directory
[[email protected] tmp]# sudo -u angelo -g angelo touch angelo-file
[[email protected] tmp]# ls -ld angelo-file
-rw-r--r-- 1 angelo angelo 0 Nov 12 03:13 angelo-file

Akzeptierte Antwort:

Wenn Sie eine Datei als ein bestimmter Benutzer und eine bestimmte Gruppe erstellen möchten, ohne chown zu verwenden , können Sie sudo verwenden und geben Sie den Benutzer und die Gruppe an:

sudo -u #49 -g #58 touch /tmp/something

Beachten Sie, dass der von Ihnen angegebene Benutzer die Berechtigung haben muss, in das Verzeichnis zu schreiben, in dem Sie dies versuchen.

Oder Sie können eine Shell als aktueller Benutzer starten, wobei die Gruppe auf etwas anderes eingestellt ist:

sudo runuser "$USER" -g somegroup

Ich habe dies erfolgreich auf einer Vagrant-Box ausprobiert:

[[email protected] ~]$ sudo runuser "$USER" -g floppy
[[email protected] ~]$ touch testfile
[[email protected] ~]$ ls -l testfile
-rw-r--r--. 1 vagrant floppy 0 Nov  9 15:57 testfile
[[email protected] ~]$ 

Und das, obwohl der „Landstreicher“-Benutzer nicht Teil der „Floppy“-Gruppe ist.

Verwandt:Php:image2wbmp – Bild an Browser oder Datei ausgeben
Linux
  1. So erstellen und löschen Sie Benutzergruppen in Linux

  2. Vorrang von Benutzer- und Gruppeneigentümern bei Dateiberechtigungen?

  3. Warum wird empfohlen, für einige Anwendungen eine Gruppe und einen Benutzer zu erstellen?

  4. Erstellen Sie eine MySQL-Datenbank und einen Benutzer in cPanel

  5. So verwalten Sie Datei- und Verzeichnisberechtigungen/Eigentümer in Linux

Chown-Befehl in Linux (Dateibesitz)

Linux-Befehl id - Gibt Benutzer-ID- und Gruppen-ID-Informationen aus

So erstellen und verwenden Sie eine Auslagerungsdatei unter Linux

So erstellen Sie einen Sudo-Benutzer unter Ubuntu und Debian

Erstellen und konfigurieren Sie einen Benutzer in MSSQL

Erstellen und entfernen Sie Auslagerungsdateien in Ubuntu