rsync指令問題,擁有者和群組權限沒有改變

rsync指令問題,擁有者和群組權限沒有改變

我正在嘗試透過設定所有者和群組rsync,但它似乎不起作用。

這是命令:

sudo rsync -rlptDvz --owner=cmsseren --group=cmsseren /home/serena/public_html/ -e ssh root@ip:/home/cmsseren/public_html2/

文件同步正確,但似乎沒有更改所有者和群組。

答案1

聽起來它工作正常。使用和--owner--group儲存(未設定)所有者和群組名稱...這意味著您不希望它們在傳輸後更改。

如果不使用這些選項,使用者和群組將變更為接收端的呼叫使用者。如果您想要指定其他用戶,則需要chown在腳本中新增命令。

-o, --owner
    This option causes rsync to set the owner of the destination file to be 
    the same as  the source file, but only if the receiving rsync is being run 
    as the super-user (see also the --super and --fake-super options). Without 
    this option, the owner of new and/or transferred files are set to the invoking 
    user on the receiving side...

-g, --group
    This option causes rsync to set the group of the destination file to be the same as 
    the source file. If the receiving program is not running as the super-user (or if
    --no-super was specified), only groups that the invoking user on the receiving side
    is a member of will be preserved. Without this option, the group is set to the default
    group of the invoking user on the receiving side...

人同步

答案2

版本3.1.0--usermapThomas介紹和提到的rsync --groupmap,也是方便的選擇--chown,這非常適合您的場景。

--chown=USER:GROUP
    This option forces all files to be owned by USER with group GROUP.
    This  is  a  simpler  interface  than  using  --usermap  and  --groupmap directly,
    but  it  is implemented using those options internally, so you cannot mix them.
    If either the USER or GROUP is empty, no mapping for the omitted user/group will
    occur.  If GROUP is empty, the trailing colon may be omitted, but if USER is
    empty, a leading colon must  be supplied.

    If you specify "--chown=foo:bar, this is exactly the same as specifying
    "--usermap=*:foo --groupmap=*:bar", only easier.

另外,-o-g選項是必需的。排除它們將無法更新其各自的屬性,但不會產生錯誤。

rsync -og --chown=cmsseren:cmsseren [src] [dest]

這在文中間接提到過線上說明頁,其中指出該--chown選項“是使用內部實現的--usermap--groupmap,並且:

若要使該--usermap選項產生任何效果,必須使用(或隱含) -o( --owner) 選項,且接收方需要作為超級使用者運作(另請參閱此--fake-super選項)。

若要使該--groupmap選項生效,必須使用(或隱含) -g( --groups) 選項,且接收者需要具有設定該群組的權限。

答案3

rsync 的最新版本(至少 3.1.1)可讓您指定「遠端所有權」:

--usermap=tom:www-data

將 tom 所有權變更為 www-data(又稱 PHP/Nginx)。如果您使用Mac作為客戶端,請使用brew升級到最新版本。在您的伺服器上,下載檔案來源,然後「製作」它!

答案4

問題。透過 SSH 從雲端 VPS 備份遠端檔案、目錄rsync並不能維護owner:group本機上的遠端所有權。

解決方案。

  1. 在本機上為從遠端主機 rsync 的檔案(目錄等)建立使用者。
  2. 將本機主機rsync命令運行為root/ sudo
  3. 必須手動提供 root 密碼、SSH 密碼。
# create local host system user(s) for those on remote host; see:
# https://wiki.archlinux.org/title/Users_and_groups#Example_adding_a_system_user

sudo rsync -aqP  -e "ssh -p 4321  \                   ## SSH port
    -i /home/victoria/.ssh/my-vps/id_rsa"  \          ## SSH credentials
    [email protected]_isp.com:/etc/default/solr.in.sh   ## rsync SRC (remote host)
    /<my home path>/backups/solr.in.sh  \             ## rsync DEST (local host)

測試。

# -----------------------------------------------------------------------------
# REMOTE HOST (cloud VPS):

[me@vps1234]$ ls -l /etc/default/

  ...
  -rw-r----- 1 root solr 15079 Aug 12 20:35 solr.in.sh    ## ownership: root:solr
  ...

[me@vps1234]$ 

# -----------------------------------------------------------------------------
# LOCAL HOST:

The basic command for testing (with variations, following) is:

```bash
rm -f solr.in.sh;  \
rsync -aqP  \
    --rsync-path="sudo /bin/rsync"  \
    -e "ssh -p 4321  \
    -i /home/victoria/.ssh/my-vps/id_rsa"  \
    [email protected]_isp.com:/etc/default/solr.in.sh
    /<my home path>/backups/solr.in.sh;  \
ls -l solr.in.sh
# -----------------------------------------------------------------------------
# [TEST 1] rsync --rsync-path...

[victoria]$ rm -f solr.in.sh;  \
    rsync -aqP --rsync-path="sudo /bin/rsync"  \
      -e "ssh -p 4321 -i /home/victoria/.ssh/my-vps/id_rsa"  \
      [email protected]_isp.com:/etc/default/solr.in.sh  \
      /<my home path>/backups/solr.in.sh;  \
    ls -l solr.in.sh 

  -rw-r----- 1 victoria victoria 15079 Aug 12 20:35 solr.in.sh
            ## victoria victoria [incorrect]

[victoria]$
# -----------------------------------------------------------------------------
# [TEST 2] sudo rsync --rsync-path ; user "solr" not on local host so remote files
# in group "solr" renamed "git" on local host; tried rsync -og options: no effect

[victoria]$ rm -f solr.in.sh;  \
    sudo rsync -aqP --rsync-path="/usr/bin/rsync"  \
      -e "ssh -p 4321 -i /home/victoria/.ssh/my-vps/id_rsa"  \
      [email protected]_isp.com:/etc/default/solr.in.sh  \
    /<my home path>/backups/solr.in.sh;  \
    ls -l solr.in.sh 

  [sudo] password for victoria: 
  Enter passphrase for key '/home/victoria/.ssh/my-vps/id_rsa': 

  -rw-r----- 1 root git 15079 Aug 12 20:35 solr.in.sh
            ## root:git [incorrect]

[victoria]$
# -----------------------------------------------------------------------------
# [CONFIGURE USERS]
# local host:

[victoria]$ cat /etc/passwd | grep solr     ## no such user
[victoria]$

# Create local host system user, for user on remote host:

[victoria@victoria backups]$ sudo useradd -r -s /usr/bin/nologin solr
  [sudo] password for victoria: 

[victoria]$ cat /etc/passwd | grep solr

  solr:x:980:980::/home/solr:/usr/bin/nologin

[victoria]$ ls -l /home/     ## check: useradd did not create /home/solr/

  total 52
  drwx------   2 root     root     16384 Mar  6  2015 lost+found
  drwxrwxr-x 178 victoria victoria 36864 Aug 13 10:09 victoria

[victoria]$
# -----------------------------------------------------------------------------
# [TEST 3: works] sudo --rsync-path...

[victoria]$ rm -f solr.in.sh;  \
    sudo rsync -aqP --rsync-path="/bin/rsync"  \
      -e "ssh -p 4321 -i /home/victoria/.ssh/my-vps/id_rsa"  \
      [email protected]_isp.com:/etc/default/solr.in.sh  \
      /<my home path>/backups/solr.in.sh;  \
    ls -l solr.in.sh 

  [sudo] password for victoria: 
  Enter passphrase for key '/home/victoria/.ssh/my-vps/id_rsa': 

  -rw-r----- 1 root solr 15079 Aug 12 20:35 solr.in.sh
            ## root:solr [correct]

[victoria]$
# -----------------------------------------------------------------------------
# [TEST 4: works] No need for --rsync-path option:

[victoria@victoria backups]$ rm -f solr.in.sh;  \
    sudo rsync -aqP -e  \
      "ssh -p 4321 -i /home/victoria/.ssh/my-vps/id_rsa"  \
      [email protected]_isp.com:/etc/default/solr.in.sh  \
      /<my home path>/backups/solr.in.sh;  \
    ls -l solr.in.sh

  [sudo] password for victoria:
  Enter passphrase for key '/home/victoria/.ssh/my-vps/id_rsa':

  -rw-r----- 1 root solr 15079 Aug 12 20:35 solr.in.sh
            ## root:solr [correct]

[victoria@victoria backups]$

# -----------------------------------------------------------------------------

相關內容