Bash

以不同的使用者和組創建文件

  • March 14, 2022

我有一個 bash 腳本,它必須 rsync 才能下載在本地寫入文件的文件,然後需要將所有者設置為 apache,並將組設置為特定的使用者組(apache 不是其中的成員)。

有沒有一種方法可以創建具有這些所有權的文件,因為它們是由 rsync 程序編寫的,而不必在事後使用 chown 進行更改? 文件太多,以後瀏覽它們所花費的時間令人望而卻步。

我必須為多個使用者組執行此操作,所以我不應該將 apache 添加到這些組中,當然也不能將它們都設為預設組。

換句話說:當 X 不是 Y 的成員時,有沒有辦法 root 可以作為使用者 X 和組 Y 創建文件?

我試過使用runuser,但我無法設置組(大概是因為apache不屬於該組)。

我知道您可以使用 chmod 更改權限並添加任何使用者/組組合。我要問的是是否有一種方法可以打開文件進行寫入並在創建文件時使用任何使用者/組組合。

嘗試使用 sudo:

[root@centos7 tmp]# groups angelo
angelo : angelo wheel
[root@centos7 tmp]# groups apache
apache : apache
[root@centos7 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
[root@centos7 tmp]# ls -ld angelo-file
ls: cannot access angelo-file: No such file or directory
[root@centos7 tmp]# sudo -u angelo -g angelo touch angelo-file
[root@centos7 tmp]# ls -ld angelo-file
-rw-r--r-- 1 angelo angelo 0 Nov 12 03:13 angelo-file

如果要在不使用的情況下將文件創建為特定使用者和組chown,可以使用sudo並指定使用者和組:

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

請注意,您指定的使用者必須有權寫入您嘗試執行此操作的目錄。


或者,您可以以目前使用者身份啟動 shell,並將組設置為其他內容:

sudo runuser "$USER" -g somegroup

我在 Vagrant 盒子上成功嘗試了這個:

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

儘管“vagrant”使用者不屬於“floppy”組,但還是會出現這種情況。

引用自:https://unix.stackexchange.com/questions/91064