Life would be so much simple if we don't care so much

Posts tagged ‘sgid’

Linux – SGID (Set Group ID) – Quyền truy cập đặc biệt

SGID (Set Group ID) – Quyền truy cập đặc biệt
Trong linux bên cạnh SUID (Set User ID) thì còn có 1 quyền truy cập đặc biệt được gọi là SGID (Set Group ID) . Ở bài này sẽ giải thích về SGID (Set Group ID)

1. SGID (Set Group ID) là gì?

SGID (Set Group ID) nghĩa là quyền truy cập đặc biệt vào 1 file và có khả năng thực thi. Khách với SUID thì SGID có thể được thiết lập cho thư mục.

Trường hợp setting SGID (Set Group ID) cho file thực thi thì khi execute file đó file sẽ được thực thi dưới quyền của group owner.
Trường hợp setting SGID (Set Group ID) cho thư mục thì group owner của những file và thư mục con của thư mục đó sẽ trở thành group owner của thư mục mà được thiết lập SGID (Set Group ID)

2. Setting SGID (Set Group ID) như thế nào?

Để thiết lập SGID (Set Group ID) thì sẽ thực hiện command chmod như dưới đây:

chmod g+s file
Trong trường hợp setting quyền truy cập ở numberic mode thì add thêm vào 2000 cho giá trị số. Chẳng hạn muốn set SGID (Set Group ID) cho 1 file thực thi có quyền truy cập là 755 thì giá trị sẽ trở thành 2775

chmod 2755 file

***Note
Khi thiết lập SGID(Set Group ID) cho thư mục thì option cũng tương tự

3. Check SGID(Set Group ID)

Để confirm lại SGID (Set Group ID) thì có thể dùng lệnh「ls -l」

# touch file
# chmod 2755 file
# ls -l file
-rwxr-sr-x 1 root group2 0 7月 26 08:24 file
Phần permission của group là r-s. Phần quyền thực thi file thì thông thường là x nhưng ở đây là s nên mang ý nghĩa là SGID (Set Group ID) đang được thiết lập.

4. 1 số sample sử dụng
Trong thực tế, thiết lập SGID (Set Group ID) và check lại cách hoạt động. Test cả 2 trường hợp khi thiết lập file thực thi lẫn directory.

Khi set file thực thi, sử dụng root

# id
uid=0(root) gid=0(root) 所属グループ=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

# cp /bin/touch .  ← copy lệnh touch
# chgrp group1 touch  ← set group là group1
# chmod g+s touch  ← set SGID
# ls -l touch
-rwxr-sr-x 1 root group1 42284 7月 26 08:28 touch ← SGID được thiết lập

# ./touch test.txt

# ls -l test.txt
-rw-r–r– 1 root group1 0 7月 26 08:30 test.txt ← group owner đã trở thành group1
***Note
Bởi vì chúng ta thực thi command ở root account nên tuỳ theo command mà group của file được tạo ra sẽ là root.
Để thiết lập SGID cho command touch, command được thực thi bởi quyền root:group1và group của file được tạo ra sẽ là group1.

Khi thiết lập với directory
Trường hợp set SGID với directory thì các sub file/directory sẽ được set với group owner của directory đã được set SGID.

# mkdir dir ← Tạo thư mục
# chgrp group1 dir ← Set group 1 cho group owner
# chmod g+s dir ← Set SGID

# ls -ld dir
drwxr-sr-x 2 root group1 4096 7月 26 08:33 dir  ← group trở thành group 1 của directory đã được set SGID

# touch dir/test.txt  ← dùng root account, tạo sub file cho thư mục dir
# mkdir dir/test_dir  ← dùng root account, tạo sub directory cho thư mục dir
# ls -l dir
合計 12
-rw-r–r– 1 root group1 0 7月 26 08:33 test.txt  ← group trở thành group1
drwxr-sr-x 2 root group1 4096 7月 26 08:34 test_dir  ← group trở thành group1
***Note
Khi tạo sub directory cho directory được set SGID thì sub directory cũng sẽ được set SGID. Có vẻ là có vấn đề về security nên cần chú ý sử dụng thích hợp.

 

Advertisements