Điểm:10

Làm cách nào tôi có thể thực hiện truyền tệp tự động an toàn giữa hai máy chủ?

lá cờ us

Tôi muốn chuyển một số tệp từ máy chủ A sang máy chủ B hàng ngày (với mục đích sao lưu). Tuy nhiên, tôi không thể tìm ra cách nào không tạo ra lỗ hổng bảo mật. Mục tiêu của tôi là ai đó có quyền sudo trên máy chủ A không thể khai thác quá trình chuyển này để kết nối với máy chủ B.

Ý tưởng cơ bản của tôi là thực hiện một cronjob với một scp (hoặc tương tự) trong đó. Rõ ràng, việc sử dụng kết nối SSH dựa trên mật khẩu giữa A và B không hoạt động và sử dụng kết nối SSH dựa trên khóa, theo như tôi biết sẽ cho phép người dùng máy chủ A kết nối trực tiếp với B qua A.

Tôi không phải là chuyên gia bảo mật, tôi có thể thiếu điều hiển nhiên ở đây. Có cách nào để đạt được những gì tôi muốn?

Tôi cũng không muốn người dùng của máy chủ B có thể kết nối với máy chủ A.

pa4080 avatar
lá cờ cn
Tôi sẽ tìm nạp tệp qua SSH từ Máy chủ B, thay vì đẩy tệp từ Máy chủ A, bằng một cái gì đó như `user@serverB:~/: rsync -avz serverA:/path/to/file /local/path/to/store/ `. Một cách khác là thiết lập phiên bản thứ ba có thể đăng nhập qua SSH vào cả hai máy chủ và sử dụng `scp` để sao chép trực tiếp từ A sang B (điều này không được `rsync` hỗ trợ).
lá cờ us
Tôi nên nói thêm rằng tôi cũng không muốn người dùng của máy chủ B có thể kết nối với máy chủ A. Tuy nhiên, tôi thích cách tiếp cận máy chủ thứ ba
Ubuntu User avatar
lá cờ ph
Những gì bạn có thể làm là mã hóa dữ liệu của mình trước khi gửi nó bằng lệnh gpg...sau đó giải mã ở đầu bên kia, nếu bạn nhập mật khẩu theo cách thủ công và không ghi chúng ở đâu đó sudo không thể truy cập được. Tuy nhiên, nếu bạn muốn điều này được thực hiện tự động, bạn có thể cần một thứ khác.
user535733 avatar
lá cờ cn
Vấn đề không phải là "*chuyển tập tin tự động an toàn*". Điều đó thật dễ dàng. Vấn đề là "*ai đó có quyền sudo trên máy chủ A không thể khai thác điều này*" Nói cách khác, bạn gặp vấn đề với con người, không phải công nghệ, phần mềm hay quy trình làm việc. Sudo chỉ nên được cấp cho những người đáng tin cậy và người giám sát nên giám sát công việc của họ. Giống như hầu hết các vấn đề của con người, các giải pháp dựa trên phần mềm không có hiệu quả lâu dài trước mối đe dọa nội bộ đã được xác định.
David Foerster avatar
lá cờ us
Bất cứ khi nào bạn cần ẩn điều gì đó hoặc cấm một hành động đối với tài khoản người dùng `root`, bạn cần suy nghĩ lại về các quy tắc kiểm soát truy cập người dùng của mình. Trong hầu hết các trường hợp, bạn cần thiết lập một tài khoản người dùng khác với quyền truy cập hạn chế vào chính xác những hành động đặc quyền mà người dùng cần phải có.
spuck avatar
lá cờ cn
Bạn quan tâm đến "vi phạm bảo mật" nào? Người dùng có thể gửi các tệp ngoài ý muốn? Nếu bạn không tin tưởng người dùng của máy chủ A trên máy chủ B (và ngược lại), làm thế nào để cải thiện điều đó bằng cách thêm một máy chủ C tin cậy (và được cả A và B tin cậy?)
spuck avatar
lá cờ cn
Không cấp quyền sudo không hạn chế cho người dùng không đáng tin cậy.
Điểm:19
lá cờ cn

Bạn không thể ẩn bất kỳ thứ gì trên hệ thống khỏi người có quyền truy cập root. Ngay cả khi bạn đang sử dụng thư mục chính được mã hóa trong khi bạn đăng nhập, nó vẫn được giải mã và người dùng root có thể truy cập dữ liệu.

Có lẽ cách đơn giản nhất để thực hiện tác vụ này là thiết lập phiên bản thứ ba có thể đăng nhập qua SSH vào cả Máy chủ A và Máy chủ B. Sau đó, bạn có thể sử dụng scp lệnh (trong trường hợp thứ ba đó) để sao chép tệp từ A sang B theo cách sau.

scp -3 serverA:/path/to/the/file serverB:/path/to/store/
  • chủ nhà máy chủAmáy chủB được cấu hình trong ~/.ssh/config ở trường hợp thứ ba.

Lưu ý tùy chọn -3, nó khiến phiên bản thứ ba hoạt động như một máy chủ trung gian. Trong trường hợp tùy chọn này không xuất hiện, Máy chủ A sẽ được hướng dẫn kết nối với Máy chủ B, nhưng nó sẽ cần thông tin xác thực. Tùy chọn này vô hiệu hóa đồng hồ đo tiến độ.

Phiên bản dài của câu trả lời có sẵn tại Môn lịch sử.

Điểm:5
lá cờ ar

Sử dụng rsync trong một cronjob, như thường lệ.

Trên ứng dụng khách rsync, người dùng có đặc quyền "sudo" sẽ có thể thấy tên người dùng và mật khẩu cần thiết để truy cập các thư mục cụ thể được chia sẻ bởi máy chủ rsync.

Nhưng các chứng chỉ này tách biệt với thông tin đăng nhập của người dùng và sẽ không cấp quyền truy cập SSH vào máy chủ. Vì vậy, nếu mọi thứ được định cấu hình chính xác, tất cả những gì họ có quyền truy cập trên máy chủ là các bản sao lưu từ máy của chính họ.

Trên máy chủ rsync, không có gì có thể cấp quyền truy cập vào máy khách rsync.

Điểm:4
lá cờ cn

Chỉ cần gửi tập tin đến serverA thay vì có người dùng trên serverA sao chép nó từ serverB. Nếu bạn muốn sao chép foo.txt từ máy chủB đến máy chủA, bạn có thể thực hiện theo hai cách cơ bản:

  1. Chạy một lệnh trên máy chủA để mang tập tin từ máy chủB.
  2. Chạy một lệnh trên máy chủB để gửi tập tin đến máy chủA.

Trong trường hợp thứ hai, không ai trên máy chủA cần truy cập vào máy chủB. Vì vậy, hãy thiết lập ssh dựa trên khóa từ serverB đến serverA, sau đó thêm dòng cron của bạn vào người dùng có liên quan trên máy chủB.

Ví dụ: để thực hiện việc này theo cách thủ công, bạn sẽ thực hiện:

user1@serverB $ scp /path/to/foo.txt user1@serverA:/path/to/foo.txt

Con đường này, không có ai trên máy chủA được bất kỳ quyền truy cập vào máy chủB và bạn chỉ cần có một người dùng trên máy chủB ai có thể đăng nhập vào máy chủA.

Điểm:2
lá cờ id

Một cách phổ biến để làm điều này là sử dụng sftp và chroot.

Trên máy chủ B, bạn sẽ định cấu hình ssh để chroot người dùng từ máy chủ A và hạn chế đối với sftp. ví dụ. thêm vào /etc/ssh/sshd_config

Hệ thống con sftp /usr/lib/openssh/sftp-server

Sao lưu nhóm phù hợp
    ChrootDirectory /backups/%u
    AuthorizedKeysFile %h/.ssh/authorized_keys
    ForceCommand nội bộ-sftp
    AllowTcpForwarding không

Sau đó, bạn tạo người dùng cho máy chủ A trên máy chủ B, ví dụ: người dùngA, với một thư mục /sao lưu/người dùngA (thuộc sở hữu của root). Sau đó, bạn sẽ cần một sao lưu nhóm mà người dùngA được thêm vào. Quy tắc trong cấu hình ssh được áp dụng cho người dùng trong nhóm này và quy tắc này hạn chế người dùng từ A chỉ được cung cấp dữ liệu mà họ đưa vào 'dropbox' sftp này và không cho phép họ ssh.

Đối với các bản sao lưu, tôi khuyên bạn nên sử dụng phương pháp này, kết hợp với một công cụ như duply để thực sự quản lý các bản sao lưu, để các bản sao lưu có thể được mã hóa, gia tăng, dễ dàng khôi phục, v.v.

Điểm:1
lá cờ cn

ssh và rsync (và SFTP) sẽ luôn cung cấp cho bạn thông tin đăng nhập trên máy chủ mà bạn đang kết nối mà bạn có thể hoặc không thể kiểm soát.

Tại sao không sử dụng HTTPS?

bạn có thể

  1. chạy một máy chủ trên A và có B ĐƯỢC dữ liệu
  2. hoặc chạy nó trên B và có A BƯU KIỆN nó.

Để bảo vệ dữ liệu khỏi các bên thứ ba không liên quan, bạn sẽ phải mã hóa kết nối (sử dụng HTTPS, không phải HTTP thuần túy) sử dụng ít nhất xác thực cơ bản.

Điều này sẽ không bảo vệ dữ liệu khỏi người dùng root trên một trong hai hệ thống: cả hai đều có thể đọc dữ liệu và biến đổi nó ở phía tương ứng của họ và bạn thực sự không thể làm gì về điều đó.

Một máy chủ HTTP đơn giản có thể được bắt đầu theo một số cách, ví dụ:

python -m SimpleHTTPServer 8080

Mã hóa kết nối yêu cầu tạo chứng chỉ SSL và một vài dòng mã Python:

#!/usr/bin/trăn
nhập BaseHTTPServer, SimpleHTTPServer
nhập khẩu ssl

httpd = BaseHTTPServer.HTTPServer(('0.0.0.0', 8443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='./certs_and_key.pem', server_side=True)
httpd.serve_forever()

Xác thực cơ bản yêu cầu thêm một chút mã, nhưng điều đó cũng có thể được làm.

Điểm:1
lá cờ th

Có một vấn đề với các giả định đằng sau câu hỏi của bạn. SSH được thiết kế để cấp quyền truy cập vào một hệ thống, tuy nhiên bạn muốn sử dụng SSH và không cấp quyền truy cập vào hệ thống. Có lẽ SSH không phải là công cụ phù hợp cho những yêu cầu này?

lựa chọn 1

Quá trình truyền tệp xảy ra với các trang web mọi lúc mà người tải lên không có quyền truy cập vào hệ thống cơ bản. Tạo hoặc tìm một ứng dụng web đơn giản có thể nhận tệp tải lên và ghi tệp đó vào thư mục mong muốn. Yêu cầu bí mật ứng dụng hoặc mật khẩu nếu cần. Bất kỳ người dùng root nào trên Hệ thống A đều có thể xem tệp lưu trữ bí mật của ứng dụng, vì vậy họ có thể tải tệp lên theo cách tương tự. Nhưng miễn là ứng dụng web nhận tải lên không cấp quyền truy cập đọc dưới bất kỳ hình thức nào, thì yêu cầu ngăn người dùng root khỏi Hệ thống B được đáp ứng.

Lựa chọn 2

Bạn vẫn có thể sử dụng SSH để gửi tệp. Chỉ cần giới hạn quyền. Đối với người dùng Hệ thống B được sử dụng để truyền SCP, chỉ cấp quyền ghi vào một thư mục cụ thể và không có quyền đọc trên Hệ thống B. Bạn có thể gửi các lệnh truyền tệp từ Hệ thống A để ghi vào thư mục đó, bạn sẽ không bao giờ đọc được chúng.Một lần nữa, người dùng root trên Hệ thống A sẽ có khả năng truy cập các khóa SSH và tải các tệp của riêng họ lên cùng một nơi, nhưng nếu người dùng Hệ thống B không có quyền đọc trên hệ thống tệp, thì những gì họ có thể làm sẽ bị hạn chế. Kỹ thuật này có thể nói dễ hơn làm. Người dùng root của Hệ thống A vẫn có thể lấy shell trên Hệ thống B, vì vậy trừ khi bạn giới hạn quyền trên toàn bộ hệ thống, bao gồm các lệnh thực thi của hệ thống, người dùng vẫn có thể chạy một loạt lệnh mà không cần đọc tệp dữ liệu. Vì vậy, nó phụ thuộc vào ý nghĩa của bạn khi ai đó có quyền truy cập vào hệ thống. Một lần nữa, không sử dụng SSH có lẽ là giải pháp tốt hơn ở đây.

Điểm:0
lá cờ bl
cEz

trong khi không ssh, bạn có thể thấy rằng đồng bộ hóa được quan tâm:

Nó cũng có sẵn thông qua đúng cách, cùng với các gói liên quan:

$ tìm kiếm apt -q đồng bộ hóa
Sắp xếp...
Tìm kiếm toàn văn...
golang-github-syncthing-notify-dev/focal,focal 0.0~git20180806.b76b458-1 tất cả
  Thư viện thông báo sự kiện hệ thống tệp trên steroid

golang-github-syncthing-syncthing-dev/focal,focal 1.1.4~ds1-4ubuntu1 tất cả
  đồng bộ hóa tệp phi tập trung - gói dev

đồng bộ hóa/tiêu điểm 1.1.4~ds1-4ubuntu1 AMD64
  đồng bộ hóa tập tin phi tập trung

syncthing-discosrv/focal 1.1.4~ds1-4ubuntu1 AMD64
  đồng bộ hóa tệp phi tập trung - máy chủ khám phá

syncthing-gtk/focal,focal 0.9.4.4-1 tất cả
  GUI dựa trên GTK3 và biểu tượng khu vực thông báo để đồng bộ hóa

syncthing-relaysrv/focal 1.1.4~ds1-4ubuntu1 AMD64
  đồng bộ hóa tệp phi tập trung - máy chủ chuyển tiếp

Đối với SSH, tùy thuộc vào tần suất của khoảng thời gian và do đó, yếu tố gây phiền toái, bạn có thể triển khai xác thực kép qua chiều, điều đó có nghĩa là cần phải phê duyệt các kết nối.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.