抱歉,问题太长了。我尽量补充尽可能多的细节。
在 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 的内容
因此,我将 server_2 上的第二个用户的 ssh 密钥复制到 server_1 上的 /home/backup/.ssh/ssh_key_w_password 中,并将公共部分添加到 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 甚至不在 server_2 上的备份或 srv 组中。它通过符号链接或直接位置 /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。
更新:回复: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 ~]$
作为参考,这是我在 server_1 上再次尝试使用无密码登录为 root 时来自 rsync 的失败日志消息。
[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 ~]#
答案1
很抱歉打扰大家。
为了排除任何 ssh 密钥想法,我制作了一个密码密钥进行备份,但它也失败了。因此,我得出结论,这与此无关,必须基于 /srv 中的权限。我不是那里的管理员,所以我将它交给了上级,等待回复。
而且,事实证明 /home/srv 目录没有被赋予与 repo 相同的权限。
ls / -l
drwx---r-x 10 srv srv 4096 Nov 15 16:08 srv
因此,出于某种原因,srv 组没有被授予访问其自己文件夹的权限。哈哈。这阻止了备份进入文件夹并阻止了访问,而 user_2 可以读取,因为他不属于 srv 组。
再次为这张无聊的票道歉。我只是将答案粘贴在这里,以将其从未答复的队列中隐藏起来。