使用 RedHat 衍生发行版 (CentOS),我想保留普通用户列表(UID 超过 500),并将组(和影子文件)推送到备份服务器。
同步是单向的,从主服务器到备份服务器。
我真的不想处理 LDAP 或 NIS。
我只需要一个简单的脚本,它可以每晚运行以保持备份服务器的更新。
主服务器可以通过 SSH 连接到备份系统。
有什么建议吗?
编辑:
感谢到目前为止的建议,但我认为我还不够清楚。
我只关注同步UID 大于或等于 500的普通用户。
两个系统上的系统/服务用户(UID 低于 500)可能不同。
因此,恐怕您不能只同步整个文件。
您可以使用 awk 提取 ID 为 500 或更大的用户/组。我还冒昧地排除了用户 id 65534,它通常是为“nobody”用户保留的(取决于发行版;不知道 CentOS 是否这样做):
然后使用 rsync、scp 或您选择的文件传输方法将文件复制到您的备份系统。然后,当您需要恢复这些文件时,可以将这些文件附加到“干净”密码、组或影子文件的末尾(即:仅默认系统用户/组,以防止无意重复 ID/用户名)。
NIS/NIS+ 正是出于这个原因而发明的。
但是它们有点丑陋和集中(LDAP/Kerberos/SMB/等)身份验证是一个更好的主意,如果你能做到的话。要设置 NIS/NIS+,您需要:
套餐:
和 /etc/yp.conf 类似:
然后在 /etc/sysconfig/network 中:
而且我很懒,这里有一个很好的方法:http ://www.wains.be/index.php/2007/02/28/setting-up-nis-under-centos-4/它将引导您完成它。
就个人而言,我只是备份整个 /etc/ 目录并完成它。最多只有几兆。
使用 cppw 和 cpgr:
这里有很多方法和解决方案,但是要回答原始问题,需要三个步骤:
在服务器上创建一个无密码的 SSH 密钥:
ssh-keygen -b 4096
将 .ssh/id_rsa.pub 复制到客户端上的 .ssh/authorized__keys2 :
scp ~/.ssh/id_rsa.pub client:.ssh/authorized_keys2
在 /etc/crontab 中添加类似这样的内容(或使用 crontab -e 进行编辑):
0 0 * * * scp /etc/{passwd,shadow,group} root@backupbox:/var/mybackupdir
好吧,我认为我可以使用现有的东西而不必推出自己的解决方案,但我必须快速做一些事情。
下面是一个脚本,可以满足我的需要。
指示
要使其正常工作,只需将最小和最大 UID 的几个配置变量更改为普通用户和远程主机名或 IP 地址。
您必须设置远程服务器以接受来自本地服务器
root
用户的传入 SSH 会话,而无需输入密码。指挥官 Keen在此页面上的回答中暗示了它是如何完成的,但您也可以参考无密码 SSH 登录以获取详细说明。
这个怎么运作
该脚本所做的是将远程服务器上的每个远程passwd、group、shadow、gshadow文件复制到 lcoal 服务器上的临时位置。
然后它从所有“普通”用户中删除这些临时文件,只保留对系统用户的引用。
下一步是检查passwd、group、shadow、gshadow的每个本地版本,并将“普通”用户附加到相应的临时文件中,然后将每个用户上传回远程服务器以替换旧的。
警告
在您尝试任何事情之前,请确保 在本地和远程服务器上复制您的passwd、group、shadow、gshadow 。
安全
文件所有权和属性被保留。无论同步成功与否,都会
保存并删除临时文件。 本地服务器必须对备份具有无密码访问权限(但不能反过来)。这是必要的,因此我们可以获得用户帐户配置文件(否则会受到限制)。
/tmp
root
编码
这是第一次尝试,它有点混乱(不是漂亮的代码),但它做得很好,其他人可能会发现它很有用。
这是一个 Perl 脚本,它只依赖于
Net::SCP
在服务器之间安全地复制文件的模块。2010 年 5 月 21 日更新:更新了代码以改进组 ID 的同步
您只需要部分同步意味着脚本必须要复杂得多,因此更有可能出现某种错误。就个人而言,我会花一些时间来调查简单地修复这些其他帐户需要付出多少努力。我不知道我们在谈论多少服务,但我猜想,在更改调整服务帐户的 ID 后,您所要做的就是更新某些文件的所有者。
如果你想做一些非常简单的事情,你可以设置像rdist ( intro ) 来简单地将文件推送到你想要的其他服务器。为了保证这一点的安全,您需要设置基于密钥的 ssh 访问以供 rdist 进程使用。
我在 crontab 条目中使用 rsync 来执行完成相同任务的简单备份。不幸的是,我不是通过 ssh 来做的。我的 crontab 条目如下所示:
0 4 * * 0 rsync -av --delete /etc/ /backup/etc/
实际上,我的 crontab 启动了我的 NAS 服务器,即您在上面看到的第二条路径,通过网络唤醒,然后做了几个备份,这只是其中之一。然后 Cron 给我发一封电子邮件,让我知道备份了什么,即同步了哪些文件等。
我没有考虑过通过 ssh 执行此操作,但我希望这会有所帮助。