Máy chủ OpenSSH SFTP có sử dụng umask hoặc giữ quyền của phía máy khách sau khi đặt lệnh (môi trường chroot) không?


13

Tôi biết câu hỏi này đã được thảo luận, nhưng bằng cách đọc các bài đăng, tôi không thể tìm ra câu trả lời, bởi vì một số người nói "vâng, có thể làm việc được" và những người khác nói "Lệnh OpenSSH luôn giữ quyền"

Trước tất cả chỉ để chính xác:

  • Tôi sử dụng OpenSSH 5.9 trên RHEL 6.2
  • Tôi đã cấu hình một máy chủ SFTP được chroot, sử dụng internal-sftphệ thống con, với -u 0002umask
  • Tôi chính xác tôi không sử dụng -phoặc -Ptùy chọn

Từ những gì tôi đã đọc trên một mặt: có nhiều cách để xác định ô cho chuyển SFTP:

  • lựa chọn -ucủa internal-sftp(hoặc sftp-server), vì OpenSSH 5.4
  • tạo một trình bao bọc sftp-server(trong đó chúng tôi đặt ô rõ ràng - điều này không phù hợp với môi trường chroot btw)
  • thêm một cấu hình cụ thể trong pam.d/sshdtập tin

Mặt khác tôi đã đọc:

Máy khách và máy chủ OpenSSH SFTP thực hiện chuyển các quyền (dưới dạng phần mở rộng) và tạo tệp từ xa với các quyền ở phía cục bộ. AFAICT, không có cách nào để vô hiệu hóa hành vi này.

Vì vậy, tôi đã làm bài kiểm tra sau:

Trên máy khách của tôi, tôi đã tạo tập tin MYFILEvà thư mục MYDIRvới quyền 600 và 700.

Sau đó với sftpcác lệnh:

mkdir => the new directory has permissions following the umask (OK)
put MYFILE => MYFILE has same permissions as on client (KO)
put -r MYDIR => MYDIR has same permissions as on client (KO)

Nếu tôi thay đổi quyền của MYFILEMYDIRở phía máy khách và tải lên lại, tôi sẽ nhận được quyền mới ở phía máy chủ.

Tôi đã thử pam.dgiải pháp quá, nhưng nó không thay đổi gì.

Vì vậy, bây giờ tôi bối rối:

Từ những gì tôi đã thử nghiệm và một phần của những gì tôi đọc, tôi sẽ nói OpenSSH luôn bảo toàn quyền. Nhưng vì có nhiều bài viết nói rằng một ô có thể được xác định, tôi có thể tưởng tượng tôi đã làm một điều sai trong cấu hình thử nghiệm của mình.

Tôi sẽ đánh giá cao một số thông tin phản hồi có kinh nghiệm.

Cảm ơn bạn.

Câu trả lời:


12

Đầu tiên, umask là về máy chủ chứ không phải máy khách. Vì vậy, hỏi nếu putlệnh của OpenSSH client sử dụng umask là sai. Bạn nên hỏi xem máy chủ OpenSSH có sử dụng ô hay không khi tạo tệp do tải lên SFTP.

Dù sao, ứng dụng khách SFTP OpenSSH làm gì:

  • putkhông có -Pcờ, nó yêu cầu máy chủ tạo một tệp có cùng quyền như tệp cục bộ có. Sau đó, máy chủ OpenSSH (ngầm định theo quy tắc * nix) áp dụng ô.

  • putvới -Pcờ, nó bắt đầu giống nhau, nhưng sau khi quá trình tải lên hoàn tất, máy khách yêu cầu máy chủ thiết lập (tái) quyền một cách rõ ràng cho cùng một tệp cục bộ có (yêu cầu "chmod"). Đối với "chmod", ô không áp dụng.

  • mkdir, nó yêu cầu máy chủ tạo một thư mục có quyền 0777. Ô dù được áp dụng ngầm.

Dù sao, tôi tin rằng umask 0002 không có hiệu lực đối với tệp có quyền 0600, vì chúng là loại trừ lẫn nhau. Bạn nên thử ô của bạn đối với một tệp có quyền như 0644.

Vì vậy, thực sự, nó sẽ hoạt động, nếu bạn có cấu hình hệ thống như bạn mô tả. Xem bằng chứng từ hộp của tôi (Ubuntu với OpenSSH 6.2p2)

Match user user2
  ChrootDirectory /home/user2/chroot
  ForceCommand internal-sftp -u 0077
  AllowTcpForwarding no
  PermitTunnel no
  X11Forwarding no

Xem sự khác biệt về quyền sau putso với put -P:

user1:~$ touch file.txt
user1:~$ ls -l
total 0
-rw-r--r-- 1 user1 ftpuser    0 Oct 23 15:34 file.txt
user1:~$ sftp user2@localhost
user2@localhost's password: 
Connected to localhost.
sftp> cd somefolder 
sftp> put file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-------    1 1003 1001    0 Oct 23 15:35 file.txt
sftp> put -P file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-r--r--    1 1003 1001    0 Oct 23 15:34 file.txt

Btw, đặc tả SFTP mới nhất xác định hành vi của máy khách và máy chủ liên quan đến ô. Như bạn có thể thấy, OpenSSH thực sự vi phạm điều đó, mặc dù OpenSSH thực hiện SFTP phiên bản 3 chưa đề cập đến umask.

7.6. Quyền

...

Máy chủ KHÔNG NÊN áp dụng 'ô' cho các bit chế độ; nhưng nên đặt các bit chế độ theo chỉ định của máy khách. Máy khách PHẢI áp dụng một 'ô' thích hợp cho các bit chế độ trước khi gửi chúng.


Tôi đã thử với nhiều quyền khác nhau, ngay từ đầu tôi đã có 755 cho thư mục của mình ở phía máy khách và muốn lấy 775 thay thế. Nhưng nó không hoạt động. Tôi đồng ý với bạn về -P bằng cách đọc tài liệu, nhưng ngay cả khi không có cờ đó, tôi luôn nhận được trên máy chủ quyền tương tự máy khách (bất kể quyền nào)
drkzs

cảm ơn vì nhận xét, tôi đã cố gắng cải thiện tiêu đề và sửa một số thuật ngữ
drkzs

Nó nên hoạt động thực sự, xem cập nhật của tôi.
Martin Prikryl

Vâng, ví dụ của bạn không hoạt động ... nhưng nếu bạn thay đổi umask thành 0002 thì nó không còn nữa. Có lẽ bài viết này đang đưa ra vấn đề tương tự? ngoại trừ thực tế tôi đang ở openssh5.9 và tùy chọn umask đó sẽ hoạt động. Sự khác biệt giữa cấu hình SSHD của bạn và của tôi là tôi không sử dụng ForceCommand, vì vậy tôi chỉ định ô trong dòng hệ thống con. (Tôi sẽ cố gắng đăng cấu hình và kết quả, nhưng kiểm tra mạng không dễ tiếp cận)
drkzs

1
Chỉ cần rõ ràng về điểm đó: The server SHOULD NOT apply a 'umask' chỉ áp dụng khi khách hàng gửi thông tin cấp phép . Khi khách hàng không gửi thông tin cho phép, đó là hành vi nhằm mục đích áp dụng một ô!
heiglandreas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.