banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix SUID, SGID and the Sticky Bits?  XML
  [Question]   SUID, SGID and the Sticky Bits? 30/04/2010 10:52:53 (+0700) | #1 | 210075
Doorkeeper
Member

[Minus]    0    [Plus]
Joined: 20/05/2008 11:37:48
Messages: 74
Offline
[Profile] [PM] [WWW]
Mong các anh giải thích giúp em 3 khái niệm SUID, SGID và Sticky Bits, đặt biệt là phân biệt sự khác nhau giữa SUID và SGID. Em vẫn còn hiểu mơ hồ về khái niệm này. Mong các anh lấy những ví dụ cụ thể để em hiểu hơn, em cám ơn smilie
[Up] [Print Copy]
  [Question]   SUID, SGID and the Sticky Bits? 30/04/2010 13:20:48 (+0700) | #2 | 210076
[Avatar]
nhanth87
Member

[Minus]    0    [Plus]
Joined: 12/08/2009 08:54:00
Messages: 168
Offline
[Profile] [PM]
SUID, SGID trên forum thảo luận nhiêu rồi mà.
Sticky bit lần đầu mình nghe đó. không biết có phải là bit "i" không?
Aricent - Software Engineer
[Up] [Print Copy]
  [Question]   SUID, SGID and the Sticky Bits? 30/04/2010 19:25:03 (+0700) | #3 | 210092
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

nhanth87 wrote:

Sticky bit lần đầu mình nghe đó. không biết có phải là bit "i" không? 

Không phải immutable attribute đâu bạn à.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   SUID, SGID and the Sticky Bits? 30/04/2010 22:48:33 (+0700) | #4 | 210099
[Avatar]
bolzano_1989
Journalist

[Minus]    0    [Plus]
Joined: 30/01/2007 12:49:15
Messages: 1406
Offline
[Profile] [PM]
Về Sticky Bit, bạn có thể xem ở đây:
http://linuxdevcenter.com/pub/a/linux/lpt/22_06.html

Kiểm tra các file bạn nghi ngờ có virus:
http://goo.gl/m3Fb6C
http://goo.gl/EqaZt
http://goo.gl/gEF8e
Nhận mẫu virus qua FB: http://goo.gl/70Xo23
HVA Malware Response Team: kiemtravirus@gmail.com
Trợ giúp diệt virus: http://goo.gl/2bqxY
[Up] [Print Copy]
  [Question]   SUID, SGID and the Sticky Bits? 01/05/2010 06:32:28 (+0700) | #5 | 210101
Doorkeeper
Member

[Minus]    0    [Plus]
Joined: 20/05/2008 11:37:48
Messages: 74
Offline
[Profile] [PM] [WWW]

nhanth87 wrote:
SUID, SGID trên forum thảo luận nhiêu rồi mà.
Sticky bit lần đầu mình nghe đó. không biết có phải là bit "i" không? 

mình biết rồi, mình cũng có xem qua rồi nhưng thật sự ... không hiểu nên mới hỏi lại mọi người và nhờ mọi người lấy ví dụ smilie
[Up] [Print Copy]
  [Question]   SUID, SGID and the Sticky Bits? 01/05/2010 16:37:16 (+0700) | #6 | 210125
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]
SUID và SGID có một chức năng là chuyển owner ứng dụng cho ứng dụng đang chạy mà file chương trình có được set nó.
Nếu hiểu 1 chút về cơ chế áp dụng quyền và khởi chạy ứng dụng của Unix/Linux, thì sẽ có thể hiểu được chức năng và tại sao lại có SUID.

Mọi thứ trên Linux đều thuộc về 1 user nào đó, biểu hiện qua UID (là một con số tự nhiên >=0 thôi). Kể cả file, directory, process, mem hay IPC, bất cứ resource nào mà hệ thống cấp đều gắn với UID, nhằm mục đích là phân quyền, kiểm soát. Các process, tức là 1 dạng đang chạy của 1 ứng dụng giao tiếp với kernel thông qua các Kernel API và file system (/proc/xxx) (khác với file chương trình executable file là dạng đang nằm lưu trữ).
Việc process call 1 kernel API thực chất sẽ "chuyển context" của ứng dụng đang chạy thành mức kernel, với quyền tối cao xử lý, việc thực thi đoạn mã hàm đó của kernel đã được kernel sắp đặt cố định, bạn không thể can thiệp. Bất kỳ một process nào cũng có quyền call API, nhưng API được gọi sẽ kiểm tra được process uid để hành xử thích hợp, và sẽ trả lời là permission deny nếu như process uid không được phép làm việc đó.

Linux có hàm setuid, setgid để chuyển owner cho process gọi hàm này thành uid ở tham số, tuy nhiên việc này chỉ có thể làm trong 1 số điều kiện nhất định, chỉ có process chạy với uid = 0 (tức là root) mới có thể gọi hàm đó để chuyển uid cho mình sang 1 uid bất kỳ khác, còn các process với uid <> 0 thì ko được phép làm vậy, dù có gọi cũng bị return giá trị lỗi permission deny (kiểu như vua thì có thể ký lệnh tự biến mình thành quan hay thứ dân, còn thứ dân ko tự ký lệnh biến mình thành vua, quan hay bất kỳ ai, tất nhiên vua mà thành thứ dân thì cũng chỉ có quyền như thứ dân khác chứ ko còn được quay lại trở thành vua nữa).

Khởi động 1 process, dùng hàm API là exec, thì ứng dụng mới sẽ thay thế và thừa kế quyền/owner/hầu như mọi thứ của ứng dụng gọi nó. Ví dụ bạn đang ở shell với user abc, thì khi call lệnh ls, thì shell sẽ gọi hàm exec lệnh ls, process có tên ls mới thừa kế mọi thứ từ shell gọi nó, tức là uid là abc.
(dân sinh ra con thì con vẫn là dân, còn vua sinh ra con thì con là vua, trừ khi cha nó sắp đặt để thằng con tự biến mình thành dân sau khi nó được sinh ra, kết hợp 2 step exec và setuid, là cách để ứng dụng login cho một user bình thường).

Vấn đề là, một user bình thường đôi khi cần quyền của 1 ông vua hay quan, ví dụ user tự đổi mật khẩu thì process có tên passwd (là 1 một ứng dụng như mọi ứng dụng khác như làm cái việc đổi mật khẩu) phải được write vào file /etc/passwd hoặc /etc/shadown (2 file đó user bình thường ko có quyền đó). Không có hàm API nào để làm việc đổi mật khẩu đó, kernel ko cung cấp các hàm kiểu như đổi mật khẩu, phải thao tác file lưu mật khẩu đó trực tiếp. Vì không thể tự biến thành vua, nếu exec passwd như cách thông thường, thì passwd sẽ chỉ có quyền thứ dân, tất ko thể write được /etc/passwd. Phải có 1 cách nào đó để lệnh passwd khi chạy trở thành process với quyền tối cao hoặc tương đương để làm cái việc đó.

Mọi thứ trên linux là file, do đó người ta dùng 1 file attribute đặc biệt có tên SUID để thiết lập cho cái file đặc biệt là ứng dụng passwd, khi shell exec cái file ứng dụng passwd, hàm exec là hàm của kernel, nó đọc attr của file và thấy rằng có SUID được set cho cái file, thế là exec làm việc là thay thế cái process của bạn thành passwd, thêm việc đổi quyền cho passwd thành đúng owner của file đã chỉ định thay vì là dùng uid của process gọi hàm exec như thông thường (lúc này process bị neo lại và chuyển sang xử lý đoạn mã exec của kernel, exec thì đang có quyền tối cao nên nó call setuid ngon lành).
Do được "nhảy quyền" lên uid đã định trước, nên process passwd có thể làm các việc mong muốn gồm: hỏi mật khẩu cũ, hỏi mật khẩu mới, kiểm tra và write lại file thích hợp pass mới.
Bạn có thể hỏi rằng nếu thế user cứ đặt SUID cho 1 file bất kỳ, thì mình có thể nhảy quyền. Điều này đúng nếu bạn là ... root. vì chỉ có root mới có thể set cái SUID cho một file nào đó, user khác sẽ không thể thực hiện lệnh chmod +s đó được. File ứng dụng lệnh passwd nó nằm trong /sbin, một vị trí mà chỉ có root mới được write, thay đổi attr lẫn nội dung, user chỉ được read, user có muốn ghi đè file passwd để nó làm việc khác đi cũng không được phép. Bạn có thể copy file /sbin/passwd ra 1 thư mục khác của bạn có, rồi thử exec cái file được copy đó mà coi, nó sẽ trở thành "thứ dân" ko có quyền thay mật khẩu, vì lệnh copy chạy với quyền user sẽ không thể tạo/thiết lập SUID như là file gốc.

Khá dài rồi, bạn nên đọc thêm về môt vài tài liệu lập trình C cơ bản cho Linux, bạn sẽ hiểu kỹ hơn vấn đề này. Nó có giới thiệu rất kỹ về cách Linux thực hiện các việc đó.
[Up] [Print Copy]
  [Question]   SUID, SGID and the Sticky Bits? 03/05/2010 19:41:10 (+0700) | #7 | 210250
[Avatar]
learn2hack
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
[Profile] [PM] [WWW]
Giải thích của myquartz thiên về lập trình quá smilie

Mình giải thích đơn giản thế này thôi:

- sticky bit giúp cho 1 file khi thực thi sẽ được lưu giữ trong bộ nhớ. Nếu có user nào đòi thực thi file này nữa thì nó sẽ truy xuất bộ nhớ để làm việc, ko mất công initialize nữa.

- suid cho phép người khác chạy 1 file với quyền của owner. Người khác đó bắt buộc phải có quyền thực thi file.

suid hay dùng khi cần chạy 1 file nào đó mà các thao tác của nó yêu cầu quyền của owner.

VD bạn có 1 file script (owner là root) dùng để mount 1 partition và chmod cho mọi user đều có quyền chạy file này, thế nhưng khi chạy sẽ bị lỗi vì lệnh mount đòi user phải có quyền root. Khi đó, bạn có thể set user id cho file script, để 1 user bình thường khi chạy sẽ được cấp quyền của owner (root) và có thể mount bình thường.

- sgid cũng tương tự như suid, nhưng thay vì cấp quyền của owner thì cấp quyền của group cho người thực thi.

quanta cũng có viết 1 bài về suid và sgid trong forum, bạn tham khảo thêm cho rõ.
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org
[Up] [Print Copy]
  [Question]   SUID, SGID and the Sticky Bits? 04/05/2010 16:16:06 (+0700) | #8 | 210292
Doorkeeper
Member

[Minus]    0    [Plus]
Joined: 20/05/2008 11:37:48
Messages: 74
Offline
[Profile] [PM] [WWW]
em xin cám ơn các anh, em đã rõ rồi ạ smilie
[Up] [Print Copy]
  [Question]   SUID, SGID and the Sticky Bits? 05/05/2010 20:47:45 (+0700) | #9 | 210382
Crunch
Member

[Minus]    0    [Plus]
Joined: 02/07/2008 03:41:11
Messages: 50
Offline
[Profile] [PM]

learn2hack wrote:
Giải thích của myquartz thiên về lập trình quá smilie

Mình giải thích đơn giản thế này thôi:

- sticky bit giúp cho 1 file khi thực thi sẽ được lưu giữ trong bộ nhớ. Nếu có user nào đòi thực thi file này nữa thì nó sẽ truy xuất bộ nhớ để làm việc, ko mất công initialize nữa.
 


Đây chỉ là tác dụng nguyên thuỷ của sticky bit trên Unix mà thôi (và có lẽ cũng là nguồn gốc cho cái tên này). Ngày nay thì cũng chỉ có 1 số dòng Unix còn áp dụng. Đặc biệt, các Linux distributions thì chưa bao giờ gắn sticky bit với tác dụng trên.

Ngày nay, các hệ điều hành *nix chủ yếu dùng sticky bit cho các thư mục. Một khi thư mục có sticky bit, thì đối với các file/thư mục con trong thư mục đó, chỉ có chủ sở hữu thư mục cha, chủ sở hữu file/thư mục con, hay root là có quyền xoá/đổi tên chúng. Một áp dụng tiêu biểu đó là thư mục /tmp có mode là 1777.

More: http://en.wikipedia.org/wiki/Sticky_bit
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|