我理解保留rsync的权限.但是在我的情况下,我的本地计算机没有文件所需的用户用于网络服务器.因此,当我rsync时,我需要所有者和组在网络服务器上是apache,但在我的本地计算机上是我的用户名.有什么建议?
我想澄清一下,准确解释我需要做什么.
我的个人计算机:使用用户帐户'michael'命名为'home'我的网络服务器:使用用户帐户'remote'命名为'server',用户帐户'apache'
现状:我的网站与主人'michael'在'home',在'server'与主人'apache'在'home'.'home'需要使用用户'michael'和'server'需要使用用户'apache'
任务:rsync我的网站'home'到'server',但所有文件都由'apache'和'apache'组拥有
问题:rsync将预先设置权限,所有者和组; 但是,我需要所有文件都是apache的所有者.我知道没有预先主人会将用户的所有者放在'服务器'上,但由于该用户是'远程',所以它使用它而不是'apache'.我不能与用户'apache'rsync(这会很好),但是我不愿意打开安全风险.
关于如何解决的唯一想法:在每个rsync手动chown -R和chgrp -R之后,但它是一个庞大的系统,这需要很长时间,特别是因为这将是生产.
有谁知道如何做到这一点?
我用于rsync的当前命令:rsync --progress -rltpDzC --force --delete -e"ssh -p22"./ remote@server.com:/ website
Dav*_*son 46
如果您有权访问rsync v.3.1.0或更高版本,请使用--chown选项:
rsync -og --chown=apache:apache [src] [dst]
Run Code Online (Sandbox Code Playgroud)
来自类似问题的答案中的更多信息:ServerFault:Rsync命令问题,所有者和组权限不会更改
小智 15
你可以把黑客放在接收机器上以获得所有权 - 从cron运行'chmod -R apache/website'将是一个有效但非常好的选择 - 但我建议安全地允许rsync -over-SSH,为的Apache.
您将为此创建一个专用的ssh密钥对:
ssh-keygen -f ~/.ssh/apache-rsync
Run Code Online (Sandbox Code Playgroud)
然后将〜/ .ssh/apache-rsync.pub转到web服务器,在那里你将它放入~apache/.ssh/authorized_keys 并仔细指定允许的命令,类似于这样,所有在一行:
command="rsync --server -vlogDtprCz --delete . /website",from="IP.ADDR.OF.SENDER",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAABKEYPUBTEXTsVX9NjIK59wJ+fjDgTQtGwhATsfidQbO6u77dbAjTUmWCZjKAQ/fEFWZGSlqcO2yXXXXXXXXXXVd9DSS1tjE6vAQaRdnMXBggtn4M9rnePD2qlR5QOAUUwhyFPhm6U4VFhRoa3wLvoqCVtCV0cuirB6I45On96OPijOwvAuz3KIE3+W9offomzHsljUMXXXXXXXXXXMoYLywMG/GPrZ8supIDYk57waTQWymUyRohoQqFGMzuDNbq+U0JSRlvLFoVUZ5Piz+gKJwwiFwwAW2iNag/c4Mrb/BVDQAyEQ== comment@email.address
Run Code Online (Sandbox Code Playgroud)
然后你的"家庭"机器上的rsync命令会是这样的
rsync -av --delete -e 'ssh -i ~/.ssh/apache-rsync apache@server' ./ /website
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以让这只猫皮肤光滑,但这是最清晰的,涉及最少的解决方法,在我看来.它阻止了一个shell作为apache,这是最大的安全问题,natch.如果你真的厌倦了允许ssh作为apache,还有其他方法......但这就是我做到的.
这里参考文献:http://ramblings.narrabilis.com/using-rsync-with-ssh,http://www.sakana.fr/blog/2008/05/07/securing-automated-rsync-over-ssh/
rsync的最新版本(至少3.1.1)允许您指定"远程所有权":
--usermap=tom:www-data
Run Code Online (Sandbox Code Playgroud)
将tom所有权更改为www-data(又名PHP/Nginx).如果您使用Mac作为客户端,请使用brew升级到上一版本.在您的服务器上,下载档案源,然后"制作"它!
使用的解决方案rsync --chown USER:GROUP [src] [dst]仅适用于远程用户对目标目录具有写访问权限的情况,但在大多数情况下并非如此。
这是另一个解决方案:
(srcmachine) (rsync) (destmachine)
srcuser -- SSH --> destuser
|
| sudo su jenkins
|
v
jenkins
Run Code Online (Sandbox Code Playgroud)
假设您要 rsync:
srcmachinesrcuser/var/lib/jenkinsdestmachinedestuser要建立SSH连接。/tmpjenkins.rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp
Run Code Online (Sandbox Code Playgroud)
在此处阅读更多信息:
https://unix.stackexchange.com/a/546296/116861
| 归档时间: |
|
| 查看次数: |
37288 次 |
| 最近记录: |