无密码 SSH 是否应阻止 rsync 具有读取权限的文件夹?

无密码 SSH 是否应阻止 rsync 具有读取权限的文件夹?

抱歉,问题太长了。我尽量补充尽可能多的细节。

在 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 组。

再次为这张无聊的票道歉。我只是将答案粘贴在这里,以将其从未答复的队列中隐藏起来。

相关内容