Простите за длинный вопрос. Я стараюсь добавить как можно больше деталей.
На server_1 у меня есть системный пользователь с именем backup, у которого есть домашний каталог, в котором задания cron читают сценарии резервного копирования.
backup@server_1~]$ ls
script_1 script_2 ...
На server_2 я создал стандартную пользовательскую "резервную копию" для хранения некоторых репозиториев, резервные копии которых в настоящее время создаются на server_1. Те поддерживались в порядке месяцами. Теперь я добавил ссылку на новое репо в / srv, которое принадлежит пользователю и группе srv.
backup@server_2~]$ ls
drwxrwxr.. backup:backup repo_1
drwxrwxr.. backup:backup repo_2
lrwxrwx... backup:backup repo_3 -> /srv/repo_3
backup@server_2~]$ ls /srv
drwxrwxr.. srv:srv repo_3
^ notice the r, indicating any user should be able to read this data too.
Затем я добавил резервную копию на server_2 в группу srv, чтобы резервная копия могла читать все данные для синхронизации на server_1.
root@server_2~]# usermod -a -G srv backup
Затем я попытался выполнить rsync:
backup@server_1~]$ rsync -avi -e "ssh -i /home/backup/.ssh/server_2_ssh_key" \
backup@server_2/srv/repo_3 ./
Проблема в том, что когда я запускаю сценарий резервного копирования, используя беспарольный вход с server_1, он не может прочитать данные, потому что rsync не может перейти в каталог / srv / repo_3 из-за «отказано в разрешении». То же самое происходит, когда я пытался использовать символическая ссылка.
backup@server_1~]$ rsync -avi -e "ssh -i /home/backup/.ssh/server_2_ssh_key" \
backup@server_2/home/backup/repo_3 ./
Затем я даже вошел в систему, используя пару ключей резервных пользователей на server_1, и я не могу даже перечислить содержимое / srv / repo_3
У меня есть другая стандартная учетная запись пользователя на server_2, которая использует SSH-ключ для входа с паролем. Когда я вхожу в систему таким образом, "user_2" может просматривать содержимое / srv
Итак, я скопировал ssh-ключ второго пользователя с server_2 в /home/backup/.ssh/ssh_key_w_password на server_1 и добавил публичную часть в резервные доверенные хосты на server_2. Затем я попробовал сделать резервную копию, используя этот ключ.
backup@server_1~]$ rsync -avi -e "ssh -i /home/backup/.ssh/ssh_key_w_password" \
backup@server_2/home/backup/repo_3 ./
Password for ssh_key_w_password:
Я ввожу пароль, и резервное копирование выполняется правильно, хотя user_2 даже не входит в группу резервного копирования или srv на server_2. Он работает по символической ссылке или по прямому адресу / srv / repo_3.
Некоторые данные о пользователе:
backup@server_2~]$ cat /etc/passwd | grep backup
backup:x:1008:1008:backup:/home/backup:/bin/bash
backup@server_2~]$ groups
backup srv
user_2@server_2~]# cat /etc/passwd | grep user_2
user_2:x:1012:1012:user_2:/home/user_2:/bin/bash
root@server_2~]# groups user_2
user_2
user_2@server_2~]$ cat /etc/passwd | grep srv
srv:x:1018:1021::/home/srv:/bin/bash
user_2@server_2~]$ groups srv
srv : srv mycorp 4h jndj ax
Вот и мы. Единственное отличие, которое я могу найти со своей стороны, заключается в том, что для резервного копирования используется пара ключей без пароля от server_1, в то время как другой стандартный пользователь имеет пароль на ключе SSH.
Может ли кто-нибудь помочь мне понять, что отличается или чего мне не хватает? У меня должна быть резервная копия на server_1 и использовать логин без слов для запуска синхронизации. Я не могу разрешить server_2 синхронизироваться до server_1.
Обновление: re: комментарий MadHatter Непосредственный вход в систему не выполняется как резервная копия с server1, поскольку вход на основе пароля не разрешен. Но использование ключа без пароля возвращает результат (как и та же попытка с ключом пароля от другого пользователя.
[backup@server_1 ~]$ ssh backup@server_2 "id -a"
backup@server_2's password:
Permission denied, please try again.
[backup@server_1 ~]$ ssh -i .ssh/backup_server_2_ssh.key backup@server_2 "id -a"
uid=1008(backup) gid=1008(backup) groups=1008(backup),1021(srv)
[backup@server_1 ~]$
[backup@server_1 ~]$ ssh -i .ssh/ssh_key_w_password user_2@server_2 "id -a"
Enter passphrase for key '.ssh/ssh_key_w_password':
uid=1012(user_2) gid=1012(user_2) groups=1012(user_2)
[backup@server_1 ~]$
Для справки, это сообщения журнала ошибок от rsync, когда я снова попытался использовать беспарольный вход в систему с правами root на server_1.
[root@server_1 ~]# bash /home/backup/add_srv.sh
2013-11-18 12:24:14 - ************ Backup Robot Checking In **********
.... login and mount backup destination goes ok here rsync fail is below ....
2013/11/18 12:24:20 [920] receiving file list
2013/11/18 12:24:20 [920] rsync: change_dir "/srv" failed: Permission denied (13)
2013/11/18 12:24:20 [920] sent 8 bytes received 10 bytes 12.00 bytes/sec
2013/11/18 12:24:20 [920] total size is 0 speedup is 0.00
2013/11/18 12:24:20 [920] rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1505) [receiver=3.0.6]
[root@server_1 ~]#
Извините за беспокойство.
Чтобы исключить любую идею ключа ssh, я сделал ключ пароля для резервного копирования, и это тоже не удалось. Итак, я пришел к выводу, что это не связано и должно быть основано на разрешениях в / srv. Я там не администратор, поэтому поручил ему подождать ответа.
И оказалось, что каталог / home / srv не имел тех же разрешений, что и репо.
ls / -l
drwx---r-x 10 srv srv 4096 Nov 15 16:08 srv
Итак, по какой-то причине группе srv не был предоставлен доступ к ее собственной папке. РЖУНИМАГУ. Это предотвратило попадание резервной копии в папку и заблокировал доступ, в то время как user_2 мог читать, не находясь в группе srv.
Еще раз извиняюсь за этот несерьезный билет. Я просто вставляю ответ сюда, чтобы скрыть его из очереди без ответов.