Tại sao, chmod 1777, và chmod 3777, cả hai đều thiết lập bit dính?


15

Để thiết lập bit dính trên một thư mục, tại sao các lệnh chmod 1777chmod 3777cả hai đều hoạt động?


2
Bạn đang đề xuất một hoạt động tiềm ẩn rủi ro. Sự kết hợp giữa các bit dính và rwx cho tất cả là thực hành xấu. Bất kỳ ai cũng có thể thay đổi và thực thi tệp và s-bit cho phép chuyển sang người dùng root mà không cần mật khẩu.
jippie

1
Các bit @jippie setuid và setgid sẽ biến mất nếu tệp bị sửa đổi, vì vậy bạn không thể truy cập root theo cách đó.
Kyle Jones

@KyleJones, nó vẫn nguy hiểm. Nếu passwdnhị phân có thể ghi được trên thế giới, bạn sẽ không thể truy cập root bằng cách sửa đổi nó, như bạn nói, nhưng bạn có thể thay thế nó bằng một số nhị phân khác mà mọi người sẽ chạy sau đó, nghĩ rằng đó là passwd.
tự đại diện

@Wildcard Đồng ý.
Kyle Jones

Câu trả lời:


29

Mỗi số (còn được gọi là một số bát phân vì nó là cơ sở 8) trong đó nhóm đại diện cho 3 bit. Nếu bạn biến nó thành nhị phân, nó làm cho nó dễ dàng hơn nhiều.

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1

Vì vậy, nếu bạn đã thực hiện 1777, 3777, 5777 hoặc 7777, bạn sẽ đặt bit dính vì cột thứ ba sẽ là 1. Tuy nhiên, với 3777, 5777 và 7777, bạn đang đặt thêm các bit khác (SUID cho cột đầu tiên và SGID cho cột thứ hai).

Ngược lại, bất kỳ số nào khác ở vị trí đó (tối đa là 7) sẽ không đặt bit dính vì cột cuối cùng sẽ không phải là 1 hoặc "bật".

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0


3
+1 cho một mô tả hay về cách các số bát phân hoạt động và cách áp dụng cho các bit cho phép tệp.
một CVn

1
Nó được gọi là "bitmask" và +1 cũng để giải thích / hiển thị cách có thể đặt và clearNhóm chủ sở hữu & các cột khác.
Chris K

16

Các quyền được truyền dưới dạng đối số cho chmod được chỉ định làm giá trị bát phân . Mỗi chữ số trong giá trị đại diện cho ba bit. Nếu có ba chữ số được đưa ra, bạn đang thiết lập các bit đọc, ghi và thực thi cho chủ sở hữu, nhóm và các tệp khác (mọi người khác). Nếu bốn chữ số được đưa ra, số ngoài cùng bên trái sẽ thiết lập các bit setuid, setgid và stick. Octal 1 đặt bit dính. Octal 2 đặt bit setgid. Octal 2 + bát phân 1 là bát phân 3 đặt cả bit setgid và bit dính.


1
Không phải là bát phân 2 | bát phân 1 chứ không phải bát phân 2 + bát phân 1? Các hoạt động xảy ra có cùng kết quả trong trường hợp này, nhưng nói chung nó hơi phức tạp hoặc có vấn đề, phải không?
gerrit

1
@gerrit Có, trong trường hợp chung bạn nên xem xét binary ortoán tử. Tuy nhiên, như bạn chỉ ra, trong trường hợp này, kết quả tương tự, và nhiều người quen thuộc hơn với việc bổ sung.
một CVn
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.