
Я пытаюсь установить владельца и группу через 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.0rsync представил --usermap
и --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
Проблема.Резервное копирование удаленных файлов и каталогов с облачного VPS через rsync
SSH не поддерживало удаленное owner:group
владение на локальном хосте.
Решение.
- Создайте пользователей на локальном хосте для файлов (каталогов и т. д.), синхронизированных с удаленного хоста по rsync.
- Запустите команду локального хоста
rsync
какroot
/sudo
. - Придется вручную ввести пароль 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]$
# -----------------------------------------------------------------------------