Điểm:2

bảo mật tệp lạ trên Ubuntu 20.04

lá cờ ky

Ubuntu 20.04, định dạng phân vùng đĩa là EXT4. người dùng bình thường có đặc quyền sudo, trong thư mục tmp, ví dụ: ~/tmp/

$ sudo chạm vào c.txt
// điều này sẽ tạo một tệp root-root(user-group) với chế độ 644, như mong đợi.
$ rm c.txt
$ rm: xóa tệp trống thông thường được bảo vệ chống ghi `c.txt'? // dấu nhắc sys
nếu tôi chọn 'y', thì c.txt sẽ bị xóa! // KHÔNG như mong đợi.

Tôi thậm chí đã thử tập tin rm không trống, vẫn có thể xóa !

Tôi đã thử cả hai máy tính với Ubutnu 20.04, giống nhau.

tại sao người dùng bình thường có thể xóa tệp gốc mà không cần sudo?

Cảm ơn!

Tái bút: Sau khi kiểm tra tài liệu trên https://help.ubuntu.com/community/FilePermissions có, người dùng bình thường có thể xóa bất kỳ tệp nào trong thư mục được kiểm soát đầy đủ (rwx=7), bất kể chủ sở hữu tệp, chế độ. tuy nhiên, có vẻ như nó không nên áp dụng với hoạt động sửa đổi. ví dụ:

//TC2
sudo vim d.txt // điều này sẽ tạo một root-root(user-group) với chế độ 644

vim d.txt   
// chỉnh sửa bởi người dùng bình thường, sử dụng w! để lưu trong vim, 
// sau khi thoát khỏi vim, nội dung tệp đã thay đổi và nhóm người dùng 
// chuyển sang nhóm người dùng hiện tại, không phải root-root nữa.

Đây là như mong đợi?

chenzero avatar
lá cờ ky
có phải vì tôi là chủ sở hữu của thư mục ~/tmp/, vì vậy tôi có thể quản lý tất cả các tệp bên dưới bất kể chủ sở hữu tệp đó là ai? Tôi sẽ kiểm tra điều này với tài liệu chính thức ...
chenzero avatar
lá cờ ky
Có khả năng một số không nhất quán trong kiểm soát quyền đối với tệp. Nếu tôi có thể sử dụng các bước TC2 để thay đổi nội dung tệp, chủ sở hữu và nhóm, tại sao tôi không thể trực tiếp thay đổi tệp bằng lệnh chown? Tôi đã thử, Nếu chạy $ chown chenzero d.txt trong thiết bị đầu cuối, chown sẽ xuất ra: thao tác không được phép.
Điểm:5
lá cờ cn

Đến xóa bỏ một tập tin từ một thư mục tất cả những gì bạn là sự cho phép trên chính thư mục, các quyền trên tệp đó không liên quan. Trong trường hợp của bạn, người dùng bình thường có toàn quyền đối với thư mục chứa tệp trong đó. bạn có thể thay đổi nó thành immutable để tránh xóa nó: tập tin sudo chattr +i

HOẶC:

Sudo chmod o-w /path_to_directory

lá cờ au
Cách tôi nghĩ về điều này là các quyền trên một tệp áp dụng * cho nội dung của nó*. Việc xóa, di chuyển hoặc đổi tên tệp không ảnh hưởng đến nội dung của tệp, vì vậy các quyền đối với tệp không liên quan; các thao tác này thay đổi nội dung của thư mục (và, để di chuyển, thư mục mà nó đang di chuyển đến), vì vậy cần có quyền ghi vào (các) thư mục. Khi bạn "xóa" một tệp, bạn thực sự chỉ đang xóa ("hủy liên kết") tệp đó khỏi thư mục và nếu không còn mục nhập thư mục nào ("liên kết") cho tệp đó, thì tệp đó sẽ biến mất.
chenzero avatar
lá cờ ky
Cảm ơn, tôi đã thử trường hợp này: sudo vim d.txt ; // điều này sẽ tạo ra một tập tin root-root 644 vim d.txt ; // chỉnh sửa với người dùng bình thường, ngay cả vim nhắc chỉnh sửa tệp chỉ đọc, tôi có thể sử dụng w! để lưu và kết quả là người dùng bình thường có thể sửa đổi tệp do root sở hữu
TooTea avatar
lá cờ cn
@chenzero Điều đó không đúng. Người dùng bình thường không thể sửa đổi tệp do root sở hữu, nhưng người dùng bình thường có thể thay thế tệp do root sở hữu bằng tệp mới do người dùng đó sở hữu, miễn là nó xảy ra trong thư mục có thể ghi đối với người dùng.
lá cờ st
@GordonDavisson: Đó thực sự là cách các thư mục hoạt động trong đời thực và trên thực tế, *tại sao* Unix gọi chúng là các thư mục chứ không phải "thư mục" như một số hệ điều hành khác gọi. Nếu tôi muốn xóa bạn khỏi danh bạ điện thoại của tôi, thì tôi không cần phải giết bạn.Nếu tôi muốn xóa một tệp khỏi một thư mục, tôi phải có quyền truy cập vật lý vào cả thư mục và tệp bên trong nó. Nếu tôi muốn xóa một tệp khỏi một thư mục, tất cả những gì tôi cần là truy cập vào thư mục đó, sau đó tôi có thể xóa hoặc gạch bỏ mục nhập đó.
chenzero avatar
lá cờ ky
@TooTea Tôi không thể thấy bất kỳ sự khác biệt nào giữa việc thay thế và thay đổi tệp --- đạt được cùng một kết quả, nội dung tệp đã thay đổi. Tôi thực sự bối rối với lý do tại sao vim w! có thể thay đổi nội dung tệp, chủ sở hữu tệp và nhóm không? Vui lòng thử TC2 trong câu hỏi của tôi. Cảm ơn.
lá cờ au
@chenzero Vấn đề là các quyền được xác định theo các hoạt động ở cấp hệ thống tệp, chứ không phải những hoạt động đó có tác dụng gì. Thay thế và thay đổi tệp có kết quả tương tự nhau, nhưng chúng rất khác nhau về các hoạt động của hệ thống tệp có liên quan, do đó, các quyền áp dụng khác nhau giữa chúng. IMO, vấn đề là các quyền unix được thiết kế bởi một chuyên gia về hệ thống tệp chứ không phải chuyên gia bảo mật, vì vậy chúng có ý nghĩa về mặt hoạt động của hệ thống tệp chứ không phải về mặt xác định chính sách bảo mật lành mạnh.
raj avatar
lá cờ cn
raj
@chenzero Điều này thực sự là do ứng dụng được thiết kế kém, thay vì **ghi vào tệp hiện có** để thay đổi nội dung của nó, trước tiên **xóa** tệp rồi **tạo tệp mới** với cùng nội dung tên, trong cùng thư mục, với nội dung mới. Ghi vào tệp hiện có yêu cầu quyền ghi **trên tệp**; xóa và tạo tệp chỉ yêu cầu quyền ghi **vào thư mục**. Quá tệ, nhiều ứng dụng được viết theo cách này ...
raj avatar
lá cờ cn
raj
@chenzero Hành vi ứng dụng như vậy có thể có các tác dụng phụ không mong muốn chẳng hạn nếu tệp gốc được liên kết cứng trong nhiều thư mục. Sau khi ứng dụng thay thế tệp theo cách đó, nó không còn được liên kết cứng với các phiên bản khác nữa. Vì vậy, điều này không nên được thực hiện... nhưng nhiều ứng dụng vẫn làm điều đó.
lá cờ au
@raj `vim` thực sự có thể lưu theo một trong hai cách - nó thường ghi lại tệp hiện có, nhưng nếu không thể, nó sẽ chuyển sang chế độ xóa và thay thế. Nhiều chương trình khác làm điều này để có được các bản lưu gần như nguyên tử hơn: chúng lưu dưới tên tạm thời, sau đó xóa bản gốc và đổi tên tạm thời vào vị trí của nó; điều này tránh để lại tệp bị hỏng nếu có sự cố xảy ra trong khi viết phiên bản mới.
chenzero avatar
lá cờ ky
Cảm ơn tất cả sự giúp đỡ của bạn! Tôi hiểu rồi, chúc một ngày tốt lành :)
lá cờ bg
@raj, nhiều người sẽ không đồng ý với bạn về hành vi mà bạn mô tả là được thiết kế kém. Có nhiều lý do chính đáng để thích ghi đè lên tệp gốc tại chỗ.
Điểm:1
lá cờ ua

Một thư mục là một danh sách các tệp và thư mục con (chính xác hơn, đối với mỗi mục: tên tệp hoặc tên thư mục con, người dùng sở hữu, nhóm sở hữu, bit quyền, quyền mở rộng, con trỏ tới vị trí trên đĩa của tệp/thư mục con và bổ sung siêu dữ liệu bí truyền). Một thư mục có một chủ sở hữu và một nhóm. Các quyền của thư mục kiểm soát người dùng và đọc, viết và đĩa CD vào thư mục đó. Nếu bạn muốn tạo một tệp trong một thư mục, bạn phải có quyền ghi vào thư mục đó. Nếu bạn muốn xóa một tệp khỏi một thư mục, bạn phải có quyền ghi vào thư mục đó. Nếu bạn muốn đổi tên một tập tin, bạn phải có quyền ghi vào thư mục. Nếu bạn muốn thay đổi quyền của một tệp, bạn phải có quyền ghi vào thư mục. Tất cả những điều này là sửa đổi của thư mục, vì vậy hãy sử dụng quyền của thư mục. (Có những trường hợp ngoại lệ liên quan đến các quyền mở rộng mà tôi đặt sang một bên ở đây.)

Trong phần sau, tôi sẽ tiếp tục viết "mục nhập thư mục bạn sử dụng để truy cập nó" vì có thể có nhiều mục nhập thư mục, do đó có thể có các tên khác nhau, cho một tệp trong hệ thống tệp. Trên thực tế, một số mục trong một thư mục (nhất thiết phải có các tên khác nhau) có thể trỏ đến cùng một tệp trên đĩa và các mục khác nhau có thể có người dùng sở hữu, nhóm sở hữu và quyền khác nhau.

Một mục nhập tệp trong một thư mục có người dùng sở hữu, nhóm sở hữu và quyền. Nếu bạn muốn đọc nội dung của một tệp, mục nhập thư mục bạn sử dụng để truy cập nó phải cho phép bạn truy cập đọc. Nếu bạn muốn ghi nội dung của một tệp, mục nhập thư mục bạn sử dụng để truy cập nó phải cho phép bạn truy cập ghi. Nếu bạn muốn thực thi nội dung của một tệp, mục nhập thư mục bạn sử dụng để truy cập nó phải cho phép bạn thực thi quyền truy cập.

Vì vậy, hãy làm việc thông qua ví dụ của bạn.

  • Thư mục làm việc hiện tại là ~/tmp/, vì vậy người dùng hiện tại là người dùng sở hữu, nhóm sở hữu và có quyền đọc+ghi+thực thi đối với thư mục.
  • sudo touch c.txt Điều này tạo ra một tập tin với người dùng sở hữu nguồn gốc có quyền đọc + ghi, nhóm nguồn gốc có quyền ghi và quyền ghi cho người dùng khác. (4 = đọc, 2 = ghi, 1 = thực thi; 6 = 4+2 = đọc+ghi)
  • rm c.txt có cảnh báo/nhắc nhở "rm: xóa tệp trống thông thường được bảo vệ chống ghi 'c.txt'?" Cảnh báo này có nghĩa là: người dùng hiện tại có quyền ghi vào thư mục hiện tại, vì vậy có thể xóa tệp này, nhưng người dùng hiện tại chỉ có quyền đọc nội dung của tệp này, điều này cho thấy rằng người dùng hiện tại muốn bảo vệ tệp này trước những thay đổi .Hai ý đồ này không tương thích với nhau nên đề nghị hướng dẫn thêm.
  • Lựa chọn yc.txt bị xóa. Đúng. Bạn có quyền xóa mục khỏi thư mục, vì vậy khi bạn trả lời y, mục nhập sẽ bị xóa khỏi thư mục. Không có lúc nào nội dung của tệp được ghi hoặc thực thi (đó là điều mà quyền truy cập tệp sẽ không cho phép).

Kịch bản thứ hai của bạn cũng hoạt động, nhưng không phải vì lý do bạn mong đợi. vim và nhiều, rất nhiều trình soạn thảo khác (bao gồm cả Microsoft Word chẳng hạn), không chỉnh sửa tệp gốc. Họ sao chép tệp, sau đó chỉnh sửa bản sao. Nếu các chỉnh sửa không được lưu, bản sao có thể bị xóa. Nếu các chỉnh sửa được lưu, tệp gốc sẽ bị xóa khỏi thư mục và bản sao được đổi tên thành tên của tệp gốc. Vì vậy, hãy xem những gì sẽ xảy ra.

kiểm tra mkdir
kiểm tra cd
ls -laF

tổng số 8
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 11:40 ./
drwxr-xr-x 78 mờ mờ 4096 Ngày 31 tháng 10 11:40 ../

Chúng tôi thấy rằng người dùng của tôi, mờ, và nhóm của tôi, mờ sở hữu thư mục hiện tại, .và 775 quyền được đặt (người dùng mờ: rwx, nhóm mờ:rwx, khác:rx).

sudo vim d.txt
[cung cấp mật khẩu]
[phiên vim bắt đầu]
[chế độ chèn]Xin chào.

Bây giờ, hãy chuyển sang trình bao khác và xem điều gì đang diễn ra trong thư mục.

[vỏ khác, không sudo ...]
kiểm tra cd
ls -laF

tổng số 20
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 11:44 ./
drwxr-xr-x 78 mờ mờ 4096 ngày 31 tháng 10 11:44 ../
-rw------- 1 thư mục gốc 12288 Ngày 31 tháng 10 11:44 .d.txt.swp

Chúng tôi thấy rằng sudo vim đã tạo một tệp tạm thời có tên .d.txt.swp với chủ sở hữu root.root và chế độ 600. Bây giờ hãy quay lại và lưu tệp vào sudo vim phiên và kiểm tra lại.

ls -laF

tổng số 12
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 11:48 ./
drwxr-xr-x 78 mờ mờ 4096 31 tháng 10 11:48 ../
-rw-r--r-- 1 gốc gốc 4 ngày 31 tháng 10 11:48 d.txt

Chúng tôi thấy mục nhập thư mục của tệp tạm thời đã được sửa đổi để có tên mới và quyền mới. Người dùng hiện tại ở đây là mờ, người chỉ có quyền đọc đối với d.txt, Nhưng đó là tất cả mờ cần mở tệp trong trình chỉnh sửa.

[phiên đầu tiên, thông báo không sudo...]
vim d.txt
[đi đến cuối dòng đầu tiên]
[ nối thêm. đã cảnh báo: "W10: Cảnh báo: Thay đổi tệp chỉ đọc"]
[nhập một dấu cách sau "Xin chào."]

Ngay sau khi chúng tôi nối thêm sau Chào. tệp tạm thời vim xuất hiện trong thư mục.

[Phiên họp thứ hai]
ls -laF

tổng số 16
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 11:53 ./
drwxr-xr-x 78 mờ mờ 4096 ngày 31 tháng 10 11:52 ../
-rw-r--r-- 1 gốc gốc 4 ngày 31 tháng 10 11:48 d.txt
-rw------- 1 mờ mờ 4096 ngày 31 tháng 10 11:53 .d.txt.swp

Thư mục này có quyền rwx cho người dùng mờ, vì vậy việc tạo mục nhập này được cho phép. Như bình thường, vim giữ quyền của các tệp tạm thời rất nghiêm ngặt.

[phần đầu tiên]
[thoát chế độ chèn]
[Esc]: w
[nhận được lỗi: "E45: tùy chọn 'chỉ đọc' được đặt (thêm ! để ghi đè)"]

Điều này có nghĩa là mục nhập thư mục gốc không có quyền ghi cho người dùng hiện tại, mờ. Điều này thường có ngữ nghĩa rằng tệp không bị sửa đổi, vì vậy vim có thể tôn trọng những ngữ nghĩa đó hoặc ghi đè lên chúng (vì quyền thư mục cho phép mờ để loại bỏ d.txt nhập và đổi tên .d.txt.swp đến d.txt). Bạn muốn cái nào?

[phần đầu tiên]
[Esc]:w!

Bạn chọn ghi đè.

Hãy xem những gì đang xảy ra trong thư mục bây giờ.

[Phiên họp thứ hai]
ls -laF

tổng số 28
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 12:01 ./
drwxr-xr-x 78 mờ mờ 4096 31 tháng 10 12:00 ../
-rw-r--r-- 1 mờ mờ 5 ngày 31 tháng 10 12:01 d.txt
-rw-r--r-- 1 mờ mờ 4 ngày 31 tháng 10 11:48 d.txt~
-rw------- 1 mờ mờ 12288 31 tháng 10 12:01 .d.txt.swp

Có thể bạn không nhìn thấy d.txt~ tập tin. tôi có thể đã bật một vim tùy chọn để luôn lưu một bản sao lưu của tệp gốc. Tôi không nhớ hành vi mặc định của vim là đối với tùy chọn này.

Bây giờ có ba tệp:

  • d.txt -- phiên bản sửa đổi mà chúng tôi vừa lưu. Nó chứa "Xin chào.". Các lần lưu tiếp theo sẽ thay thế tệp này.
  • d.txt~-- một bản sao lưu của tập tin gốc. Nó chứa "Xin chào." Mục nhập thư mục này được tạo bởi một quá trình đang chạy dưới dạng mờ, như vậy đã mờquyền sở hữu và quyền mặc định của.
  • .d.txt.swp -- tập tin làm việc hiện tại. Các chỉnh sửa tiếp theo sẽ được tự động lưu định kỳ vào tệp này.

Bây giờ chúng ta hãy kết thúc điều đó vim phiên họp.

[phần đầu tiên]
[Esc]:q

và một lần nữa xem những gì đang xảy ra trong hệ thống tập tin.

[Phiên họp thứ hai]
ls -laF

tổng số 16
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 12:05 ./
drwxr-xr-x 78 mờ mờ 4096 ngày 31 tháng 10 12:05 ../
-rw-r--r-- 1 mờ mờ 5 ngày 31 tháng 10 12:01 d.txt
-rw-r--r-- 1 mờ mờ 4 ngày 31 tháng 10 11:48 d.txt~

Cả hai tệp được tạo bởi unprivileged mờ, như vậy có mờquyền sở hữu và quyền mặc định của. mờ đã có thể tạo và xóa các mục nhập thư mục này vì mờ có quyền ghi vào thư mục hiện tại, ..

chenzero avatar
lá cờ ky
Cảm ơn những lời giải thích chi tiết tuyệt vời! Tôi thấy điểm, vim hoạt động vì nó xóa tệp trước và đổi tên bản sao lưu, không trực tiếp sửa đổi tệp gốc. Cảm ơn tất cả các bạn và có một ngày tốt đẹp!

Đă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.