hn4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com
Full version available at http://4u.jcisio.com/r/article234.htm

Vicki

Đặt quyền cho files

Bài viết này sẽ giúp bạn hiểu rõ về cách đặt quyền cho files trong môi trường Unix*(Linux*)! Chúng ta hãy bắt đầu!

Unix* coi mọi thứ đều là file!

Mọi thứ từ file, directory, device, socket,... Unix đều coi chúng là files! Hãy nhớ lấy điều này!

Những gì bạn phải nhớ!

Trước khi đi vào phần chính, tôi muốn bạn PHẢI ghi nhớ lấy các quyền sau:

4 -> Read - đọc

2 -> Write - viết

1 -> Execute - thực thi

4000 -> SUID - Set User ID on execution

2000 -> SGID - Set Group ID on execution

1000 -> Sticky Bit

(Tôi sẽ giải thích chi tiết cho các bạn sau!)

Các thuộc tính của 1 file

Cũng giống như MS-DOS, bất kì file nào trên Unix đều có các thuộc tính-attributes. Cấu trúc của 1 attribute trong Unix bao gồm 10 cờ-flags: ft ur uw ux gr gw gx or ow ox

user(người dùng), group(nhóm) và other(những người khác) sẽ có các quyền hạn khác nhau trên một file nào đó. Quyền này chỉ có thể do người sở hữu file(onwer) hoặc root(admin) đặt thôi!

Hãy nhìn qua các ví dụ sau, bạn sẽ hiểu được thôi!

-rw-r--r-- 1 huy 2520 Jan 9 09:46 .plan

lrwxrwxrwx 1 root   9 Oct 1 19:42 .rhosts -> /dev/null

drwx------ 4 anh 4096 Jan 9 10:29 bin/

-rw------- 1 anh 1349 Jan 6 14:49 header.file.2

Đặt quyền cho file bằng lệnh chmod

chmod cho phép đặt quyền theo 2 cách: một là dùng các kí tự, hai là dùng số!

Dùng kí tự:

dấu "+" nghĩa là đặt, dấu "-" nghĩa là gỡ bỏ quyền! Ví dụ tôi có một file 'readme' có permission là -rw-r--r--(nghĩa là tôi(user) có quyền đọc và ghi đối với file này wr-, nhóm của tôi và nhũng người khác chỉ có thể đọc nó r-- và r--). Bây giờ tôi muốn cho nhóm tôi và những người khác có thêm quyền thực thi file này:

Mã lệnh
chmod go+x readme

Permission của file readme sẽ là -rw-r-xr-x

Giờ thì tôi lại đổi ý, tôi muốn nhóm của tôi có thêm quyền ghi đối với file 'readme' của tôi và những người khác chỉ có quyền thực thi:

Mã lệnh
chmod g+w readme
chmod o-r readme

Permission của file readme sẽ là -rw-rwx--x

Dùng số:

4 -> Read - đọc

2 -> Write - ghi

1 -> Execute - thực thi

Bạn cần đặt quyền gì thứ cứ cộng các giá trị này lại với nhau. Ví dụ 4+2=6 tức là đọc và ghi; 4+1=5 tức là đọc và thực thi; 4+2+1=7 nghĩa là đọc, ghi và thực thi; 0 nghĩa là không có quyền gì hết...!

usergroupother

Số thứ nhất cho user

Số thứ hai cho group

Số thứ ba cho other

Ví dụ:

chmod 744 a -> user có quyền đọc, ghi, thực thi a rwx(4+2+1=7); group và other chỉ có quyền đọc và ghi a rw-(4)

chmod 755 hello.pl -> user có quyền đọc, ghi, thực thi hello.pl rwx(4+2+1=7); group và other chỉ có quyền đọc và thực thi hello.pl r-x(4+1=5)

chmod cho phép bạn đặt quyền cho nhiều file cùng một lúc. Bạn có thể dùng các kí tự đại diện chảng hạn như *, .... Tham số -R (viết tắt của từ recursive - đệ qui) dùng để đặt quyền cho tất cả các file và thư mục cấp dưới!(à quyên, tôi phải nói là file mới phải chứ!)

[root@localhost cgi-bin]$chmod -R 755 * -> đặt quyền "rwxr-x-r-x" cho tất cả các files trong thư mục cgi-bin và các thư mục con của cgi-bin. Tuy nhiên, lệnh này sẽ không đặt quyền "rwxr-x-r-x" cho các file bắt đầu bằng dấu chấm '.' Để đặt quyền "rwxr-x-r-x" cho các file này, bạn gõ thêm lệnh sau:

[root@localhost cgi-bin]$chmod -R 755 .* -> Okay!

SUID, SGID, Sticky bit là gì?

Tôi sẽ giải thích cho bạn bây giờ! Không khó hiểu lắm đâu..!

   usergroupother

Số thứ 0 chính là để dùng cho SUID, SGID và Sticky bit!

SUID -> 4000

SGID -> 2000

Sticky bit -> 1000

(Xin bạn chú ý, 3 số sau tôi cho bằng 000 hết vì chúng ta không quan tâm đến user, group, other. Chúng ta chỉ để ý đến số thứ 0 thôi! Bạn đừng có nhầm lẫn giữa 4000 với 4 nghe chưa!)

Hack permissions!

Đôi khi admin hoặc một số users cẩu thả khi đặt quyền cho các files của họ. Họ đã tự mang họa vào thân mà chẳng hay gì hết!? Hãy xem các ví dụ sau:

Một số hackers sau khi đã lấy được quyền root rồi thường kéo file sh vào thư mục /tmp/somewhere, sau đó bật sticky bit cho file này để Unix* nạp nó lên swap-space. Như vậy nó sẽ chẳng bao gì bị xóa cho đến khi server bị restart lại mà điều này thì hiếm khi xảy ra! Khi muốn hackers có thể ghé thăm lại server này cho vui!

Mã lệnh
#> cp /sbin/sh /tmp/somewhere/yeah
#> chmod 4755 /tmp/somewhere/yeah

Qua bài này tôi hi vọng rằng bạn sẽ có thêm một số kiến thức mới và dĩ nhiên là hiểu được sự phân quyền trên Unix*. Chúc bạn thành công! Oh! I can relax now...?!


hainam4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com