Người dùng không thể chạm -t


10

Khi SCP đến máy chủ Fedora của tôi, người dùng sẽ gặp lỗi về việc không thể sửa đổi dấu thời gian của tệp ("không đặt thời gian: thao tác không được phép"). Người dùng không phải là chủ sở hữu của tệp, nhưng chúng tôi không thể gửi chowntệp cho người dùng này vì lý do bảo mật. Người dùng có thể sudo, nhưng vì điều này xảy ra thông qua máy khách SCP / FTP, nên cũng không có cách nào để làm điều đó. Và cuối cùng, chúng tôi không muốn phải cấp quyền truy cập root cho người dùng này, chỉ để cho phép anh ta sử dụng đồng bộ hóa như rsync hoặc WinSCP cần đặt dấu thời gian.

Người dùng là một phần của một nhóm với toàn rwquyền trên tất cả các tệp và thư mục có liên quan. Bạn có suy nghĩ gì về cách cấp quyền cho người dùng cho touch -tcác tệp cụ thể này mà không cần gửi chownchúng cho anh ấy không?

Thông tin thêm Tất cả điều này phải làm với việc cho phép phát triển PHP trong kịch bản một nhà phát triển (ví dụ: không có SCM). Tôi đang cố gắng làm việc với Eclipse hoặc NetBeans để làm việc trên một bản sao cục bộ của trang web dựa trên PHP (WordPress), đồng thời cho phép người dùng "xem trước" các thay đổi của mình trên máy chủ phát triển. Người dùng sẽ làm việc từ xa. Cho đến nay, tất cả các lần thử đồng bộ hóa tự động đều thất bại - ngay cả khi sử dụng WinSCP ở chế độ "xem thư mục", trong đó nó theo dõi thư mục cục bộ và cố gắng tải lên bất kỳ thay đổi nào đối với lỗi thư mục từ xa vì nó luôn cố gắng đặt ngày / dấu thời gian .

Người dùng có quyền truy cập sudo, nhưng tôi được cho biết rằng thực sự không phải là một ý tưởng tốt để làm việc dưới 'root', vì vậy tôi đã không sẵn lòng chỉ đăng nhập với quyền root để thực hiện công việc này. Bên cạnh đó, nó không cần thiết. Tôi muốn một số người không phải là siêu người dùng khác có thể làm điều tương tự - sử dụng thông tin tài khoản của họ, thiết lập kết nối FTP và có thể hoạt động từ xa thông qua đồng bộ hóa. Vì vậy, giải pháp cần phải làm việc cho một người không có quyền truy cập root.

Điều làm tôi lo lắng là tôi gặp bao nhiêu khó khăn. Tất cả các phần mềm này (NetBeans, Eclipse, WinSCP) được thiết kế để cho phép đồng bộ hóa và tất cả chúng đều cố gắng viết dấu thời gian. Vì vậy, nó phải có thể. WinSCP có tùy chọn tắt "đặt dấu thời gian", nhưng tùy chọn này sẽ không khả dụng (luôn luôn "bật") khi bạn chọn thư mục theo dõi / đồng bộ hóa. Vì vậy, nó đã trở thành một cái gì đó khá chuẩn.

Cho rằng tôi là một thằng ngốc hoàn toàn khi nói đến Linux và tôi là "quản trị viên máy chủ", tôi chỉ có thể cho rằng đó là một điều ngu ngốc mà tôi đang làm hoặc tôi đã cấu hình (mis).

Tóm tắt Tóm lại, tôi muốn bất kỳ người dùng nào có quyền truy cập nhóm r / w vào một thư mục, để có thể thay đổi dấu thời gian trên các tệp trong thư mục đó thông qua SCP.


1
Là hệ thống tập tin của bạn được gắn với một cái gì đó buồn cười? Bạn đang sử dụng ACL? Thông thường điều này sẽ có thể với thành viên nhóm.
Caleb

5
Về cơ bản hệ thống của bạn đang nói với bạn, "Bạn không thể chạm vào -t [của anh ấy]."
boehj

@Caleb: Không, bạn chỉ có thể đặt thành ngày hiện tại trừ khi bạn là chủ sở hữu. @Tom: Điều quan trọng là ngày được tôn trọng? Bạn có thể mở rộng một chút về các yêu cầu: nếu người dùng có thể ghi vào tệp, tại sao anh ta có thể sở hữu chúng? Thông thường, trong những tình huống này, bất cứ ai cuối cùng viết vào tệp đều sở hữu nó.
Gilles 'SO- đừng trở nên xấu xa'

@Tom: Có một mâu thuẫn rõ ràng giữa những người mà chúng tôi không muốn cung cấp cho người dùng này quyền truy cập root và người dùng. Về việc bạn sử dụng rootnhóm: rootnhóm không có quyền đặc biệt, chỉ có rootngười dùng mới thực hiện.
Gilles 'SO- đừng trở nên xấu xa'

Câu trả lời:


10

Tại sao nó không hoạt động

Khi bạn cố gắng thay đổi thời gian sửa đổi của tệp bằng touchhoặc nói chung hơn với lệnh gọi hệ thống cơ bản utime, có hai trường hợp.

  • Bạn đang cố gắng đặt thời gian sửa đổi của tệp thành một thời gian cụ thể. Điều này đòi hỏi bạn phải là chủ sở hữu của tập tin. (Về mặt kỹ thuật, ID người dùng hiệu quả của quy trình phải là chủ sở hữu của tệp.²)
  • Bạn đang cố gắng đặt thời gian sửa đổi của tệp thành thời gian hiện tại. Điều này hoạt động khi và chỉ khi bạn có quyền ghi vào tệp. Lý do cho ngoại lệ này là dù sao bạn cũng có thể đạt được hiệu ứng tương tự bằng cách ghi đè một byte hiện có của tệp có cùng giá trị¹.

Tại sao điều này thường không quan trọng

  • Khi bạn sao chép các tệp bằng ftp, scp, rsync, v.v., bản sao sẽ tạo một tệp mới thuộc sở hữu của bất kỳ ai đã sao chép. Vì vậy, máy photocopy có quyền đặt thời gian của tệp.
  • Với rsync, bạn sẽ không thể đặt thời gian của các thư mục hiện có: chúng sẽ được đặt thành thời gian khi tệp được đồng bộ hóa lần cuối trong chúng. Trong hầu hết các trường hợp, điều này không thành vấn đề. Bạn có thể yêu cầu rsync không làm phiền với thời gian thư mục bằng cách chuyển --omit-dir-times( -O).
  • Với các hệ thống kiểm soát phiên bản, ngày sửa đổi được lưu trữ bên trong các tệp; siêu dữ liệu trên các tập tin hầu hết không liên quan.

Các giải pháp

Tất cả điều này phải làm với việc cho phép phát triển PHP theo kịch bản một nhà phát triển (nghĩa là: không có SCM).

Ok, dừng lại ở đó. Chỉ vì có một nhà phát triển duy nhất không có nghĩa là bạn không nên sử dụng SCM. Bạn nên sử dụng SCM. Yêu cầu nhà phát triển kiểm tra một tệp và cung cấp cho anh ta một cách để nhấn nút triển khai trên mạng để kiểm tra các tệp từ SCM vào thư mục trực tiếp.

Hoàn toàn không có lý do kỹ thuật tại sao bạn không nên sử dụng SCM, nhưng có thể có một lý do của con người. Nếu người làm việc trên các tệp này tự tạo kiểu cho nhà phát triển, thì anh ta nên sử dụng SCM. Nhưng nếu đây là một người phi kỹ thuật đẩy tài liệu vào, SCM có thể quá phức tạp. Vì vậy, tiếp tục đẩy các tập tin qua FTP hoặc SSH. Có ba cách này có thể làm việc.

  • Bạn có thực sự cần phải đồng bộ hóa thời gian? Như đã chỉ ra ở trên, rsynccó một tùy chọn để không đồng bộ hóa thời gian. Scp không trừ khi bạn nói với nó. Tôi không biết WinSCP nhưng có lẽ nó cũng có thể.
  • Tiếp tục làm những gì bạn đang làm, chỉ cần bỏ qua tin nhắn về thời gian. Các tập tin vẫn đang được sao chép. Đây không phải là một lựa chọn tốt, vì bỏ qua lỗi luôn có rủi ro. Nhưng nó là kỹ thuật có thể.
  • Nếu bạn cần linh hoạt trong việc điền các tệp do apachengười dùng sở hữu , thì cách tiếp cận thông thường sẽ là cho phép người dùng SSH truy cập như apache. Cách tiếp cận dễ dàng là yêu cầu người dùng tạo khóa riêng SSH và thêm khóa chung tương ứng vào ~apache/.ssh/authorized_keys. Điều này có nghĩa là người dùng sẽ có thể chạy các lệnh tùy ý như apachengười dùng. Vì dù sao bạn cũng đồng ý cung cấp quyền sudo cho người dùng, nên trong trường hợp của bạn không có vấn đề gì. Có thể, nhưng không dễ, để đặt nhiều hạn chế hơn (bạn cần một mục nhập cơ sở dữ liệu người dùng riêng biệt với một tên khác, cùng ID người dùng, vỏ bị hạn chế và nhà tù chroot; chi tiết trong một câu hỏi riêng, mặc dù điều này có thể đã được đề cập trên trang web này hoặc trên Server Fault ).

¹ Hoặc, đối với một tập tin rỗng, hãy viết một byte và sau đó truncate.
² Chặn các biến chứng bổ sung, nhưng không có biến chứng nào tôi biết áp dụng ở đây.


Cảm ơn Gilles, cho lời giải thích thú vị. Tôi không chắc chắn bao nhiêu rõ ràng hơn tôi có thể về trường hợp sử dụng tuy nhiên. NetBeans tiếp tục đưa ra các lỗi "không thể ngắt kết nối" bất cứ khi nào tôi đồng bộ hóa (mặc dù tệp được truyền chính xác và được xác minh trên máy chủ); WinSCP đưa ra 'thời gian thiết lập: lỗi không được phép hoạt động'; khi tôi mở tệp, tôi nhận được cảnh báo về việc không thể đặt dấu thời gian thành thời gian trong tương lai. Ngoài ra tôi không biết vấn đề nằm ở đâu. Tôi chỉ đơn giản muốn có thể đồng bộ hóa một địa phương với một thư mục từ xa. thông qua SCP / FTP và vấn đề dường như là dấu thời gian. Không giúp đỡ à? Chắc là không.
Tom Auger

@Tom: Tôi vẫn không hiểu tại sao bạn không thể có người dùng sở hữu các tệp.
Gilles 'SO- ngừng trở nên xấu xa'

Một số tệp cần được sở hữu bởi Apache (ví dụ: thư mục tải lên) để tôi không thể thay đổi chủ sở hữu, chỉ vì ai đó đang làm việc trên một số tệp trong thư mục. Những gì bạn đang nói không có ý nghĩa - khi tôi viết quá nhiều tệp bằng FTP, chủ sở hữu không nhất thiết phải thay đổi. Tôi không thấy sự cần thiết phải thay đổi hành vi này.
Tom Auger

@Tom: Chủ sở hữu không thay đổi chỉ vì đây là các tệp hiện có. Tôi không hiểu tại sao bạn không cho phép người dùng tải lên các tệp như apache- sau đó họ sẽ có thể đặt thời gian. Xem câu trả lời sửa đổi của tôi cho giải pháp đúng và một vài giải pháp tối ưu.
Gilles 'SO- ngừng trở nên xấu xa'

Cảm ơn đã gắn bó với câu hỏi này Gilles. Sử dụng SVN hoặc một số biến thể là tối ưu dưới góc độ phát triển. Bất cứ ai đã thực hiện phát triển web từ xa đều có thể cho bạn biết rằng quy trình này thường là gia tăng vi mô - đặc biệt là khi tạo kiểu trực quan - vì vậy bạn sẽ thực hiện cam kết cứ sau 30-60 giây. Nếu bạn phải liên tục thoát khỏi IDE của mình, hãy chạy một cam kết và sau đó xem trước trình duyệt của bạn, bạn đang thêm một tấn chi phí cho quá trình đơn giản. SVN chỉ có ý nghĩa trong bối cảnh khi nhiều nhà phát triển đang làm việc trên cùng một phần của trang web. Nó khác với lập trình.
Tom Auger

2

Bạn có thể thiết lập rsync để sử dụng sudo ở đầu xa như thế này:

rsync -ave ssh --rsync-path="sudo rsync" /source/ user@host:/dest/

Quy tắc sudo sẽ là gì? Chỉ cần cho phép rsync sẽ cho phép người dùng ghi đè lên các tệp tùy ý. Thật khó để có được các giới hạn đối số đúng, và dù sao ở đây tôi nghĩ rằng bạn cần đặt các hạn chế đối với đầu vào của rsync, điều này có thể về mặt kỹ thuật với một tập lệnh bao bọc nhưng không dễ dàng.
Gilles 'SO- đừng trở nên xấu xa'

Bạn nói đúng, cho phép sudo rsynclà rất khó để hạn chế. Tôi chỉ đề xuất nó vì OP cho biết người dùng đã có quyền truy cập sudo.
Caleb

Cảm ơn - điều này thật thú vị, mặc dù nhà phát triển đang ở trên một hộp Windows, vì vậy tôi không chắc rsync là cách tốt nhất để đi. Một lần nữa, như tôi đã đề cập trong phần chỉnh sửa bài đăng của mình, tôi muốn giải pháp này hoạt động cho bất kỳ người dùng trung bình nào, không phải một số người dùng được bảo mật, ngoài một người thuộc nhóm sở hữu thư mục cụ thể đó.
Tom Auger

Tôi nghĩ rằng điều tiếp theo cần xem xét là thiết lập ACL (Danh sách điều khiển truy cập), nhưng tôi có ít kinh nghiệm trong lĩnh vực này để có thể một số guru có thể thêm câu trả lời và giải thích nếu và làm thế nào điều này có thể được thực hiện.
Caleb
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.