Làm thế nào để duy trì quyền sở hữu một tập tin sau khi chỉnh sửa?


11

Câu hỏi của tôi tương tự như câu hỏi khác , ngoại trừ câu hỏi về các tệp mới được tạo.

Trong hộp Unix của tôi, người dùng alice , bobtomcat nằm trong nhóm tomcat .

Các tệp cấu hình của máy chủ Tomcat được sở hữu bởi người dùng tomcat và trong nhóm tomcat.

Tôi đã thay đổi quyền của tệp này thành có thể đọc và ghi theo nhóm để alice và bob có thể chỉnh sửa các tệp.

Tuy nhiên, tôi đã nhận thấy rằng sau khi chỉnh sửa, tệp sẽ trở thành sở hữu của người dùng cuối cùng đã chỉnh sửa nó.

H: Có thể thay đổi quyền để Alice và Bob có thể chỉnh sửa các tệp mà không thay đổi quyền sở hữu không?

Làm thế nào để chỉnh sửa một tập tin thay đổi quyền sở hữu của nó anyway?


Mục tiêu của bạn là đảm bảo rằng tomcat tiếp tục sở hữu các tệp, hay là để đảm bảo rằng: máy chủ tomcat tiếp tục hoạt động; alice và bob đều có thể tiếp tục chỉnh sửa các tệp và bảo mật đó có được duy trì không?
ctrl-alt-delor

1
Tôi cho rằng dịch vụ tomcat đang chạy dưới người dùng 'tomcat', dựa trên cách câu hỏi của bạn được diễn đạt. Điều này có lẽ là không mong muốn vì việc khai thác tomcat có thể dẫn đến cấu hình của chính nó được viết lại để lộ các bit của máy chủ của bạn mà bạn có thể không có ý định. Bạn nên cân nhắc sử dụng một nhóm khác có thể viết cấu hình, trong khi nhóm tomcat có thể đọc, nhưng không thể viết.
Ed Neville

Câu trả lời:


17

Người dùng kết quả của tệp phụ thuộc vào những gì trình soạn thảo làm. Một số trình soạn thảo lưu tệp bằng cách cắt bớt tệp và ghi lên tệp (mà không thay đổi nút). Và một số biên tập viên đổi tên tập tin vào một tên khác ( fileđể file~là bình thường), và tạo một file mới với tên của bản gốc. Sửa đổi tệp gốc giữ cho chủ sở hữu giống nhau, tạo một tệp mới làm cho tệp mới được sở hữu bởi UID của quá trình tạo.

Của các biên tập viên tôi có trên Debian, nanojoecũng nvivim(phiên bản tối thiểu trong vim-tiny) dường như để ghi đè tại chỗ. Mặc dù tôi cho rằng vimvà Emacs có thể cấu hình trong những gì họ làm.


Stephen bình luận về cập nhật nguyên tử . Vấn đề với việc tạo lại tại chỗ là tệp bị cắt ngắn đến 0, sau đó được viết. Một quy trình khác có thể mở và đọc nó trước khi tất cả dữ liệu được viết.

Một bản cập nhật nguyên tử sẽ được thực hiện bằng cách tạo phiên bản mới như nói file.new, sau đó đổi tên file.newthành file. Để lại một tập tin sao lưu, người ta có thể tạo file.new, liên kết fileđến file~và sau đó đổi tên file.newđể file. Việc đổi tên là nguyên tử ở chỗ bất kỳ quá trình nào truy cập tệp theo tên đều là phiên bản cũ hoặc phiên bản mới, không phải bất cứ điều gì ở giữa. Tất cả các xử lý tệp đang mở tất nhiên sẽ trỏ đến tệp được giữ mở, đưa ra một cái nhìn nhất quán về tệp.


Từ quan điểm cấp phép tệp , lưu trên cùng một tệp (inode) yêu cầu quyền truy cập ghi vào chính tệp (nhưng không phải thư mục), đổi tên tệp và tạo tệp mới yêu cầu quyền truy cập ghi vào thư mục (nhưng không phải vào tệp gốc ).

(Đổi tên và tạo lại cũng là một cách sửa lỗi quyền của tệp trong trường hợp ai đó tạo hoặc sửa đổi tệp trong thư mục dùng chung, nhưng quên cung cấp quyền truy cập ghi vào nhóm.)


6
Tạo và đổi tên cũng là cách duy nhất để đảm bảo rằng tệp được cập nhật nguyên tử bằng cách sử dụng ngữ nghĩa POSIX.
Stephen Kitt

giải thích tốt đẹp.
Mian Asbat Ahmad 17/07/18

13

Theo giải thích của ilkkachu , nếu trình soạn thảo đang được sử dụng tạo một tệp mới khi lưu, thì không có cách nào kiểm soát chủ sở hữu của tệp. Điều bạn có thể thực sự quan tâm mặc dù là đảm bảo các tệp vẫn có thể đọc được bởi Tomcat; bạn có thể làm điều đó bằng cách đảm bảo nhóm của họ tomcat(và nhóm của họ có thể đọc được) và điều đó có thể được thực thi trên các tệp mới bằng cách đặt setgidbit trên thư mục mẹ :

chmod g+s .

Do đó, nếu bobchỉnh sửa tệp bằng trình chỉnh sửa tạo lại tệp, tệp đã chỉnh sửa sẽ bị sở hữu bob:tomcatvà Tomcat vẫn có thể đọc tệp ( umaskít nhất là với một điển hình ). Miễn là thư mục mẹ có thể ghi được bởi tomcatnhóm, bất kỳ người dùng nào trong nhóm đó sẽ có thể chỉnh sửa các tệp trong thư mục (nếu chỉ bằng cách tạo lại chúng).

Tuy nhiên, tôi muốn giới thiệu việc thay đổi quy trình của bạn; có lẽ bạn không nên chỉnh sửa các tệp trực tiếp ở vị trí mà Tomcat đã đọc. Lý tưởng nhất là các tệp sẽ được duy trì trong một loại VCS nào đó và được triển khai theo một quy trình riêng (có thể tự động). Bằng cách đó bạn tránh được tất cả những vấn đề sở hữu này ...


giải pháp tốt đẹp !!
Mian Asbat Ahmad 17/07/18
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.