Đặt quyền cho file trong Linux

Chia sẻ: Hoang Nhan | Ngày: | Loại File: PDF | Số trang:4

0
139
lượt xem
47
download

Đặt quyền cho file trong Linux

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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:

Chủ đề:
Lưu

Nội dung Text: Đặt quyền cho file trong Linux

  1. 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 ft - file type: cho biết file thuộc loại gì. File type có thể là -(file bình thường), d(directory), l(symbolic link), c(character device), b(block device), socket device). các chữ viết tắc: u=user, g=group, o=other r=read, w=write, e=execute +=đặt, -=gỡ bỏ 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
  2. .plan là một file(-) thuộc quyền sở hữu của user huy. huy có quyền đọc và viết đối với file .plan(rw). Nhóm mà huy là một thành viên chỉ có quyền đọc file này(r--). Những người khác cũng chỉ có quyền đọc file .plan của huy thôi(r--)! .rhosts là một liên kết đến /dev/null(l)(liên kết trong Unix cũng gần tương tự như shortcut trong Windows thôi! Chắc bạn có thể hình dung ra được chứ!). .rhosts thuộc quyền sở hữu của root. root(uid=0), root group(gid=0) và những người khác(other) đều có quyền đọc, viết, ghi, thực thi trên liên kết .rhosts(rwxrwxrwx)! header.file.2 là một file(-) thuộc quyền sở hữu của user anh. anh có chỉ quyền đọc và ghi(rw-), những người khác(dĩ nhiên là ngoại trừ root và root-group) đều không có quyền gì cả trên file này(------)! Đặ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: 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: 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...! user group other Số thứ nhất cho user Số thứ nhất cho group Số thứ nhất cho other
  3. 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) Nói thêm: 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ắc 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..! user group other 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!) SUID - Set User ID on execution là gì? Tôi giải thích rõ cho bạn qua ví dụ sau: user huy có một file chương trình có tên là lamviec. Để có thể chạy được, lamviec phải truy cập đến vài thứ trong file dulieu. File dulieu thuộc quyền sở hữu của huy. Như vậy thì huy có thể chạy được lamviec mà không gặp phải vấn đề gì. Tuy nhiên, bây giờ nếu có một người bạn của huy là anh không ở cùng nhóm với huy cần chạy file lamviec! anh sẽ không thể nào chạy được file lamviec bởi vì nó cần truy cập đến file dulieu của huy, mà file này lại không thuộc quyền sở hữu của anh. huy sẽ chmod o+wr cho file dulieu! Làm như vậy thì người khác sẽ đọc và ghi được file này răng! Hihi, huy sẽ SUID cho file lamviec bằng lệnh chmod +s lamviec. Bây giờ thì lamviec sẽ chạy với userid là huy, anh có thể chạy được file lamviec mà không gặp phải vấn đề gì. Tuy nhiên anh chỉ có thể đọc
  4. hoặc viết vào file dulieu thông qua lamviec. anh không thể nào có thể đọc hoặc ghi lên file dulieu trực tiếp trừ phi anh có quyền root! SGID - Set User ID on execution là gì? Nghĩa là đặt thuộc tính thừa kế groupid cho một thư mục nào đó. Ví dụ, khi tôi đã sgid cho thư mục abc bằng lệnh chmod 2766 abc thì sau đó, bất kì một người này dù cùng group-id hoặc khác group-id với tôi nếu tạo file nào đó trong thư mục abc của tôi thì file đó sẽ có group-id của tôi, không phải là group-id của người đó! Sticky bit - cái này có ý nghĩa khác nhau đối với file và thư mục: Đối với file, sticky bit thường chỉ được dùng với các thực thi thôi và thường thì chỉ có root hoặc các users có quyền hạn cao mới được bật hay tẳt sticky bit cho file! Khi một file thực thi có sticky bit được bật, file này sẽ được nạp vào swap-space(không gian swap) của Unix để có thể chạy nhanh. Bạn hãy để ý, các chương trình như vi, vim, pico, pine thường được bật sticky bit vì người dùng thường sử dụng các chương trình này thường xuyên mà! Đối với thư mục, khi một thư mục được bật sticky bit thì các users có thể đọc hoặc viết vào các file trong thư mục đó. Tuy nhiên, họ không thể đổi tên hoặc xóa các file không thuộc quyền sở hữu của họ. Họ chỉ có thể xóa hoặc đổi tên các file do họ tạo ra mà thôi. Thường thì sticky bit được dùng trong thư mục /tmp nhằm tăng thêm tính private cho các users! 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: Tìm tất cả các file thuộc quyền sở hữu của root đã được bật sticky bit: $> find / -user root -perm -4000 -ls Tìm tất cả các file được quyền ghi: $> find -type f -perm -2 -ls Tìm tất cả các thư mục được quyền ghi: $> find -type d -perm -2 -ls 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! #> 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...?!
Đồng bộ tài khoản