
| Xác thực user với PAM |
|
|
|
|
Cách thức lưu trữ thông tin tài khoản user và cách thức xác thực tài khoản user của hệ thống là một trong những kiến thức cơ bản nhất giúp cho bạn nắm vững, sử dụng và quản trị một hệ thống chạy hệ điều hành Linux tốt hơn. Sau đây là một số kiến thức giúp cho bạn đặt được điều ấy.
Cách thức Linux lưu trữ thông tin tài khoản user /etc/passwd trên hầu hết các sản phẩm linux, thông tin user được lưu giữ ở trong file /etc/passwd. Nó là một file text chứa tên user login, password của user đó dưới dạng mã hoá, một số (duy nhất )thể hiện user id, một số thể group id, một trường (có thể có hoặc không ) tuỳ chọn chứa những thông tin cá nhân (địa chỉ, số điện thoại, tên ...). Thư mục home của user đó, shell mà người đó sử dụng. Mỗi dòng trong file /etc/passwd có dạng. pete:K3xcO1Qnx8LFN:1000:1000:Peter Hernberg,,,1-800-OOBAR:/home/pete:/bin/bash mỗi dòng gồm sáu trường được phân cách bởi dấu hai chấm. shadow passwd với file /etc/passwd bạn có thể đọc được tất cả các thông tin về user bao gồm cả password dưới dạng mã hoá và nó có thể bị giải mã bởi những chương trình passwd-cracking. Để chống lại điều này người ta đã phát triển ra shadow passwd. Khi hệ thống của bạn sử dụng shadow password, trường password trong file /etc/passwd sẽ được thay bằng ký tự x, password dưới dạng mã hoá của user được lưu ở trong file /etc/shadow và file này chỉ có user root có thể đọc được. Mỗi dòng trong file /etc/shadow gồm một số trường thể hiện tên user login, password của user dưới dạng mã hoá, giới hạn mà password hợp lệ. Nó có dạng như pete:/3GJllg1o4152:11009:0:99999:7::: /etc/group và /etc/gshadow thông tin về nhóm được lưu trữ ở trong file /etc/group, format của nó cũng tương tự như trong file /etc/passwd gồm những dòng chứa các trường tên nhóm, password, số id, thành viên của nhóm, nó có dạng như pasta:x:103:spagetti,fettucini,linguine,vermicelli như bạn thấy ký tự x trong trường password thể hiện group password là shadow mặc dù một group không bao giờ có password của nó, ý nghĩa của nó ở đây là nó thể hiện thông tin shadow password của nhóm được lưu ở trong file /etc/gshadow. MD5 encrypt passwords với những hệ thống cổ điển Linux password được mã hoá bằng hàm crypt(). Tuy nhiên với sự phát triển của máy tính với tốc độ xử lý như hiện nay việc giải mã những password được mã hoá bằng hàm crypt() trở nên dễ dàng và đó là cơ sở cho việc phát triển ra những thuật toán mã hoá mạnh như MD5. Hầu hết các sản phẩm Linux hiện nay đều mặc định sử dụng MD5 làm thuật toán mã hoá password. Sử dụng module PAM để xác thực user trong các sản phẩm Linux hiện đại nền tảng của việc xác thực user dựa trên PAM (Pluggable authentication modules). Chức năng của PAM cung cấp khả năng tách riêng việc phát triển những phần mềm gán quyền với việc phát triển bảo mật và cách thức xác thực user phù hợp, điều này có được bởi việc đưa ra một tập hợp các thư viện hàm cho các chương trình xác thực sử dụng khi có user cần phải xác thực. Với PAM việc password của user lưu trữ ở đâu không quan trọng (có thể ở trong file /etc/passwd hay ở một server riêng nào đó chuyên dùng để lưu trữ password database). Khi một chương trình cần xác thực một user, PAM sẽ cung cấp một thư viện có chứa những hàm phù hợp dùng cho việc xác thực của chương trình đó cũng như ý đồ của người quản trị hệ thống. Vì thư các viện hàm được load động nên việc thay đổi cách thức xác thực chỉ đơn giản bằng cách sửa file cấu hình. PAM khá mềm dẻo, nó được thiết kế để giúp cho bạn hoàn toàn có thể điều khiển cách thức xác thực user tuỳ theo ý mình như từ chối một số chương trình không được quyền xác thực user, giới hạn số user được phép xác thực, cảnh báo một số chương trình cố tình thực hiện việc xác thực hay thậm chí lấy đi quyền login của user... PAM mặc định đã có sẵn trong các sản phẩm Linux hiện đại nên việc cài đặt tôi không đề cập tới. Sau đây là một số ý tưởng cơ bản của file cấu hình PAM PAM configuration file file cấu hình của PAM thường nằm trong thư mục /etc/pam.d/ như trên CentOS mà tôi thường sử dụng (một số OS Linux khác file cấu hinh của PAM lại là /etc/pam.conf) hãy xem các file cấu hình của PAM ~$ cd /etc/pam.d /etc/pam.d/$ ls chfn chsh login other passwd su xlock /etc/pam.d/$ hệ thống của bạn có thể khác ( điều này không quan trọng ), mỗi file cấu hình tương ứng với một chương trình, tên chương trình trùng với tên file ( ngoại trừ file other ). Hãy xem nội dung của file login (xác định cách thực user của chương trình login) /etc/pam.d/$ cat login # PAM configuration for login auth requisite pam_securetty.so auth required pam_nologin.so auth required pam_env.so auth required pam_unix.so nulok account required pam_unix.so session required pam_unix.so session optional pam_lastlog.so password required pam_unix.so nullok obscure min=4 max=8 file cấu hình PAM gồm nhiều dòng config, mỗi dòng (một rule) gồm bốn trường có dạng type control module-path module-arguments Một dịch vụ có thể sử dụng nhiều modules PAM khác nhau để áp dụng những kiểu xác thực khác nhau liên tiếp tạo nên phong cách xác thực riêng cho dịch vụ đó, Những module ở trên sẽ được gọi và sử dụng trước (stack). trường type quy định kiểu xác thực cho các module xác thực, các module ở cùng kiểu xác thực xếp liên tiếp nhau và được gọi lần lượt từ trên xuống dưới (kiểu stack). nó gồm các giá trị sau account: xác định xem user có được phép truy nhập dịch vụ hay không, tài khoản user đã hết hạn hay chưa, user được phép truy cập vào dịch vụ trong khoảng thời gian nào, user được phép truy cập vào hệ thống tuỳ thuộc vào tình trạng tài nguyên hệ thống... auth: xác thực user bằng cách yêu cầu và kiểm tra password, yêu cầu kiểm tra file chứng thực... password: loại module dùng để đặt password sesion: được sử dụng vào thời điểm trước và sau khi user được xác thực, nó làm những việc như mount/unmount thư mục home của user, login/logout, giới hạn/loại bỏ giới hạn một số dịch vụ đối với user. trường control xác định PAM sẽ làm gì khi hoạt động xác thực faile, nó gồm các giá trị sau requisite: khi hoạt động xác thực failse dịch vụ sẽ lập tức chối tiếp tục xác thực required: khi hoạt động xác thực failse dịch vụ sẽ tiếp tục gọi và thực hiện tiếp các module xác thực khác trong danh sách xác thực sau đó mới thực hiện việc từ chối truy cập sufficient: nếu hoạt động xác thực được thực hiện bởi module xác thực thành công thì PAM sẽ coi hoạt động xác thực này là thành công kể cả việc xác thực ở những required module trước là failse. optional: nếu hoạt động xác thực của module xác thực thành công quá trình xác thực sẽ tiếp tục bình thường, nếu failse giá trị trả về của module (nó chỉ có ý nghĩa nếu module xác thực này chỉ được sử dụng một lần ) sẽ được lưu lại, xem xét và sử dụng ở những lần xác thực tiếp theo. include: dùng để chèn những chỉ dẫn cấu hình từ một file khác. trường module-path xác định PAM module nào cần được sử dụng, đường dẫn đến module đó.Nếu đường dẫn module không được cung cấp PAM sẽ tìm trong thư mục module của nó là /usr/lib/security hoặc /lib/security trường module-arguments cung cấp đối được sử dụng bởi module xác thực nếu bạn không tìm thấy thư mục /etc/pam.d/ trên hệ thống của mình thì có nghĩa là file pam config trên hệ thống của bạn là /etc/pam.conf. Thay vì mỗi dịch vụ có một file config riêng, PAM sẽ config tất cả các dịch vụ mà nó quản lý vào trong file này và trường đầu tiên trong sẽ xác định tên dịch vụ mà nó quản lý. ví dụ dòng config trong file /etc/pam.d/login là auth required pam_unix.so nulok thì sẽ xuất hiện trọng file /etc/pam.conf là login auth required pam_unix.so nulok và cứ thế tiếp tục. /etc/pam.d/other đây là một file cấu hình đặc biệt của PAM, tất cả những dịch vụ không có file cấu hình của riêng nó nó sẽ coi đây là file cấu hình của nó. File này thường được dùng theo hai hướng sau. hướng 1 nội dung của nó thường có dạng auth required pam_deny.so auth required pam_warn.so account required pam_deny.so account required pam_warn.so password required pam_deny.so password required pam_warn.so session required pam_deny.so session required pam_warn.so với file cấu hình này nếu một dịch vụ nào đó cố gắng truy cập hê thống PAM sẽ từ chối nó thông qua module pam_deny.so và tạo ra một cảnh báo trong log hệ thống bằng module pam_warm.so. tuy nhiên trong trường hợp một file config của một dịch vụ nào đó mà bạn cần quản lý bị lỗi, PAM không đọc được khiến cho nó phải đọc file /etc/pam.d/other thì đây lại là một nhược điểm. hướng 2 nội dung của nó thường có dạng auth required pam_unix.so auth required pam_warn.so account required pam_unix.so account required pam_warn.so password required pam_deny.so password required pam_warn.so session required pam_unix.so session required pam_warn.so nó sẽ cho mọi dịch vụ không có file cấu hình trong thư mục /etc/pam.d/ thực hiện xác thực thông qua module pam_unix.so, tuy nhiên nó không cho phép user được phép thay đổi password đồng thời ghi một cảnh báo vào log hệ thống đối với dịch vụ này. Nếu không có lý do gì đặc biệt tôi nghĩ các bạn nên sử dụng file này theo hướng 1 Một điểm cần chú ý nữa là trong hầu hết các OS Linux hiện nay thường có những tài khoản tượng trưng được dùng cho những dịch vụ hệ thống như ftp, webserver, mail (dịch vụ ftp chạy với tài khoản ftp, apache chạy với tài khoản apache...). Nó cho phép hệ thống của bạn được bảo vệ tốt hơn (attacker thường tấn công những dịch vụ này và chi được quyền giới hạn ở những tài khoản chạy dịch vụ này thay vì root). tuy nhiên có một nhược điểm là những tài khoản này thường sử dụng null password do đó bạn phải loại bỏ việc truy cập hệ thống bằng null password bằng cách sửa trong file /etc/pam.d/login dòng auth required pam_unix.so nullok thành auth required pam_unix.so Nếu trong thư mục /etc/pam.d/ có những file config cho những dịch vụ lạ mà bạn không biết hoặc bạn không cần nó chạy trên hệ thống của mình thì bạn nên loại bỏ nó. Hải Thắng - Vnexperts Research Department. Tin mới hơn:
Tin cũ hơn:
|