向用户授予所有文件和文件夹的权限


9

我希望有一个有权访问系统上所有文件和文件夹的用户。这是为了在本地计算机上使用RSYNC备份远程计算机。

目前,我们正在使用该用户backups,尽管我们已将该用户添加到组中sudo,但adminrsync仍返回如下消息:

rsync:opendir“ /位置/到/文件夹”失败:权限被拒绝(13)

rsync:send_files无法打开“ / location / to / file”:权限被拒绝(13)

任何想法我们都将授予用户backups访问所有内容的权限(除了将用户添加到所有组之外-我们尝试备份的远程服务器是专用的托管服务器,其中每个帐户在系统上都有自己的用户)。

谢谢你的帮助。


1
你能举个例子吗?如果是/proc/dev等,则可能会出现错误。
Phil

将用户添加backups到,sudo并且admin不更改任何内容。
favadi

@Phil我正在尝试备份整个/ home目录。文件/文件是失败的目录是那些诸如/home/a/c/account/users/mail:username其有权像drwx------,并通过所拥有mail:4096。我认为是因为用户backups在组中,sudo还是admin因为没有对组的访问权限而没有访问权限?我不知道,但是它在这样的文件夹/文件上出错。
Thomas Clayson

@favadi我已经做完了……仍然无法正常工作。
托马斯·克莱森

您必须rsync使用sudo 运行命令。
菲尔(Phil)2012年

Answers:


6

仅将用户添加backups到用户组sudo并不会自动授予该帐户访问系统上所有文件的权限。它授予用户运行sudo命令的权限。

由于您使用的是公钥身份验证(大概没有密码短语),因此我会在考虑安全性和易于实现的情况下进行此操作。使用ssh允许您限制用户仅执行非常特定的命令。在这种情况下,您可以允许用户backupsrsync超级用户权限执行。

您已经执行了密钥交换,并且验证成功。在要从authorized_keys中备份/home目录的远程主机上的文件中,可以command=向用户使用的密钥添加指令backups。该指令仅在密钥用于身份验证时才允许运行命令。因此,密钥的第一个字段将类似于以下内容:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

您甚至可以走得更远,并为键添加更多选项,例如from=myhost,no-pty,no-X11-forwarding

这应该为您提供体面的安全性,而不需要您修改基础文件系统权限。您可能需要使用放置在authorized_keys文件中的命令,直到它按预期运行为止。可能需要花些时间将您的大脑包起来。中指定的命令authorized_keys将基本上覆盖rsync您将从连接主机传递的选项。

中有很多好的信息man sshd。您要专门阅读AUTHORIZED_KEYS FORMAT部分。


好吧,我在追随我的想法。将该指令添加到authorized_keys文件中将使您能够以超级用户权限运行远程命令,对吗?如何更改命令rsync -e ssh -az backups@domain.com:/home /location/of/local/folder以指示它以超级用户身份在远程计算机上运行?还是会自动执行?感谢您的时间和帮助。:)
Thomas Clayson

1
该指令不会自动允许您以超级用户身份运行命令。当该特定密钥用于身份验证时,它将用户限制为仅指定命令。超级用户权限来自“ sudo”。从技术上讲,您可以将整个“ rsync”命令放入authorized_keys文件中,然后仅从备份主机启动ssh连接。认证完成后,整个过程将自动开始。我将使用“ ssh backups @ remotehost sudo rsync”之类的东西开始连接
George M

确实需要花些时间来包扎您的大脑,但是当它最终发出咔嗒声并意识到您可以做什么时,这非常酷。
乔治M

2

一种选择是在远程系统上运行rsync服务器。

基本上,创建一个rsync.confwith uid=root然后使用rsync -az rsync://domain.com

有关其他人编写的示例,请参见http://pastebin.com/5hQx1mRV;有关在Ubuntu中启用服务器的一些基础知识,请参见配置rsync守护程序

请注意,您必须考虑这一点的安全性。更好的方法可能是使远程系统推送到本地系统。


看起来不错,谢谢。那会否使/backup/lc远程服务器上的文件夹中的所有内容同步?我会改变path/home使其工作吗?
Thomas Clayson

感谢您的编辑伙计。唯一的问题是我们不能保证我们所处的静态IP地址,而我们想通过cron做到这一点,以便它一直在发生。如果我们“推送”,如果我们的IP地址更改,它可能会停止工作。:/
Thomas Clayson

@ThomasClayson:这就是动态DNS的用途。:)
沃伦·扬

1

如果基础文件系统支持,则可以使用ACL

您应该在每个文件和目录的ACL中添加组备份。但是要为新创建的文件和目录自动添加,您应该首先将默认ACL设置为所有现有目录。因此在远程服务器上:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

然后,您应该对所有现有目录具有rx权限,并读取文件。您可以使用2个命令来执行此操作(这次没有-d)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

这将为您提供额外的权限,以将文件读取到组备份中,而无需更改拥有每个文件的现有用户和组。

注意:加速查找| xargs命令可以向xargs命令添加以下选项:-P n与n并行进程的数目。您可以将其设置为计算机上的CPU数量+ 1。


在这种情况下,并行xargs不会加快速度,因为瓶颈是I / O,而不是CPU。
Mikel

Linux在将更改提交到磁盘之前使用内存中的缓存,因此从用户的角度来看确实感觉更快。甚至一个小型笔记本硬盘也可以处理并行设置多个ACL的负担。I / O并不多。尝试一下 :)
惠更斯(Huygens)

我刚刚在这里读 superuser.com/a/422954/53206,您可以简单地使用它:sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:)更简单!
惠更斯(Huygens)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.