GNU/Linux >> Znalost Linux >  >> Linux

Vytvořit soubor jako jiný uživatel a skupina?

Mám bash skript, který se musí rsyncovat, aby si mohl stáhnout soubory, které je zapisuje lokálně, a pak potřebuje nastavit vlastníka na apache a skupinu na konkrétní skupinu uživatelů (která apache není členem).

Existuje způsob, jak tyto soubory s těmito vlastnictvími vytvořit, když jsou zapisovány procesem rsync, aniž byste je museli následně procházet a měnit pomocí chmod? Existuje tolik souborů, že čas potřebný k jejich procházení později je neúměrný.

Musím to udělat pro více skupin uživatelů, takže bych do těchto skupin neměl přidávat apache a rozhodně je nemohu všechny nastavit jako výchozí skupinu.

Jinými slovy:existuje způsob, jak může root vytvořit soubor jako uživatel X a skupina Y, když X není členem Y?

Zkoušel jsem použít runuser, ale nemohu nastavit skupinu (pravděpodobně proto, že apache do skupiny nepatří).

Vím, že můžete použít chmod ke změně oprávnění a přidání libovolné kombinace uživatele/skupiny. Ptám se, zda existuje způsob, jak otevřít soubor pro zápis a použít při jeho vytváření libovolnou kombinaci uživatelů/skupin.

Pokuste se použít 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

Přijatá odpověď:

Pokud chcete vytvořit soubor jako konkrétní uživatel a skupina bez použití chown , můžete použít sudo a zadejte uživatele a skupinu:

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

Všimněte si, že zadaný uživatel musí mít oprávnění k zápisu do adresáře, kde se o to pokoušíte.

Nebo můžete spustit shell jako aktuální uživatel se skupinou nastavenou na něco jiného:

sudo runuser "$USER" -g somegroup

Zkoušel jsem to s úspěchem na krabici Vagrant:

[[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] ~]$ 

A to navzdory tomu, že „tulák“ uživatel není součástí „disketové“ skupiny.

Související:Php:image2wbmp — Výstup obrázku do prohlížeče nebo souboru
Linux
  1. Jak vytvořit a odstranit uživatelskou skupinu v Linuxu

  2. Priorita uživatele a vlastníka skupiny v oprávněních k souboru?

  3. Proč se pro některé aplikace doporučuje vytvořit skupinu a uživatele?

  1. Jak vytvořit soubor a připojit jej jako souborový systém?

  2. Vytvořte databázi MySQL a uživatele v cPanel

  3. Vytvářejte a upravujte uživatele v MySQL

  1. Vytvářejte a odebírejte odkládací soubory v Ubuntu

  2. Jak spravovat oprávnění/vlastnictví souborů a adresářů v Linuxu

  3. Vytvořte soubor zip a ignorujte strukturu adresářů