Tải bản đầy đủ (.docx) (27 trang)

Tìm hiểu về cơ chế sác thực PAM trên Linux

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (199.32 KB, 27 trang )

HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN

Đề tài :
TÌM HIỂU CÁC CƠ CHẾ XÁC THỰC TRÊN HỆ ĐIỀU HÀNH LINUX

Giáo viên hướng dẫn:
cô Nguyễn Thị Hồng Hà
Danh sách thành viên trong nhóm:
1. Phạm Văn Đạt
2. Nguyễn Anh Huy
3. Nguyễn Thị Mai Huyên
4. Trần Tấn Lực


MỤC LỤC


CHƯƠNG 1: HỆ ĐIỀU HÀNH LINUX
1.1.

Khái niệm về Linux
Linux là tên gọi của một hệ điều hành máy tính và cũng là tên hạt nhân của

hệ điều hành. Nó có lẽ là một ví dụ nổi tiếng nhất của phần mềm tự do và của việc
phát triển mã nguồn mở.
Một cách chính xác, thuật ngữ "Linux" được sử dụng để chỉ Nhân Linux (Linux kernel) là hạt nhân của Linux, được lập trình bằng ngôn ngữ C và
được Linus Torvalds phát triển, mô phỏng lại hạt nhân Unix. Linux là một trong
những ví dụ điển hình của phần mềm mở và miễn phí. nhưng tên này được sử
dụng một cách rộng rãi để miêu tả tổng thể một hệ điều hành tương tự Unix (còn
được biết đến dưới tên GNU/Linux) được tạo ra bởi việc đóng gói nhân Linux


cùng với các thư viện và công cụ GNU, cũng như là các bản phân phối Linux.
Thực tế thì đó là tập hợp một số lượng lớn các phần mềm như máy chủ web,
các ngôn ngữ lập trình, các hệ quản trị cơ sở dữ liệu, các môi trường
desktop như GNOME và KDE, và các ứng dụng thích hợp cho công việc văn
phòng như OpenOffice, LibreOffice.
1.2.
Lịch sử ra đời
Vào năm 1991 trong khi đang học tại University of Helsinki, Torvalds bắt
đầu có ý tưởng về một hệ điều hành, hơn nữa ông cũng nhận thấy hạn chế trong
giấy phép của MINIX. Nó chỉ cho phép việc sử dụng MINIX trong giáo dục mà
thôi. Ông bắt đầu viết nên hệ điều hành riêng của mình.
Torvalds phát triển Linux kernel trên môi trường MINIX, các ứng dụng viết
cho MINIX có thể sử dụng trên Linux. Sau đó khi Linux đã "trưởng thành" thì việc
phát triển Linux diễn ra ngay trên hệ thống Linux. Các ứng dụng GNU cũng thay
thế các thành phần của MINIX, do các lợi ích sử dụng mã nguồn có sẵn một cách
tự do từ dự án GNU với một hệ điều hành còn "non nớt".
Phiên bản Linux đầu tiên do Linus Torvalds viết vào năm 1991, lúc ông còn
là một sinh viên của Đại học Helsinki tại Phần Lan. Ông làm việc một cách hăng
3


say trong vòng 3 năm liên tục và cho ra đời phiên bản Linux 1.0 vào năm 1994. Bộ
phận chủ yếu này được phát triển và tung ra trên thị trường dưới bản quyền GNU
General Public License. Do đó mà bất cứ ai cũng có thể tải và xem mã nguồn của
Linux.
Khởi đầu, Linux được phát triển cho dòng vi xử lý 386, hiện tại hệ điều hành
này hỗ trợ một số lượng lớn các kiến trúc vi xử lý, và được sử dụng trong nhiều
ứng dụng khác nhau từ máy tính cá nhân cho tới các siêu máy tính và các thiết bị
nhúng ví dụ như các máy điện thoại di động.
Ban đầu, Linux được phát triển và sử dụng bởi những người say mê. Tuy

nhiên, hiện nay Linux đã có được sự hỗ trợ bởi các công ty lớn
như IBM và Hewlett-Packard, đồng thời nó cũng bắt kịp được các phiên
bản Unix độc quyền và thậm chí là một thách thức đối với sự thống trị
của Microsoft Windows trong một số lĩnh vực. Sở dĩ Linux đạt được những thành
công một cách nhanh chóng là nhờ vào các đặc tính nổi bật so với các hệ thống
khác: chi phí phần cứng thấp, tốc độ cao (khi so sánh với các phiên bản Unix độc
quyền) và khả năng bảo mật tốt, độ tin cậy cao (khi so sánh với Windows) cũng
như là các đặc điểm về giá thành rẻ, không bị phụ thuộc vào nhà cung cấp. Một đặc
tính nổi trội của nó là được phát triển bởi một mô hình phát triển phần mềm nguồn
mở hiệu quả.
Tuy nhiên, hiện tại số lượng phần cứng được hỗ trợ bởi Linux vẫn còn rất
khiêm tốn so với Windows vì các trình điều khiển thiết bị tương thích với Windows
nhiều hơn là Linux. Nhưng trong tương lai số lượng phần cứng được hỗ trợ cho
Linux sẽ tăng lên.
1.3.
Ưu nhược điểm của Linux.
1.3.1 Ưu điểm.
• Bản quyền và chi phí
Linux được phát triển "free" cho người sử dụng và dựa trên nền tảng mã
nguồn mở - open source trong khi Windows bản quyền và bộ Office bản quyền sẽ
phải mất khoảng vài triệu để sở hữu. Vì lý do đó mà tỷ lệ dùng lậu Windows ở Việt
4


Nam luôn ở mức cao. Và đương nhiên việc dùng lậu thì sẽ đi kèm những bất tiện
của nó chưa kể vấn đề về nguyên tắc làm việc.
Sử dụng Linux bạn sẽ được sử dụng miễn phí tất cả các tính năng kèm bộ
ứng dụng văn phòng miễn phí mà không phải lo lắng gì về vấn đề bản quyền.
• Bảo mật
Như đã nói ở trên, viếc phát tán virus qua Windows là không thể tránh khỏi

và nó lây lan rất nhanh trong khi dùng Linux bạn chỉ việc nhấn xóa mỗi lần thấy 1
con virus nào đó xuất hiện là xong.


Linh hoạt

Đối với Linux, nếu bạn có hiểu biết về nó nhiều một chút thì có thể tự thực
hiện các tùy chỉnh theo ý mình. Tuy nhiên, điều này không xảy ra với Windows,
bạn sẽ cần phải được Windows thông qua mỗi lần muốn chỉnh sửa gì đó. Ngoài ra,
nền tảng này cũng tương thích với rất nhiều các môi trường khác nhau, do đó, rất
lý tưởng cho các lập trình viên và developer.


Chạy ổn định cả trên các máy tính cấu hình yếu

Một phiền toái mà hẳn người dùng Windows nào cũng thấy quen thuộc đó là
cứ mỗi khi Windows ra mắt một bản nâng cấp thì người dùng cũng phải nâng cấp
cấu hình theo nếu máy không đáp ứng được phiên bản mới đó. Và nếu không nâng
cấp thì chỉ có thể mãi mãi dùng phiên bản cũ mà thôi và rất nhanh sẽ bị Windows
cho vào quên lãng.
Việc vẫn chạy mượt mà, độ ổn định cao trên các máy có cấu hình thấp và
được nâng cấp, hỗ trợ thường xuyên từ nhà phát hành có lẽ là một ưu điểm được
người ưa chuộng Linux đánh giá cao hơn Windows.

5


Tuy nhiên, Linux không thể tránh khỏi vẫn tồn tại những nhược điểm khiến
cho Windows tiếp tục mở rộng sự thống trị của mình.
1.3.2. Nhược điểm



Số lượng ứng dụng hỗ trợ vẫn còn rất hạn chế



Một số nhà sản xuất không phát triển driver hỗ trợ nền tảng Linux.



Mất thời gian để làm quen, đặc biệt là khi chuyển từ Windows sang sử
dụng Linux thì sẽ cần thời giàn để thích nghi từ đầu.



Nếu bạn cần những lý do cụ thể và thuyết phục để quyết định việc có
sử dụng hệ điều hành Linux hay không, hay có nên chuyển từ
Windows sang Linux không thì trên đây là những phân tích chi tiết để
giúp bạn hiểu hơn về vấn đề bạn đang băn khoăn. Còn lại thì quyết
định là ở bạn và tùy thuộc vào mục tiêu sử dụng của bạn.

6


2.1.

CHƯƠNG 2: TỔNG QUAN VỀ XÁC THỰC
Các khái niệm và ý nghĩa của xác thực.
Xác thực (tiếng Anh: Authentication - xuất phát từ Authentic có nghĩa là


“thật”, “thực”,“đích thực” hoặc “chính cống”) là một hành động nhằm xác lập hoặc
chứng thực một người nào đó (hay một cái gì đó) đáng tin cậy, có nghĩa là những
lời khai báo do người đó đưa ra hoặc về cái đó là sự thật.
Xác thực một đối tượng còn có nghĩa là công nhận nguồn gốc của đối tượng,
trong khi, xác thực một người thường bao gồm việc thẩm tra nhận dạng của họ.
Trong an toàn thông tin máy tính xác thực là một quy trình nhằm xác minh
nhận dạng số (digital identity) của bên gửi thông tin (sender) trong liên lạc trao đổi
xử lý thông tin chẳng hạn như một yêu cầu đăng nhập. Bên gửi cần phải xác thực
có thể là một người sử dụng máy tính, bản thân một máy tính hoặc một phần mềm.
Việc xác thực thường phụ thuộc vào một hoặc nhiều yếu tố xác thực
(authentication factor) để minh chứng cụ thể.
Xác thực là khâu đặc biệt quan trọng để bảo đảm an toàn cho hoạt động của
hệ thống thông tin dạng như hệ thống ngân hàng điện tử.
Hệ thống luôn luôn trước tiên xác thực một thực thể khi nó cố thử thiết lập
liên lạc. Khi đó nét nhận dạng của thực thể được dùng để xác định sự truy nhập của
nó như một đặc quyền hoặc để đạt được sự sẵn sàng phục vụ.
2.2. Các yếu tố xác thực.
Những yếu tố xác thực dành cho con người (người sử dụng) nói chung có
thể được phân loại như sau:
- Những cái mà người sử dụng sở hữu bẩm sinh, chẳng hạn như dấu
vân tay hoặc mẫu dạng võng mạc mắt, chuỗi ADN, mẫu dạng giọng
nói, chữ ký, tín hiệu sinh điện đặc thù do cơ thể sống tạo ra, hoặc
-

những định danh sinh trắc học (biometric identifier)...
Những cái người sử dụng có, chẳng hạn như chứng minh thư, chứng
chỉ an ninh (security token), chứng chỉ phần mềm (software token)
hoặc điện thoại di động...

7



-

Những gì người sử dụng biết, chẳng hạn như mật khẩu (password),
mật ngữ (pass phrase) hoặc mã số định danh cá nhân (personal

2.3.

identification number - PIN)…
Các phương pháp xác thực
2.3.1.
Dựa trên định danh và mật khẩu.
Xác thực dựa trên User Name (định danh người sử dụng) và Password (mật

khẩu): Sự kết hợp của một cặp username và password có thể nói là cách xác thực
cơ bản nhất (và cũng phổ biến nhất). Với phương thức xác thực này, thông tin cặp
username và password nhập vào được đối chiếu với dữ liệu lưu trữ trên hệ thống,
nếu trùng khớp username và password, thì người sử dụng (User) được xác thực còn
nếu không người sử dụng bị từ chối hoặc cấm truy cập.
Nói chung phương thức xác thực này có tính bảo mật không cao lắm vì
những lý do như thường thì thông tin cặp username và password nhập vào được
gửi đi xác thực trong tình trạng plain text (ký tự văn bản thuần), tức không được
mã hóa và có thể bị chặn bắt trên đường truyền, thậm chí ngay trong quá trình nhập
vào; lộ password do đặt quá đơn giản (dạng ‘123456’, ‘abc123’ v.v.) hoặc dễ đoán
(tên / ngày sinh của người thân...).
2.3.2.
Dựa trên giao thức thách thức, đáp ứng.
Giao thức xác thực bắt tay có thử thách - Challenge Handshake
Authentication Protocol (CHAP): Challenge Handshake Authentication Protocol

(CHAP) cũng là mô hình xác thực dựa trên username/password. Khi User cố gắng
đăng nhập (log on), máy chủ (server) đảm nhiệm vai trò xác thực sẽ gửi một thông
điệp thử thách (challenge message) trở lại máy tính User. Lúc này máy tính User sẽ
phản hồi lại username và password được mã hóa. Server xác thực sẽ so sánh phiên
bản xác thực User được lưu giữ với phiên bản mã hóa vừa nhận, nếu trùng khớp thì
User sẽ được xác thực. Bản thân password không bao giờ được gửi qua mạng.
Phương thức CHAP thường được sử dụng khi User đăng nhập vào các máy
chủ ở xa (remote server) của hệ thống, chẳng hạn như RAS server. Dữ liệu chứa

8


password được mã hóa đôi khi được gọi là hash password (mật khẩu băm) theo tên
của phương pháp mã hoá dùng các hàm băm.
2.3.3.
Dựa trên giao thức xác thực Kerberos
Xác thực Kerberos: Kerberos là nền tảng xác thực chính của nhiều hệ điều
hành như UNIX, Windows... Xác thực Kerberos dùng một server trung tâm để
kiểm tra việc xác thực user và cấp phát thẻ thông hành (service ticket) để User có
thể truy cập vào tài nguyên hệ thống.
Xác thực Kerberos là một phương thức có tính an toàn khá cao nhờ việc
dùng cấp độ mã hóa rất mạnh.
Kerberos cũng dựa trên độ chính xác của thời gian xác thực giữa Server và
Client, do đó cần phải đảm bảo kết nối đồng bộ thời gian giữa các thành phần này
của hệ thống.
2.3.4.
Dựa trên nhận dạng nhân trắc học.
Xác thực áp dụng các phương pháp nhận dạng sinh trắc học (Biometrics):
Đây là mô hình xác thực có tính bảo mật cao dựa trên đặc điểm sinh học của từng
cá nhân trong đó có sử dụng các thủ tục như quét dấu vân tay (fingerprint scanner),

quét võng mạc mắt (retinal scanner), nhận dạng giọng nói (voice recognition), nhận
dạng khuôn mặt (face recognition).
Nhờ các tiến bộ vượt bậc của công nghệ sinh học phương thức xác thực dựa
trên nhận dạng sinh trắc học ngày càng trở nên phổ biến và được chấp nhận rộng
rãi. Ví dụ xác thực quét dấu vân tay hiện đã khá phổ biến trên các máy tính xách
tay, thậm chí trên điện thoại di động.
Dựa trên token.
Xác thực sử dụng token (biểu trưng kỹ thuật số): Token là phương tiện vật lý
2.3.5.

như các thẻ thông minh (smart card), thẻ đeo của nhân viên (ID badge) chứa thông
tin xác thực hoặc bộ tạo OTP (One Time Password - mật khẩu dùng một lần).
Tokens có thể lưu trữ mã số nhận dạng cá nhân (PIN), thông tin về user, lưu
giữ hoặc tạo ra password.

9


Các thông tin trên token chỉ có thể được đọc / xử lý bởi các thiết bị / hệ
thống đặc dụng. Chẳng hạn như thẻ thông minh được đọc bởi đầu đọc thẻ smart
card chuyên dụng, OTP được xử lý bởi hệ thống xác thực sử dụng yếu tố xác thực
thứ hai là mật khẩu dùng một lần.
2.4.
Một số phương thức xác thực
LDAP:
LDAP là chữ viết tắt của Lightweight Directory Access Protocol. LDAP phát
triển dựa trên chuẩn X500. Đây là chuẩn cho dịch vụ thư mục (Directory Service DS) chạy trên nền tảng OSI.
LDAP được coi là lightweight vì LDAP sử dụng gói tin overhead thấp, được
xác định chính xác trên lớp TCP của danh sách giao thức TCP/IP (các dịch vụ
hướng kết nối) còn X500 là heavyweight vì là lớp giao thức ứng dụng, chứa nhiều

header hơn (các header của các layer tầng thấp hơn)

Hình trên là sự tương quan giữa 2 mô hình là x.500 (mô hình OSI) với mô
hình LDAP (mô hình TCP/IP)
LDAP chỉ là giao thức, không hỗ trợ xử lý như cơ sở dữ liệu. Mà nó cần một
nơi lưu trữ backend và xử lý dữ liệu tại đó. Vì vậy mà LDAP client kết nối tới
LDAP server theo mô hình sau.

10


LDAP là giao thức truy cập vì vậy nó theo mô hình dạng cây (Directory
Information Tree). LDAP là giao thức truy cập dạng client/server.

Kerneros
Kerberos là một giao thức mật mã dùng để xác thực trong các mạng máy
tính hoạt động trên những đường truyền không an toàn. Giao thức Kerberos có khả
năng chống lại việc nghe lén hay gửi lại các gói tin cũ và đảm bảo tính toàn
vẹn của dữ liệu. Mục tiêu khi thiết kế giao thức này là nhằm vào mô hình máy chủmáy khách (client-server) và đảm bảo nhận thực cho cả hai chiều.
Giao thức được xây dựng dựa trên mật mã hóa khóa đối xứng và cần đến
một bên thứ ba mà cả hai phía tham gia giao dịch tin tưởng.
11


Kerberos được thiết kế dựa trên giao thức Needham-Schroeder. Kerberos sử
dụng một bên thứ ba tham gia vào quá trình nhận thực gọi là "trung tâm phân phối
khóa" (tiếng Anh: key distribution center - KDC). KDC bao gồm hai chức năng:
"máy chủ xác thực" (authentication server - AS) và "máy chủ cung cấp vé" (ticket
granting server - TGS). "Vé" trong hệ thống Kerberos chính là các chứng thực
chứng minh tính hợp lệ của người sử dụng.

Mỗi người sử dụng (cả máy chủ và máy khách) trong hệ thống chia sẻ một
khóa chung với máy chủ Kerberos. Việc sở hữu thông tin về khóa chính là bằng
chứng để chứng minh tính hợp lệ của một người sử dụng. Trong mỗi giao dịch giữa
hai người sử dụng trong hệ thống, máy chủ Kerberos sẽ tạo ra một khóa
phiên dùng cho phiên giao dịch đó.
SASL
SASL là 1 framework cho việc cung cấp 2 dịch vụ cho các protocol (giao
thức) hướng kết nối (TCP là 1 trong số đó):
-

Authentication (xác thực)
Security layer ( tầng bảo mật)

Khi một giao thức đã hỗ trợ SASL, bạn không cần phải code thêm để xác
thực người dùng ( cơ bản nhất là sử dụng 1 cặp username/password) mà chỉ việc
“đá quả bóng trách nhiệm” sang cho SASL ( có thể là 1 thư viện hay 1 daemon),
SASL sẽ thực hiện công việc xác thực người dùng theo cách bạn đã chọn, đồng
thời cũng cung cấp các tính năng security như khả năng đảm bảo dữ liệu khi truyền
được nguyên vẹn và bí mật.
SSH
SSH, hoặc được gọi là Secure Shell, là một giao thức điều khiển từ xa cho
phép người dùng kiểm soát và chỉnh sửa server từ xa qua Internet. Dịch vụ được
12


tạo ra nhằm thay thế cho trình Telnet vốn không có mã hóa và sử dụng kỹ thuật
cryptographic để đảm bảo tất cả giao tiếp gửi tới và gửi từ server từ xa diễn ra
trong tình trạng mã hóa. Nó cung cấp thuật toán để chứng thực người dùng từ xa,
chuyển input từ client tới host, và relay kết quả trả về tới khách hàng.
Để hiểu SSH là gì thì trước tiên bạn cần phải biết nó hoạt động như thế nào.

Nếu bạn đang sử dụng Linux hoặc Mac, sử dụng SSH rất đơn giản. Nếu bạn sử
dụng Windows, bạn chỉ cần sử dụng những SSH client để mở kết nối SSH. Những
trình SSH client phổ biến là Putty.

13


CHƯƠNG 3: XÁC THỰC PAM TRÊN LINUX
3.1.

Khái niệm về PAM
PAM (Pluggable Authentication Modules) là một bộ các thư viện chia sẻ cho

phép người quản trị hệ thống cục bộ chọn cách các ứng dụng xác thực người dùng.
Chức năng của (các) tệp cấu hình là cung cấp ánh xạ từ tên dịch vụ của ứng
dụng tới một tập hợp các module cung cấp dịch vụ xác thực cho ứng dụng thô. Khi
một ứng dụng nhận biết pam với một tập tin trong /etc/pam.d bắt đầu, thư viện
PAM nạp cấu hình cho dịch vụ được chỉ định và xây dựng bốn chuỗi module (một
cho mỗi cơ sở.) Nếu cấu hình không chỉ định bất kỳ module nào cho một hoặc
nhiều cơ sở hơn, cấu hình cho dịch vụ khác được sử dụng thay cho các cơ sở này.
Linux là một máy chủ, có thể cung cấp một số dịch vụ khác nhau (ví dụ:
web, ftp với các khu vực bị hạn chế bởi kiểm soát mật khẩu). Thông qua việc sử
dụng các module, PAM có thể cho phép một chương trình tìm kiếm thông qua một
số cơ sở dữ liệu mật khẩu khác nhau, ngay cả khi chương trình đó không được mã
hóa rõ ràng cho cơ sở dữ liệu cụ thể đó.
3.2.

Cấu trúc PAM
Các ứng dụng PAM được thiết lập trong thư mục /etc/pam.d hay trong file


/etc/pam.conf ( login, passwd, sshd, vsftp, …)
Thư viện các module được lưu trong /lib/security ( pam_chroot.so,
pam_access.so, pam_rootok.so, pam_deny.so, … )
Các file cấu hình được lưu trong /etc/security ( access.conf, chroot.conf,
group.conf ,… )


access.conf : Điều khiển quyền truy cập, được sử dụng cho thư viện



pam_access.so.
group.conf : Điểu khiển nhóm người dùng, sử dụng bởi
pam_group.so

14




limits.conf : Thiết lập các giới hạn tài nguyên hệ thống, được sử



dụng bởi pam_limits.so.
pam_env : Điểu khiển khả năng thay đổi các biến môi trường, sử



dụng cho thư viện pam_env.so .

time : Thiết lập hạn chế thời gian cho dịch vụ và quyền người dùng,
sử dụng cho thư viện pam_time.so.

3.3. Phương thức hoạt động hoạt động của PAM
Thuật ngữ
Các chương trình login, pass, su, sudo, … trên được gọi là privilege-granting
application ( chương trình trao đặc quyền ).
PAM-aware application: là chương trình giúp các privile-granting
application làm việc với thư viện PAM.
Các bước hoạt động:


Bước 1:Người dùng chạy một ứng dụng để truy cập vào dịch vụ mong



muốn, vd login.
Bước 2: PAM-aware application gọi thư viện PAM để thực hiện nhiệm vụ



xác thực.
Bước 3: PAM library sẽ dựa vào file cấu hình của chương trình đó trong
/etc/pam.d ( vd ở đây là login -> file cấu hình /etc/pam.d/login ) xác định
loại xác thực nào được yêu cầu cho chương trình trên. Trong trường hợp




không có file cấu hình, thì file /etc/pam.d/other sẽ được sử dụng.

Bước 4:PAM library sẽ load các module yêu cầu cho xác thực trên.
Bước 5: Các modules này sẽ tạo một liên kết tới các hàm chuyển đổi



( conversation functions ) trên chương trình.
Bước 6: Các hàm này dựa vào các modules mà đưa ra các yêu cầu với người




dùng, vd chúng yêu cầu người dùng nhập password.
Bước 7: Người dùng nhập thông tin vào theo yêu cầu.
Bước 8: Sau khi quá trình xác thực kết thúc, chương trình này sẽ dựa vào
kết quả mà đáp ứng yêu cầu người dùng ( vd cho phép login vào hệ thống )
hay thông báo thất bại với người dùng.
15


3.4.

Nghiên cứu file config
Listing 10-1: The /etc/pam.d/rlogin file
#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth sufficient /lib/security/pam_rhosts_auth.so
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth

session required /lib/security/pam_stack.so service=system-auth
Các dòng trong file config có dạng sau:
module-type

control-flag

module-path

module-args

3.4.1. MODULE TYPE


auth: thực hiện xác thực. Thông thường, một auth module sẽ yêu cầu
password để kiểm tra, hay thiết lập các định danh như nhóm người



dùng, hay thẻ kerberos.
Account điều khiển sự kiểm tra “bề mặt” với yêu cầu xác thực. Ví dụ,
nó có thể kiểm tra người dùng truy cập dịch vụ từ một host và trong



thời gian cho phép hay không.
Password: thiết lập password. Thông thường, nó luôn có sự tương



ứng giữa một module auth và một module password..

Session: điều khiển các nhiệm vụ quản lý session. Được sử dụng để
đảm bảo rằng người dùng sử dụng tài khoản của họ khi đã được xác
thực..

3.4.2. PAM MODULE CONTROL FLAGS
• Require: cờ điều khiển này nói với PAM library yêu cầu sự thành công
của

modules

tương

ứng,

vd

“auth

required

/lib/security/pam_securetty.so” à module pam_securetty.so phải thành
công. Nếu module đó không được thực hiện thành công thì quá trình
16


xác thực thất bại. Nhưng lúc đó, PAM vẫn tiếp tục với các module
khác, tuy nhiên nó chỉ có tác dụng nhằm tránh khỏi việc người dùng


có thể đoán được quá trình này đã bị thất bại ở giai đoạn nào.

Sufficient: cờ này khác với cờ trên ở chỗ, khi có một module thực hiện
thành công nó sẽ thông báo hoàn thành ngay quá trình xác thực, mà




không duyệt các module khác nữa.
Requisite: cờ này có ý nói PAM library loại bỏ ngay quá trình xác thực
khi gặp bất kỳ thông báo thất bại của module nào.
Optional: cờ này ít khi được sử dụng, nó có ý nghĩa là module này
được thực hiện thành công hay thất bại cũng không quan trọng, không

ảnh hưởng quá trình xác thực.
3.4.3. MODULE-PATH
Module-path cho PAM biết module nào sẽ sử dụng và (tùy chọn) ở đâu để
tìm nó. Hầu hết các cấu hình chỉ chứa tên của module. Kể từ khi Linux-PAM-0.56
được phát hành có hỗ trợ cho một thư mục module xác thực mặc định, và một
đường dẫn đầy đủ không còn cần thiết, chỉ có tên của module. PAM tìm kiếm các
module trong thư mục module PAM mặc định, thông thường / usr / lib /
security . Tuy nhiên, nếu phân phối Linux của bạn tuân theo tiêu chuẩn Hệ thống
tập tin Linux, các module PAM có thể được tìm thấy trong / lib / security .
Ví dụ như: pam_access.so, pam_chroot.so, pam_deny.so, pam_limits.so,
pam_listfile.so…
3.4.4. ARGUMENTS
Bất kỳ trường nào khác chứa bất kỳ đối số nào cho module. Mỗi module có
các đối số riêng của nó. Ví dụ: trong cấu hình đăng nhập của chúng tôi, "nulok"
("null ok", đối số được chuyển tới module pam_unix.so , cho biết mật khẩu trống
("null") được chấp nhận ("ok").

17



Sau đây là danh sách các tùy chọn module có khả năng được nhận dạng bởi
tất cả các module:


debug
Sử dụng lệnh syslog để ghi thông tin gỡ lỗi vào các tệp nhật ký hệ thống.



no_warn
Hướng dẫn module để không đưa ra thông báo cảnh báo cho ứng dụng.



use_first_pass
Module không nên nhắc người dùng nhập mật khẩu. Thay vào đó, nó sẽ lấy
mật khẩu đã nhập trước đó (từ module auth trước đó) và sử dụng nó. Nếu
điều đó không hiệu quả thì người dùng sẽ không được xác thực. (Tùy chọn
này chỉ dành cho module xác thực và mật khẩu).



try_first_pass
Module sẽ thử xác thực bằng mật khẩu đã nhập trước đó (từ module auth
trước đó). Nếu điều đó không có tác dụng thì người dùng sẽ được nhắc nhập
mật khẩu. (Tùy chọn này chỉ dành cho các module auth).




use_mapped_pass
Đối số này hiện không được hỗ trợ bởi bất kỳ module nào trong phân phối
Linux-PAM vì các hậu quả có thể có liên quan đến các hạn chế xuất khẩu mã
hóa của Hoa Kỳ. Trong nước Mỹ, các nhà phát triển module, tất nhiên, miễn
phí để thực hiện nó (như là các nhà phát triển ở các nước khác). Vì các lý do
tương thích, chúng tôi mô tả cách sử dụng của nó như được đề xuất trong
DCE-RFC 86.0, xem phần thư mục cho một con trỏ đến tài liệu này.
Đối số use_mapped_pass chỉ thị module để lấy mã xác thực văn bản rõ ràng
được module trước đó nhập vào (yêu cầu mã thông báo đó) và sử dụng nó để
tạo khóa mã hóa / giải mã để lưu trữ / truy xuất mã xác thực được yêu cầu
cho module này một cách an toàn. Bằng cách này, người dùng có thể nhập
một mã thông báo xác thực duy nhất và được xác thực một cách lặng lẽ bởi
18


một số module xếp chồng. Rõ ràng là một tính năng thuận tiện nhất thiết đòi
hỏi một số mã hóa mạnh mẽ đáng tin cậy để bảo mật nó. Đối số này chỉ dành
cho các loại module xác thực và mật khẩu.


expose_account
Nói chung, sự rò rỉ của một số thông tin về tài khoản người dùng không
phải là một chính sách an toàn cho các module để áp dụng. Đôi khi, thông
tin như tên người dùng hoặc thư mục chính hoặc trình bao thích hợp, có thể
được sử dụng để tấn công tài khoản của người dùng. Tuy nhiên, trong một số
trường hợp, loại thông tin này không được coi là một mối đe dọa: hiển thị
tên đầy đủ của người dùng khi yêu cầu mật khẩu trong môi trường bảo mật
cũng có thể được gọi là thân thiện . Đối số expose_account là một đối số
module chuẩn để khuyến khích một module ít bị rời rạc hơn về thông tin tài

khoản vì nó được coi là thích hợp bởi quản trị viên cục bộ.

3.5.

Giới thiệu chức năng của một số module
3.5.1. pam_unix.so
Module này cung cấp xác thực Unix truyền thống, quản lý mật khẩu và thiết

lập tài khoản người dùng. Nó sử dụng các cuộc gọi hệ thống tiêu chuẩn để lấy và
thiết lập mật khẩu và thông tin tài khoản, và dựa vào / etc / shadow và / etc /
passwd .


Account
Thiết lập tính hợp lệ của tài khoản và mật khẩu của người dùng và có thể
đưa ra lời khuyên về việc thay đổi mật khẩu của người dùng hoặc bắt buộc
thay đổi mật khẩu. Các hành động mà module này thực hiện được điều khiển
bởi các tập tin / etc / passwd và / etc / shadow .
Đối số: audit, debug



Auth
19


Thành phần này của module kiểm tra mật khẩu của người dùng dựa vào cơ
sở dữ liệu mật khẩu. Cấu hình cho thành phần này được thực hiện
trong /etc/nsswitch.conf . Một nhị phân bổ sung, unix_chkpwd , được sử
dụng để cho phép thành phần đọc các cơ sở dữ liệu được bảo vệ mà không

yêu cầu toàn bộ mô đun phải được thiết lập root.
Đối số: audit, debug, nodelay, nullok, try_first_pass, use_first_pass.


mật khẩu
Thành phần này thay đổi mật khẩu của người dùng. Các pam_cracklib.so
module có thể được xếp chồng lên nhau với thành phần này để kiểm tra bảo
mật mật khẩu.
Đối số: audit, bigcrypt, debug, md5, nis, not_set_pass, nullok, remember,
try_first_pass, use_authtok và use_first_pass.



session
Thành phần này ghi lại tên người dùng và loại phiên vào syslog, ở đầu và
cuối phiên của người dùng. Không có đối số cho thành phần này.



Argument
o

Audit - Một hình thức gỡ rối rộng hơn

o

Bigcrypt - Sử dụng phần mở rộng "C2" DEC tới crypt ().

o


debug - Đăng nhập thông tin bằng syslog

o

md5 - Sử dụng mã hóa md5 thay vì crypt ().

o

nis - Sử dụng mật khẩu NIS (Dịch vụ Thông tin Mạng).

o

nodelay - Theo mặc định, module yêu cầu một sự chậm trễ-trên-thất
bại của một giây. Đối số này ghi đè mặc định.

o

not_set_pass - Không sử dụng mật khẩu từ các module xếp chồng
khác. Không cung cấp mật khẩu mới cho các module xếp chồng khác.

o

nullok - Theo mặc định, nếu mật khẩu chính thức trống, xác thực
không thành công. Đối số này ghi đè mặc định.
20


o

Remember - (remember = n) - Lưu mật khẩu gần đây để ngăn người

dùng thay đổi mật khẩu.

o

try_first_pass - Sử dụng mật khẩu từ module auth xếp chồng trước
đó và nhắc nhập mật khẩu mới nếu mật khẩu đã truy xuất bị trống
hoặc không chính xác.

o

use_authtok - Đặt mật khẩu mới cho mật khẩu được cung cấp bởi
một module trước đó.

o

use_first_pass - Sử dụng kết quả từ mô đun auth xếp chồng lên nhau
trước đó, không bao giờ nhắc người dùng nhập mật khẩu, thất bại nếu
kết quả thất bại.

3.5.2. pam_access.so
Module này chặn tên và mật khẩu của người dùng. Nếu tên là ftp hoặc ẩn
danh , mật khẩu của người dùng được chia nhỏ tại dấu phân tách @ thành
một PAM_RUSER và một phần PAM_RHOST ; những pam-mặt hàng được thiết
lập cho phù hợp. Tên người dùng được đặt thành ftp . Trong trường hợp này
module thành công. Ngoài ra, module đặt mục PAM_AUTHTOK bằng mật khẩu
đã nhập và không thành công.
Hành vi của module có thể được sửa đổi với các cờ sau:


debug - đăng nhập nhiều thông tin hơn với syslog .




users = XXX, YYY, ... - thay vì ftp hoặc anonymous , cung cấp thông tin
đăng nhập ẩn danh vào danh sách người dùng được phân tách bằng dấu
phẩy; XXX, YYY, ... . Nếu người đăng ký nhập một trong các tên người
dùng này, tên người dùng được trả lại được đặt thành người đầu tiên trong
danh sách; `` XXX ''.



ignore - không chú ý đến địa chỉ email của người dùng (nếu được cung cấp).

21


3.5.3. pam_chroot.so
Module này được thiết kế để cung cấp một trình bao bọc trong suốt xung
quanh người dùng trung bình, một trình bao bọc chúng trong một hệ thống tệp giả.
Hữu ích nếu bạn có nhiều lớp người dùng và hơi hoang tưởng về bảo
mật. Có thể được sử dụng để giới hạn những người dùng khác có thể thấy trên hệ
thống và giới hạn việc chọn các chương trình mà họ có thể chạy.
3.5.4. pam_console.so
Module này triển khai sơ đồ cấp quyền điều khiển tương tự như
logindevperms của Solaris. Cho phép cho phép một số thiết bị và tệp nhất định khi
đăng nhập và đăng xuất.
3.5.5. pam_cracklib.so
Module này có thể được cắm vào ngăn xếp mật khẩu của một ứng dụng cụ
thể để cung cấp một số kiểm tra sức mạnh trình cắm thêm cho mật khẩu.
Module này hoạt động theo cách sau:

Đầu tiên nó gọi là thường trình Cracklib để kiểm tra độ mạnh của mật
khẩu; nếu crack thích mật khẩu, module sẽ thực hiện thêm một bộ kiểm tra độ
mạnh. Các kiểm tra này là:


Palindrome - Có phải mật khẩu mới là palindrome cũ không?



Case change only - Mật khẩu mới có phải là mật khẩu cũ chỉ thay đổi
trường hợp không?



Similar - Mật khẩu mới có quá giống mật khẩu cũ không? Điều này chủ yếu
được kiểm soát bởi một đối số, difok đó là một số ký tự nếu khác nhau giữa
cũ và mới đủ để chấp nhận mật khẩu mới, điều này mặc định là 10 hoặc 1/2
kích thước của mật khẩu mới nào nhỏ hơn. Để tránh bị khóa liên quan đến
việc cố gắng thay đổi mật khẩu dài và phức tạp, bạn có thể sử dụng
22


difignore. Đối số này có thể được sử dụng để xác định độ dài tối thiểu mà
mật khẩu mới cần phải trước khi giá trị difok bị bỏ qua. Giá trị mặc định cho
difignore là 23.


Simple - Mật khẩu mới có quá nhỏ không? Điều này được kiểm soát bởi 5
đối số minlen, dcredit, ucredit, lcredit, và ocredit. Xem phần trên các đối số
để biết chi tiết về cách các tác phẩm này và mặc định ở đó.




Rotated - Mật khẩu mới có phải là phiên bản được quay của mật khẩu cũ
không?



Already used - Mật khẩu có được sử dụng trong quá khứ không? Các mật
khẩu đã sử dụng trước đây được tìm thấy trong / etc / security / opasswd .
Module này không có đối số sẽ hoạt động tốt cho mã hóa mật khẩu unix

chuẩn. Với mã hóa md5, mật khẩu có thể dài hơn 8 ký tự và cài đặt mặc định cho
module này có thể khiến người dùng khó chọn mật khẩu mới thỏa đáng. Đáng chú
ý, yêu cầu mật khẩu mới chứa không quá 1/2 ký tự trong mật khẩu cũ trở thành
một ràng buộc không tầm thường. Ví dụ, một mật khẩu cũ của hình thức con cáo
màu nâu nhanh chóng nhảy qua những con chó lười biếng sẽ khó thay đổi ... Ngoài
ra, hành động mặc định là cho phép mật khẩu có kích thước tối thiểu là 5 ký
tự. Đối với một hệ thống md5, bạn có thể tăng kích thước tối thiểu yêu cầu của mật
khẩu. Sau đó, người ta có thể cho phép nhiều tín dụng hơn cho các loại ký tự khác
nhau nhưng chấp nhận rằng mật khẩu mới có thể chia sẻ hầu hết các ký tự này với
mật khẩu cũ.
3.5.6. pam_deny.so
Module này có thể được sử dụng để từ chối truy cập. Nó luôn luôn cho thấy
sự thất bại của ứng dụng thông qua khung công tác PAM. Như được nhận xét trong
phần tổng quan ở trên, module này có thể phù hợp để sử dụng cho các mục nhập
mặc định (OTHER).
23



3.5.7. pam_env.so
Module này cho phép bạn (un) đặt các biến môi trường tùy ý bằng cách sử
dụng các chuỗi cố định, giá trị của các biến môi trường được đặt trước đó và / hoặc
các PAM_ITEM.
Tất cả được điều khiển thông qua một tập tin cấu hình (theo mặc
định, /etc/security/pam_env.conf nhưng có thể được overriden với đối số
conffile). Mỗi dòng bắt đầu với tên biến, sau đó có hai tùy chọn có thể cho mỗi
biến DEFAULT và OVERRIDE . DEFAULT cho phép quản trị viên đặt giá trị
của biến thành một số giá trị mặc định, nếu không có giá trị nào được cung cấp thì
chuỗi rỗng được giả định. Các override tùy chọn bảo pam_env.so rằng nó nên
nhập vào giá trị của nó (trọng các giá trị mặc định) nếu có một để sử
dụng. OVERRIDE không được sử dụng, "" được giả định và không ghi đè sẽ được
thực hiện.
VARIABLE [DEFAULT = [value]] [OVERRIDE = [value]]
(Có thể không tồn tại) biến môi trường có thể được sử dụng trong các giá trị bằng
cách sử dụng cú pháp $ {string} và (có thể không tồn tại) PAM_ITEMs có thể
được sử dụng trong các giá trị sử dụng cú pháp & commat; {string}. Cả $ và &
commat; Các dấu ngoặc kép có thể được sử dụng trong các giá trị (nhưng không
phải là tên biến môi trường) khi không gian trắng là cần thiết, giá trị đầy đủ phải
được phân tách bằng dấu ngoặc kép và được nhúng hoặc thoát báo giá không được
hỗ trợ.
Module này cũng có thể phân tích một tệp bằng các cặp KEY = VAL đơn giản trên
các dòng riêng biệt ( / etc / environment theo mặc định). Bạn có thể thay đổi tệp
mặc định thành phân tích cú pháp, với cờ envfile và bật hoặc tắt nó bằng cách đặt
cờ readenv thành 1 hoặc 0 tương ứng.
Hành vi của module này có thể được sửa đổi với một trong các cờ sau:
24





debug viết thêm thông tin vào syslog.



Conffile

=

filename theo

mặc

định,

tập

tin /etc/security/pam_env.conf được dùng làm tập tin cấu hình. Tùy chọn
này sẽ ghi đè mặc định. Bạn phải cung cấp tên tệp + đường dẫn hoàn chỉnh.


envfile = filename theo mặc định, tập tin / etc / environment được sử dụng
để nạp các cặp KEY = VAL trực tiếp vào env. Tùy chọn này sẽ ghi đè mặc
định. Bạn phải cung cấp tên tệp + đường dẫn hoàn chỉnh.



readenv = 0 | 1 bật hoặc tắt đọc tập tin được chỉ định bởi envfile (0 tắt, 1
được bật). Theo mặc định, tùy chọn này được bật.
3.5.8. pam_filter.so

Mỗi thành phần của module có khả năng gọi bộ lọc mong muốn. Bộ lọc luôn

là execv (2) d với đặc quyền của ứng dụng gọi điện chứ không phải của người
dùng. Vì lý do này, người dùng không thể bị người dùng giết mà không phải đóng
phiên của họ.
Hành vi của module có thể được thay đổi đáng kể bởi các đối số được truyền
cho nó trong tệp cấu hình Linux-PAM:


debug - tùy chọn này làm tăng lượng thông tin đăng nhập vào syslog (3) khi
module được thực hiện



new_term - hành động mặc định của bộ lọc là đặt mục PAM_TTY để cho
biết thiết bị đầu cuối mà người dùng đang sử dụng để kết nối với ứng
dụng. Đối số này cho biết rằng bộ lọc nên đặt PAM_TTY thành thiết bị đầu
cuối giả được lọc.



non_term - không cố gắng đặt mục PAM_TTY.



runX - để module có thể gọi ra một bộ lọc cần biết khi nào cần gọi nó. Đối
số này là cần thiết để nói cho bộ lọc khi làm điều này. Các đối số theo sau

25



×