Lệnh 'chmod g + s'


45

Xin chào tôi muốn hiểu vai trò của chmod g+slệnh trong Unix.

Tôi cũng muốn biết những gì nó làm trong bối cảnh cụ thể này:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Tôi hiểu tất cả các vai trò lệnh ngoại trừ chmod g+svà tôi muốn biết sự khác biệt giữa các tệp undeuxkết quả từ chuỗi lệnh này.

Câu trả lời:


61
chmod g+s .;

Lệnh này đặt ID nhóm (setgid) trên thư mục hiện tại, được viết là ..

Điều này có nghĩa là tất cả các tệp và thư mục con mới được tạo trong thư mục hiện tại sẽ kế thừa ID nhóm của thư mục, thay vì ID nhóm chính của người dùng đã tạo tệp. Điều này cũng sẽ được chuyển đến các thư mục con mới được tạo trong thư mục hiện tại.

g+s ảnh hưởng đến ID nhóm của tệp nhưng không ảnh hưởng đến ID chủ sở hữu.

Lưu ý rằng điều này chỉ áp dụng cho các tệp mới được tạo . Các tệp được di chuyển ( mv) vào thư mục không bị ảnh hưởng bởi cài đặt setgid. Các tập tin được sao chép cp -pcũng không bị ảnh hưởng.

Thí dụ

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Trong trường hợp này, deuxsẽ thuộc về nhóm canardnhưng unsẽ thuộc về nhóm người dùng tạo ra nó, bất kể đó là gì.

Lưu ý nhỏ về việc sử dụng dấu chấm phẩy trong lệnh Shell

Không giống như choặc perl, một lệnh shell chỉ cần được theo sau bởi một dấu chấm phẩy nếu có một lệnh shell sau nó trên cùng một dòng lệnh. Vì vậy, hãy xem xét dòng lệnh sau:

chgrp canard .; chmod g+s .;

Dấu chấm phẩy cuối cùng là không cần thiết và có thể được loại bỏ:

chgrp canard .; chmod g+s .

Hơn nữa, nếu chúng ta đặt hai lệnh trên các dòng riêng biệt, thì dấu chấm phẩy còn lại là không cần thiết:

chgrp canard .
chmod g+s .

1
Các tập tin được sao chép (ví dụ bởi cp) trên thực tế mới được tạo. Nếu họ không kế thừa quyền của nhóm, chương trình sao chép đang chơi trò chơi, như sao chép vào một tệp tạm thời và sau đó di chuyển nó vào thư mục đích.
Kaz

1
@Kaz Điểm tốt. Tôi đã cập nhật câu trả lời để làm rõ rằng đó là cp -pghi đè cài đặt setgid.
John1024

Nhưng có cp -pghi đè cài đặt setgid không? Trên mỗi triển khai Unix duy nhất tồn tại? POSIX nói rằng không xác định được việc không sao chép ID người dùng hoặc ID nhóm theo cp -p dẫn đến thông báo chẩn đoán! Tuy nhiên, các bit S_SUID và S_SGID, tương ứng, được yêu cầu xóa trong tình huống đó (nghĩa là nếu một tệp được setuid bob, nhưng quyền sở hữu của bob không thể được sao chép để tập tin được sở hữu bởi janet, đừng làm cho nó được thiết lập janet.)
Kaz

"có cp -pghi đè cài đặt setgid không?" Theo thông số kỹ thuật POSIX, đó là những gì nó được cho là phải làm. Nó làm như vậy trên tất cả các hệ thống Unix mà tôi đã sử dụng. Bạn đã trích dẫn một phần của thông số kỹ thuật liên quan đến những việc cần làm để bảo vệ an ninh trong trường hợp khi ID nhóm không thể được sao chép. Tôi chưa bao giờ gặp phải tình huống "không thể" như vậy, phải không?
John1024

7

Bạn có thể thay đổi quyền truy cập tệp bằng lệnh chmod. Trong Unix, quyền truy cập tệp, thiết lập ai có thể có các loại quyền truy cập khác nhau vào tệp, được chỉ định bởi cả hai loại truy cập và loại truy cập. Các lớp truy cập là các nhóm người dùng và mỗi nhóm có thể được chỉ định các loại truy cập cụ thể

Unix / Linux có người dùng và nhóm người dùng có thể được chỉ định để truy cập tệp

các tùy chọn g + s như sau:

g - các quyền mà người dùng khác trong nhóm của tệp có cho nó

s - đặt ID người dùng hoặc nhóm khi thực thi

đây là cách sử dụng mẫu:

chmod =rwx,g+s filename

(cho phép mọi người đọc, viết và thực thi một tệp cụ thể và bật ID nhóm được đặt)

Để thiết lập / sửa đổi quyền của tập tin, bạn cần sử dụng chương trình chmod. Tất nhiên, chỉ chủ sở hữu của một tệp có thể sử dụng chmod để thay đổi quyền của tệp. chmod có cú pháp sau: tệp chế độ chmod [tùy chọn] Phần 'chế độ' chỉ định các quyền mới cho (các) tệp theo sau là đối số. Chế độ chỉ định quyền nào của người dùng sẽ được thay đổi và sau đó loại quyền truy cập nào sẽ được thay đổi. Hãy nói ví dụ: chmod ax socktest.pl

Điều này có nghĩa là bit thực thi sẽ bị xóa (-) cho tất cả người dùng. (chủ sở hữu, nhóm và phần còn lại của thế giới) Các quyền bắt đầu bằng một chữ cái chỉ định những gì người dùng sẽ bị ảnh hưởng bởi thay đổi, đây có thể là bất kỳ điều nào sau đây:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

Tiếp theo là một lệnh thay đổi bao gồm + (bit set) hoặc - (bit rõ ràng) và chữ cái tương ứng với bit nên được thay đổi. Hãy xem một số ví dụ:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

Những con số kỳ lạ ... Bạn có thể đã gặp phải những thứ như chmod 755 somefile và tất nhiên bạn sẽ tự hỏi đây là gì. Vấn đề là, bạn có thể thay đổi toàn bộ mẫu quyền của một tệp bằng cách sử dụng một số giống như số trong ví dụ này. Mỗi chế độ có một số mã tương ứng, và như chúng ta sẽ thấy có một cách rất đơn giản để tìm ra số nào tương ứng với bất kỳ chế độ nào. Mỗi một trong ba chữ số trên số chế độ tương ứng với một trong ba bộ ba quyền. (u, g và o) Mỗi ​​bit cho phép trong bộ ba tương ứng với một giá trị: 4 cho r, 2 cho w, 1 cho x. Nếu bit quyền bạn thêm giá trị này vào số bộ ba quyền. Nếu nó bị xóa, sau đó bạn không thêm gì. (Một số bạn có thể nhận thấy rằng trên thực tế,

Bộ ba cho bạn: rwx => 4 + 2 + 1 = 7

Bộ ba cho g: r-x => 4 + 0 + 1 = 5

Bộ ba cho o: r-x => 4 + 0 + 1 = 5

Mà làm cho: 755

Vì vậy, 755 là một cách ngắn gọn để nói 'Tôi không phiền nếu người khác đọc hoặc chạy tệp này, nhưng chỉ tôi mới có thể sửa đổi nó' và 777 có nghĩa là 'mọi người đều có quyền truy cập đầy đủ vào tệp này'

tài liệu tham khảo hoàn hảo


0

Kết quả của lệnh ls sẽ phụ thuộc vào ô.

g + s sẽ đặt sgid vào tệp. Kiểm tra tại đây để biết thêm thông tin sâu về SUID SGID

vì vậy, nếu ví dụ của bạn là 022, kết quả sẽ là:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un

0

Trong Linux, một trong các tùy chọn gắn kết mặc định cho máy lẻ? fs là 'nogrpid | sysvgroups '. Vì vậy, lần chạm đầu tiên un, tạo một tệp có id nhóm bằng fsgid của quá trình tạo trong đó fsgid = egid.

chmod g + s., làm cho việc tạo tệp / thư mục tiếp theo kế thừa id nhóm từ thư mục mẹ và nếu điều được tạo là một thư mục thì nó cũng được đặt g + s làm cha mẹ của nó.

Ở đây chạm vào deux, tạo deux, với canard nhóm.

Các ngữ nghĩa thay đổi nếu tùy chọn gắn kết là 'grpid | Trong trường hợp đó, bsdgroups ', việc tạo tệp / thư mục mới sẽ kế thừa id nhóm từ thư mục mẹ của nó ngay cả khi không đặt g + s cho chính cha mẹ.

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.