|
||||||||
|
||||||||
|
|
Công Cụ | Xếp Bài |
16-12-2009, 03:36 PM | #1 |
Guest
Trả Lời: n/a
|
Quyền Lực root và Vấn Đề An Toàn Hệ Thống
Quyền Lực root và Vấn Đề An Toàn Hệ Thống 1/ Ý nghĩa trong từ Root Mặc định trong hệ thống *nix (gồm HĐH Linux và các HĐH khác có đặc điểm giống Unix), root là tên người dùng có quyền thực thi mọi câu lệnh và truy cập tới bất kỳ file nào trong filesystem. root thường được hiểu ngắn gọn là tài khoản root, root user hay superuser. Từ root cũng có thêm vài ý nghĩa mà khi được sử dụng như là 1 phần của thuật ngữ khác thì dễ gây nhầm lẫn cho những người mới làm quên với *nix. - 1 trong số đó là root directory (thư mục gốc), là thư mục cấp cao nhất (nó không có thư mục cha) trong cây thư mục và nó chứa toàn bộ các thư mục khác (bao gồm thư mục con và các file bên trong). root directory được ký hiệu là / - 1 cái nữa là /root , là thư mục con của / – 1 trong các thư mục chuẩn của *nix. Đây là thư mục chủ (home directory) của root user. Thư mục chủ là nơi lưu trữ chính cho các file, thư mục, chương trình mang tính cá nhân của từng user, các user thông thường có thư mục chủ là /home/user_name. Có thể coi home directory giống với thư mục C:\Documents and Settings\User_Name (trên XP, 2k3) và C:\Users\User_Name (trên Vista, Win7), trong đó C: là thư mục gốc cài Windows. - Rootkit là các công cụ, phần mềm được bí mật cài đặt bởi 1 kẻ nào đó (thường với ý đồ xấu ) mà cho phép kẻ đó sử dụng máy tính nạn nhân như thể hắn là chủ sở hữu vậy. 1 con rootkit được thiết kế hoàn hảo có thể cấp quyền truy cập sử dụng root account và ẩn đi mọi dấu vết về sự hiện diện và hoạt động của rootkit. 2/ Tản mạn về root 2.1/ User ID Mỗi user được hệ thống tự động gán cho 1 số nhận dạng gọi là UID (User ID). Hệ thống sẽ sử dụng UID thay cho username để nhận diện và theo dõi hoạt động của từng user. Root luôn luôn có UID = 0. Điều này có thể được xác nhận bằng cách login với tài khoản root và chạy lệnh echo $UID sẽ hiển thị UID của user hiện tại echo được sử dụng để lặp lại, in ra màn hình những gì được gõ đằng sau nó. Ký tự $ đằng trước UID báo cho echo hiển thị giá trị của UID hơn là cụm từ $UID (1 trong các biến môi trường). Bạn cũng có thể xem UID của root (cũng như các user khác) trong file /etc/passwd sử dụng lệnh cat (cat thường được dùng để đọc các file) cat /etc/passwd | less Thông tin của root có thể tựa như vầy root0:0:root:/root:/bin/bash Cột đầu là username, cột 3 là UID 2.2/Root privilege (đặc quyền root) là quyền hạn, sức mạnh mà root user có trên hệ thống. root có quyền lực lớn nhất và tuyệt đối – truy cập tới toàn bộ file và thực thi được mọi câu lệnh, trong số đó là khả năng chỉnh sửa hệ thống rất sâu theo bất kỳ cách nào mà người đang sở hữu quyền root mong muốn, ngay cả việc chỉnh module và biên dịch lại kernel – 1 điều không thể trên hệ thống Windows! root cũng có quyền cấp phát và thu hồi các quyền truy cập file, thư mục (read, write, excute) cho các user khác, bao gồm các file, thư mục mặc định chỉ dành riêng cho root. Thưở ban đầu thì các HDH *nix được thiết kế dành cho các hệ thống đa người dùng bởi vì lúc đó các dòng máy tính cá nhân (PC) chưa phổ biến như bây giờ và mỗi user được kết nối vào siêu máy tính (mainframe computer – tập trung hóa mọi công việc) qua 1 thiết bị đầu cuối đơn giản. Vì vậy mà cần có 1 cơ chế để ngăn chia và bảo vệ các file của từng user trong khi vẫn cho phép các user sử dụng hệ thống đồng thời, (có thể khái niệm home directory ra đời từ đây). Bên cạnh đó, cũng cần có giải pháp giúp cho người quản trị hệ thống thực thi các tác vụ như là: truy cập vào file, thư mục các user khác để sửa lỗi; cấp và thu quyền hạn cho các user; truy cập các file quan trọng để sửa chữa, khôi phục và cập nhật hệ thống (có lẽ root user ra đời từ lý do này luôn). 2.3/Permission System Hệ thống phân quyền trong *nix mặc định cấm các user thông thường truy cập, thay đổi cấu hình các khu vực trọng yếu trên hệ thống và dữ liệu cá nhân thuộc về các user khác. Thường thì user chỉ có thể đọc file mà không có quyền ghi bất cứ gì vào root directory, ngoài ra user có tự do quyền hạn với home direcroty của mình. Vì vậy mà rất dễ gây tò mò cho những user mới làm quen với các hệ thống như *nix, đặc biệt là những người đã quen với các hệ thống có cơ chế phân quyền yếu hoặc bỏ ngỏ quyền hạn Admin như Windows, version Macintosh cũ (các phiên bản sau này Vista, Win7 được Microsoft kỳ vọng sẽ nâng cao độ an toàn cho hệ thống). Họ sẽ cố gắng vượt qua hệ thống phân quyền này trên các máy tính cá nhân bằng cách đang nhập trực tiếp bằng tài khoản root và … ngồi lì ở đó!. Mặc dù điều này mang lại sự thoải mái, thuận tiện, nhưng bạn nên hạn chế bằng cách tạo 1 user thông thường để làm các việc bình thường!. (chat, duyệt web, check mail, office, giải trí…) Tránh lạm dụng root nếu bạn là user mới là do thật dễ dàng để phá hủy hệ thống *nix hơn là phá hủy các hệ thống khác với quyền hạn root. Các kỹ sư thiết kế các hệ thống khác *nix như Windows đặt ra 1 số phương thức nhằm bảo vệ dữ liệu và HDH để bù đắp phần nào sơ hở của cơ chế phân quyền thiếu chặt chẽ. Tuy nhiên, 1 nguyên tắc quan trọng của hệ thống *nix là cung cấp tối đa độ linh động trong cấu hình hệ thống, vì vậy mà root user được có quyền hạn vô đối. HDH *nix giả định rằng người quản trị biết chính xác điều anh (cô) ấy đang làm vì 1 sơ sót nhỏ cũng có thể dẫn đến toàn bộ hệ thống ngừng hoạt động. Thêm mối nguy nữa khi sử dụng hệ thống với quyền root là tất cả các tiến trình (process – 1 chương trình được nạp từ thiết bị lưu trữ như HDD vào RAM để thực thi…) do root khởi động sẽ có quyền hạn root. Vì thậm chí các chương trình ứng dụng được coi kiểm duyệt tốt và được sử dụng rộng rãi cũng chứa nhiều lỗi (do có lượng lớn đoạn code và độ phức tạp trong thiết kế) nên 1 attacker thực thụ có thể tìm và khai thác 1 số trong các lỗi đó và chiếm quyền điều khiển hệ thống khi ứng dụng đó được chạy với quyền root. 1 ví dụ với ứng dụng Web Server Apache Ở những phiên bản sơ khai của Apache, khi bạn khởi động Apache, nó tạo ra một process do root làm chủ. Sở dĩ bạn phải khởi động Apache ở chế độ là root là vì Apache sẽ tạo một listening port 80. Port 80 là port nằm trong chuỗi "low ports" (dưới 1024) và để tạo một port trong chuỗi này bạn phải là root thì mới tạo được. Sau này Apache hình thành cơ chế 'chuyển quyền' sau khi khởi động. Nói một cách nôm na là sau khi khởi động và tạo xong port 80 ở tình trạng listening, nó hạ quyền hạn từ root xuống thành quyền hạn của một account nào đó bạn gán trong cấu hình của Apache. Bạn biết lý do tại sao không?" Đó là nếu Apache chạy ở chủ quyền root và ai đó load một con 'shell' (upload shell) nào đó lên thì con shell này cũng sẽ chạy với chủ quyền root! Trích "Những cuộc đối thoại với Rookie - Phần 14" 2.4/Delegate Authority (Ủy quyền) Nếu bạn đang ở user thông thường mà vẫn muốn thao tác các lệnh cần tới quyền root thì 1 số công cụ như gksu (cho môi trường GNOME), kdesu (cho môi trường KDE), su, sudo (trong terminal) cung cấp quyền root cho bạn chỉ khi cần thiết và không cần phiên đăng nhập mới. VD để trở thành root, bạn gõ trong terminal (hoặc console) su sau đó Enter và cung cấp password của root. Để trở lại là user trước đó bạn nhấn Ctrl+D hoặc gõ exit Với sudo thì tiện lợi hơn là bạn cung cấp password của user hiện tại, không phải password của root, cú pháp: sudo câu_lệnh_cần_quyền_root Để hiểu rõ hơn về sudo bạn xem manual của nó (gõ man sudo) và tìm hiểu file sudoers trong /etc Còn gksu, kdesu thường được dùng khi chạy các chương trình có giao diện đồ họa mà yêu cầu quyền root. VD khi bạn chạy công cụ synaptics (trình quản lý gói trong Ubuntu) thì sẽ hiện ra 1 của sổ yêu cầu nhập password của bạn 3. Kết Luận Nhìn chung đối với các hệ thống lớn sử dụng trong các doanh nghiệp và tổ chức. Mỗi quản trị viên sẽ có riêng 1 tài khoản để làm các công việc thông thường, mọi hoạt động này đều được hệ thống ghi nhận và lưu thành các file log cho mục đích an toàn và sửa chữa khi có sự cố. Nhưng cũng sẽ truy cập với quyền root khi cần thiết. Để giảm tải công việc, người quản trị hệ thống cấp cao cũng cần có cơ chế ủy quyền thích hợp cho các nhân viên. Theo: Thế Giới Mạng |
|
|