Làm thế nào để bit dính hoạt động?


148

BỀN

Các bit dính áp dụng cho chương trình thực thi suy giảm hệ thống để giữ một hình ảnh của chương trình trong bộ nhớ sau khi chương trình kết thúc.

Nhưng tôi không biết rằng những gì nó được lưu trữ trong bộ nhớ. Và làm thế nào tôi có thể nhìn thấy chúng, trong trường hợp này.?


Dưới đây là một hướng dẫn tốt với các ví dụ và giải thích làm việc. Chìa khóa để hiểu điều này là hệ thống bát phân liên quan. Hướng dẫn sử dụng bit dính Linux với các ví dụ hoạt động .
CMP

Câu trả lời:


193

Đây có lẽ là một trong những điều khó chịu nhất của tôi mà mọi người rối tung mọi lúc. Bit SUID / GUID và bit dính là 2 thứ hoàn toàn khác nhau.

Nếu bạn làm một man chmodbạn có thể đọc về SUID và các bit dính. Các trang người đàn ông có sẵn ở đây là tốt.

lý lịch

đoạn trích

Các chữ cái rwxXst chọn bit chế độ tệp cho người dùng bị ảnh hưởng: read (r), write (w), thực thi (hoặc tìm kiếm thư mục) (x), chỉ thực hiện / tìm kiếm nếu tệp là thư mục hoặc đã có quyền thực thi đối với một số người dùng (X), đặt ID người dùng hoặc nhóm trên thực thi , cờ xóa bị hạn chế hoặc bit dính (t) .

BỀN / HƯỚNG DẪN

Điều mà trang man trên đang cố gắng nói là vị trí mà bit x đảm nhận trong rwxrwxrwx cho bát phân người dùng (nhóm thứ nhất của rwx) và bát phân nhóm (nhóm thứ 2 của rwx) có thể có trạng thái bổ sung trong đó x trở thành một s. Khi điều này xảy ra tệp này khi được thực thi (nếu đó là chương trình chứ không chỉ là tập lệnh shell) sẽ chạy với sự cho phép của chủ sở hữu hoặc nhóm của tệp.

Vì vậy, nếu tệp được sở hữu bởi root và bit SUID được bật, chương trình sẽ chạy dưới dạng root. Ngay cả khi bạn thực hiện nó như một người dùng thông thường. Điều tương tự áp dụng cho bit GUID.

đoạn trích

CÀI ĐẶT VÀ CÀI ĐẶT

chmod xóa bit ID nhóm nhóm của một tệp thông thường nếu ID nhóm của tệp không khớp với ID nhóm hiệu quả của người dùng hoặc một trong các ID nhóm bổ sung của người dùng, trừ khi người dùng có các đặc quyền phù hợp. Các hạn chế bổ sung có thể làm cho các bit ID người dùng và ID nhóm nhóm của MODE hoặc RFILE bị bỏ qua. Hành vi này phụ thuộc vào chính sách và chức năng của lệnh gọi hệ thống chmod cơ bản. Khi nghi ngờ, hãy kiểm tra hành vi hệ thống cơ bản.

chmod bảo tồn các bit set-user-ID và set-ID-set của thư mục trừ khi bạn xác định rõ ràng bằng cách khác. Bạn có thể đặt hoặc xóa các bit bằng các chế độ tượng trưng như u + s và gs và bạn có thể đặt (nhưng không xóa) các bit bằng chế độ số.

Ví dụ SUID / GUID

không có suid / guide - chỉ các bit rwxr-xr-x được đặt.

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

bit thực thi của người dùng và người dùng được bật (chữ thường) - các bit rwsr-xrx được đặt.

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid được kích hoạt & bit thực thi bị vô hiệu hóa (chữ hoa S) - các bit rwSr-xr-x được đặt.

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

bit thực thi của hướng dẫn & nhóm được bật (chữ thường) - các bit rwxr-sr-x được đặt.

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

hướng dẫn kích hoạt & bit thực thi bị vô hiệu hóa (chữ hoa S) - các bit rwxr-Sr-x được đặt.

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

dính chút

Mặt khác, bit dính được ký hiệu là t, chẳng hạn như với /tmpthư mục:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

Bit này phải luôn được gọi là "bit xóa bị hạn chế" được cho là những gì nó thực sự có nghĩa. Khi bit chế độ này được bật, nó tạo một thư mục sao cho người dùng chỉ có thể xóa các tệp & thư mục trong đó mà họ là chủ sở hữu.

đoạn trích

FLAG GIỚI HẠN HẠN CHẾ HOẶC BIT STICKY

Cờ xóa bị hạn chế hoặc bit dính là một bit đơn, việc giải thích phụ thuộc vào loại tệp. Đối với các thư mục, nó
ngăn người dùng không có đặc quyền xóa hoặc đổi tên tệp trong thư mục trừ khi họ sở hữu tệp hoặc thư mục; đây được gọi là cờ xóa bị hạn chế cho thư mục và thường được tìm thấy trên các thư mục có thể ghi trên thế giới như / tmp. Đối với các tệp thông thường trên một số hệ thống cũ, bit sẽ lưu hình ảnh văn bản của chương trình trên thiết bị trao đổi để nó sẽ tải nhanh hơn khi chạy; đây được gọi là bit dính.


43
Trên thực tế, bit-bit trước đây có thể được áp dụng cho các tệp thực thi, khiến cho các bit này vẫn được trao đổi sau khi chúng được tải lần đầu tiên. Điều này có thể tiết kiệm rất nhiều ổ đĩa / mạng (NFS) và CPU không cần thiết cho các chương trình được sử dụng nhiều. Tuy nhiên, cả Linux và hầu hết (tất cả?) Các hệ thống Unix đều không hỗ trợ điều này nữa (nó đã bị xóa khỏi kernel). Đó là "dính", bởi vì thực thi bị mắc kẹt trong trao đổi. Ngoài ra, nó được sử dụng cho các thư mục như bạn mô tả.
Baard Kopperud

4
Trên thực tế "sử dụng nhiều hoặc rất lớn" sẽ là một mô tả tốt hơn. Hãy nhớ rằng trường đại học của tôi có trình duyệt web Netscape là "dính" trên máy tính HP-UX của họ vào năm 1995. Vì vậy, các chương trình nhỏ thường được sử dụng (ví dụ: lệnh hệ thống được chạy thường xuyên bởi cron) và các chương trình lớn (ví dụ: Netscape) là ứng cử viên chính để được "dính". Trong cả hai trường hợp, liên tục tải lại chúng từ đĩa / NFS sẽ gây lãng phí.
Baard Kopperud

8
Các chương trình dính bit có nghĩa là lưu trú trong RAM, không phải trong trao đổi (tải hình ảnh từ tệp hoán đổi không nhanh hơn nhiều so với tải nó từ đĩa hệ thống tệp). Nó được dành cho các lệnh cấp hệ điều hành thiết yếu như ls. Rõ ràng, chỉ có siêu người dùng mới có thể thiết lập bit dính trên một tệp. Nó trở nên ít quan trọng hơn sau khi bộ nhớ ảo và thư viện chia sẻ được giới thiệu, và đặc biệt là khi máy nhắn tin trở nên thông minh hơn và có thể tự động quyết định trang nào sẽ giữ cư dân.
alexis

4
Và vì thuộc tính dính không có ý nghĩa đối với một thư mục, cùng một phần của mặt nạ quyền sau đó đã được giải thích để sửa đổi ngữ nghĩa tạo tệp truyền thống cho các thư mục.
alexis

5
@alexis: Ban đầu, các chương trình bit dính được giữ trong không gian trao đổi. Điều này nhanh hơn nhiều so với việc đọc từ hệ thống tệp vì đọc hình ảnh tệp hoán đổi là các lĩnh vực liền kề và do đó có thể được đọc hầu hết không đồng bộ. Với các hệ thống tập tin ban đầu, không có "độ dài chạy" của ngành và hầu hết các trình điều khiển hệ thống tập tin ban đầu đọc một khu vực tại một thời điểm ngay cả khi các lĩnh vực đó xảy ra liên tiếp. Kết quả trên PDP-40 là các chương trình dính dường như tải ngay lập tức trong khi các chương trình không dính mất một hoặc hai giây thông thường. Tôi nghĩ rằng chúng tôi chỉ có eddính.
wallyk

8

"Bit dính được áp dụng cho các chương trình thực thi gắn cờ hệ thống để giữ hình ảnh của chương trình trong bộ nhớ sau khi chương trình chạy xong."

Tôi nghĩ đó là thông tin khá lỗi thời, ngày nay hầu hết các Unix hiện đại đều bỏ qua điều đó. Trong Linux, bit dính chỉ liên quan đến các thư mục. Xem ở đâybài viết Wikipedia khá nhiều thông tin .

Dù sao, trong hành vi cũ đó, hình ảnh (chỉ có "mã", không phải dữ liệu) chỉ được lưu trong bộ nhớ ảo - hoán đổi thường xuyên, không phải trong bộ nhớ thực, để chạy nhanh hơn vào lần sau.


3

Bit dính là gì?

Một bit dính là một bit quyền được đặt trên một thư mục chỉ cho phép chủ sở hữu của tệp trong thư mục đó hoặc người dùng root xóa hoặc đổi tên tệp. Không có người dùng khác có các đặc quyền cần thiết để xóa tệp được tạo bởi một số người dùng khác.

Đây là một biện pháp bảo mật để tránh xóa các thư mục quan trọng và nội dung của chúng (thư mục con và tệp), mặc dù những người dùng khác có toàn quyền.


1
Điều đó không đúng: vi.wikipedia.org/wiki/Sticky_bit
AB

7
@AB Có vẻ như khá chính xác đối với tôi, gần như đến mức diễn giải phần đầu bài viết Wikpedia mà bạn trích dẫn. Có gì sai với nó?
roaima

Tôi sẽ nói rằng câu trả lời là không đầy đủ. "Dính" cũng biểu thị rằng tệp thực thi sẽ được giữ trong không gian hoán đổi để giúp nó chạy nhanh hơn. Bây giờ, đây là lịch sử cổ đại nhưng trong các hệ thống tệp cũ hơn, trình điều khiển được sử dụng để đọc một khu vực tại một thời điểm ngay cả khi các lĩnh vực đó xảy ra liên tiếp. Điều này làm cho các thực thi không dính trở nên chậm chạp, dính có ý nghĩa rất nhiều tại thời điểm đó.
GhostCode
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.