2012-06-21 11 views
13

Tôi hiểu việc giữ quyền cho rsync. Tuy nhiên trong trường hợp của tôi máy tính cục bộ của tôi không có người dùng các tệp cần phải theo cho máy chủ web. Vì vậy, khi tôi rsync tôi cần chủ sở hữu và nhóm được apache trên máy chủ web, nhưng là tên người dùng của tôi trên máy tính địa phương của tôi. Bất kỳ đề xuất?Cách thay đổi chủ sở hữu cho rsync

Tôi muốn làm rõ để giải thích chính xác những gì tôi cần làm.

máy tính cá nhân của tôi: có tên là 'nhà' với tài khoản người dùng 'michael' máy chủ web của tôi: có tên là 'máy chủ' với tài khoản người dùng 'từ xa' và tài khoản người dùng 'apache'

tình hình hiện tại: Trang web của tôi là 'home' với chủ nhân 'michael' và trên 'server' với 'apache' của chủ sở hữu. 'nhà' cần phải sử dụng 'michael' và 'máy chủ' của người dùng cần sử dụng 'apache'

Tác vụ: rsync trang web của tôi trên 'nhà riêng' đến 'máy chủ' nhưng có tất cả chủ sở hữu tệp theo ' apache 'và nhóm' apache '

Vấn đề: rsync sẽ chèn sẵn quyền, chủ sở hữu và nhóm; Tuy nhiên, tôi cần tất cả các tập tin để được chủ sở hữu bởi apache. Tôi biết không preseving chủ sở hữu sẽ đặt chủ sở hữu của người dùng trên 'máy chủ' nhưng kể từ khi người dùng đó là 'từ xa' sau đó nó sử dụng mà thay vì 'apache'. Tôi không thể rsync với apache của người dùng (mà sẽ được tốt đẹp), nhưng một nguy cơ bảo mật tôi không sẵn sàng để mở ra.

Ý tưởng duy nhất của tôi về cách giải quyết: sau mỗi rsync tự chown -R và chgrp -R, nhưng đó là một hệ thống lớn và điều này mất một thời gian dài, đặc biệt là kể từ khi này sẽ sản xuất.

Có ai biết cách thực hiện việc này không?

lệnh hiện tại tôi sử dụng để rsync: rsync --progress -rltpDzC --force --delete -e "ssh -p22" ./ [email protected]:/trang web

+0

Bạn có một chút mơ hồ về chính xác cách bạn chuyển các tệp - qua ssh, tôi giả định? Bạn đang ssh-ing đến máy chủ web, và nếu như vậy, như những gì người dùng? Bạn có thể cung cấp lệnh khi bạn đang chạy nó ngay bây giờ không? – Adam

+0

Tôi đã cập nhật câu hỏi của mình để có giải thích sâu hơn. Có, im sử dụng ssh để rsync đến một máy chủ web từ xa. –

Trả lời

11

Có hacks bạn có thể đặt cùng nhau trên máy nhận để có quyền sở hữu chạy 'chmod -R apache/website' ra khỏi cron sẽ là một lựa chọn hiệu quả nhưng khá kludgey - nhưng thay vào đó, tôi khuyên bạn nên an toàn cho phép rsync-over- ssh-as-apache.

Bạn muốn tạo ra một cặp khóa ssh dành riêng cho việc này:

ssh-keygen -f ~/.ssh/apache-rsync 

và sau đó đi ~/.ssh/apache-rsync.pub giao cho máy chủ web, nơi bạn muốn đặt nó vào ~ apache/.ssh/authorized_keys và cẩn thận xác định cho phép lệnh, một cái gì đó giống như vậy, tất cả trên cùng một dòng:

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== [email protected] 

và sau đó lệnh rsync của bạn trên máy tính "nhà" của bạn sẽ là một cái gì đó giống như

01.235.
rsync -av --delete -e 'ssh -i ~/.ssh/apache-rsync [email protected]' ./ /website 

Có nhiều cách khác để làm da mèo này, nhưng đây là cách rõ ràng nhất và liên quan đến cách giải quyết ít nhất, theo ý tôi. Nó ngăn cản nhận được một vỏ như apache, đó là mối quan tâm bảo mật lớn nhất, natch. Nếu bạn đang thực sự deadset chống lại cho phép ssh như apache, có những cách khác ... nhưng đây là cách tôi đã thực hiện nó.

Tài liệu tham khảo ở đây: http://ramblings.narrabilis.com/using-rsync-with-ssh, http://www.sakana.fr/blog/2008/05/07/securing-automated-rsync-over-ssh/

+0

Cảm ơn. Tôi không biết rằng bảo mật ssh có thể được cụ thể cho các lệnh nhất định. –

7

phiên bản cuối (ít nhất là 3.1.1) của rsync cho phép bạn chỉ định "quyền sở hữu từ xa":

--usermap=tom:www-data 

Thay đổi quyền sở hữu tom thành www-data (aka PHP/Nginx). Nếu bạn đang sử dụng Mac làm ứng dụng khách, hãy sử dụng brew để nâng cấp lên phiên bản cuối cùng. Và trên máy chủ của bạn, tải xuống các nguồn lưu trữ, sau đó "thực hiện" nó!

+0

Cảm ơn! Tôi sẽ kiểm tra điều đó. –

28

Nếu bạn có quyền truy cập vào v.3.1.0 rsync hoặc mới hơn, sử dụng tùy chọn --chown:

rsync -og --chown=apache:apache [src] [dst] 

thêm thông tin trong một câu trả lời từ một câu hỏi tương tự ở đây: ServerFault: Rsync command issues, owner and group permissions doesn´t change

+0

Không thể hợp nhất giữa các trang web, David - cảm ơn cho các đường chéo mặc dù. – Shog9

+1

có vẻ như cả máy khách ** và máy chủ ** đều phải chạy 3.1.0+ để sử dụng '--chạy'. – Jacket

+0

cảm ơn bạn! cập nhật rsync với homebrew trên máy địa phương của tôi và điều này làm việc như một say mê – OregonTrail