Hiện nay, trên môi trường máy chủ, Linux ngày càng chiếm một vị trí
quan trọng. Nguyên nhân khiến Linux dần trở thành một đối thủ tiềm nǎng
của hệ điều hành Microsoft Windows là do tính ổn định, độ linh hoạt và
khả nǎng chịu tải lớn: đây là những đặc điểm quan trọng hàng đầu của
một hệ thống máy phục vụ.
Tính bảo mật tốt cũng là một trong những điểm nổi bật của Linux. Tuy
nhiên, để một hệ thống Linux có khả nǎng chống lại các cuộc tấn công,
người quản trị cũng cần phải nắm được một số kỹ nǎng nhất định. Trong
bài viết này, chúng tôi xin giới thiệu một số kinh nghiệm nhằm nâng cao
tính an toàn cho một hệ thống Linux (để dễ theo dõi cho bạn đọc, chúng
tôi sẽ minh hoạ bằng RedHat, một phiên bản Linux rất phổ biến ở Việt
Nam và trên thế giới).
1.1. Loại bỏ tất cả các account và nhóm đặc biệt
Ngay sau khi cài đặt Linux, người quản trị nên xoá bỏ tất cả các
account và nhóm (group) đã được tạo sẵn trong hệ thống nhưng không có
nhu cầu sử dụng, ví dụ như lp, sync, shutdown, halt, news, uucp,
operator, games, gopher, v.v... (Tuy nhiên bạn đọc cần biết rõ những
account và nhóm nào không cần cho hệ thống của mình rồi hãy xoá)
Thực hiện việc xoá bỏ account với lệnh :
# userdel
Ví dụ, nếu không có nhu cầu về in ấn trên hệ thống, có thể xoá account lp như sau:
# userdel lp
Tương tự như vậy, có thể thực hiện việc xoá bỏ các nhóm không cần thiết với lệnh
# groupdel
2.2. Che giấu file chứa mật khẩu
Từ lịch sử xa xưa của Unix và cả Linux, mật khẩu của toàn bộ các
account đã từng được lưu ngay trong file /etc/password, file có quyền
đọc bởi tất cả các account trong hệ thống! Đây là một kẽ hở lớn cho các
kẻ phá hoại: Mặc dù các mật khẩu đều được mã hoá, nhưng việc giải mã
ngược là có thể thực hiện được (và có thể thực hiện khá dễ dàng, đặc
biệt vì cơ chế mã hoã mật khẩu không phải là khó phá và ngày nay khả
nǎng tính toán và xử lý của máy tính rất mạnh). Vì lí do trên, gần đây
các nhà phát triển Unix và Linux đã phải đặt riêng mật khẩu mã hoá vào
một file mà chỉ có account root mới đọc được: file /etc/shadow. (Khi sử
dụng phương pháp này, để đảm bảo tính tương thích, nơi vốn đặt mật khẩu
trong file /etc/password người ta đánh dấu "x")
Nếu bạn đọc đang sử dụng các phiên bản RedHat gần đây (ví dụ RedHat 6.x
hay 7.x) thì nhớ chọn lựa Enable the shadow password khi cài đặt RedHat
để sử dụng tính nǎng che giấu mật khẩu này (Cũng thật may vì chọn lựa
này là mặc định trong hầu hết các phiên bản Linux đang sử dụng rộng rãi
hiện nay)
3.3. Tự động thoát khỏi shell
Người quản trị hệ thống rất hay quên thoát ra khỏi dấu nhắc shell khi
kết thúc công việc. Bản thân tôi cũng đã từng nhiều lần khi đang thực
hiện việc quản trị với account root thì bỏ đi vì một số công việc khác.
Thật nguy hiểm nếu lúc đó có một kẻ phá hoại ở đó: Kẻ này có thể dễ
dàng có quyền truy xuất hệ thống ở mức cao nhất mà chẳng cần tốn một
chút công sức nào cả.
Để giảm nguy cơ này, người quản trị nên cài đặt tính nǎng tự động thoát
ra khỏi shell khi không có sự truy xuất nào trong một khoảng thời gian
định trước bằng cách đặt một tham số quy định khoảng thời gian hệ thống
vẫn duy trì dấu nhắc shell.
Muốn cài đặt tham số này, người sử dụng biến môi trường TMOUT và gán
cho nó một giá trị số thể hiện khoảng thời gian tính bằng giây hệ thống
vẫn duy trì dấu nhắc. Để thực hiện điều này cho tất cả các account
trong hệ thống, cách đơn giản nhất là đặt nó vào file /etc/profile dòng
lệnh sau: (giả sử ta đặt khoảng thời gian là 600 giây)
TMOUT=600
Như vậy là nếu trong khoảng 10 phút người sử dụng không truy xuất
shell, shell sẽ tự động thoát ra. Tuy nhiên cần chú ý: Mẹo này sẽ không
"ǎn" nếu lúc đó người dùng đang chạy một chương trình nào đó như vi hay
mc,... Có nghĩa là người dùng phải đang làm việc trực tiếp với shell
chứ không phải với bất kỳ một chương trình nào khác.
4.4. Loại bỏ các dịch vụ không sử dụng
Một điều khá nguy hiểm là sau khi cài đặt, hệ thống tự động bật chạy
khá nhiều dịch vụ (và đa số là các dịch vụ không mong muốn), dẫn tới
tốn tài nguyên và gây nên nhiều nguy cơ về bảo mật. Người quản trị nên
loại bỏ ngay lập tức các dịch vụ không dùng tới ngay sau khi cài máy.
Hoặc đơn giản bằng cách xoá bỏ các gói phần mềm/dịch vụ không sử dụng
(qua công cụ quản trị gói phần mềm rpm của RedHat) hoặc sử dụng công cụ
ntsysv để duyệt xem tất cả các dịch vụ đang cài đặt rồi vô hiệu hoá
những dịch vụ không cần thiết (bằng cách bỏ đánh dấu các dịch vụ không
sử dụng với phím Space). Sau khi thoát ra khỏi ntsysv thì khởi động lại
máy: các dịch vụ không mong muốn sẽ không chạy nữa.
5.5. Không tiết lộ thông tin về hệ thống qua telnet
Dịch vụ cho phép truy xuất hệ thống từ xa telnet có khả nǎng tiết lộ
thông tin về hệ thống, dễ tạo điều kiện cho những kẻ phá hoại tấn công
dựa vào những điểm yếu đã biết. Điều này rất dễ nhận thấy: Mọi người
dùng kết nối từ xa vào dịch vụ telnet đều nhận được thông tin về tên
máy, phiên bản Linux và phiên bản của nhân (kernel) của máy chủ.
Để tránh điều này, ta cần thực hiện việc kích hoạt telnetd (telnet
server) với tham số -h. (Tham số -h sẽ ngǎn telnet tiết lộ các thông
tin và chỉ in ra dấu nhắc "Login:" cho những người kết nối từ xa).
Do các phiên bản RedHat 7.x khi chạy telnetd không còn sử dụng inetd
nữa (mà sử dụng xinetd - một phiên bản nâng cấp và có nhiều cải tiến so
với inetd) nên cách cấu hình lại telnetd sẽ khác nhau tuỳ theo phiên
bản RedHat đang sử dụng.
+ Với các phiên bản RedHat 6.x và trước đó, thực hiện các bước sau:
Trong file /etc/inetd.conf, thay đổi dòng
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
chuyển thành :
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
Tiếp theo, khởi động lại inetd bằng câu lệnh:
# /etc/rc.d/init.d/inetd restart
+ Với các phiên bản RedHat 7.x, thực hiện bước sau:
window.google_render_ad();
Trong file /etc/xinetd.d/telnet , thêm chọn lựa:
server_args = -h
File trên sẽ có dạng như sau;
service telnet
{
disable = yes
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
server_args = -h
}
Tiếp theo, khởi động lại xinetd bằng câu lệnh:
# /etc/rc.d/init.d/xinetd restart
6.6. Tránh sử dụng các dịch vụ không mã hoá thông tin trên đường truyền
Mặc dù ở trên chúng tôi đã trình bày cách ngǎn dịch vụ telnet tiết lộ
thông tin, nhưng chúng tôi xin có lời khuyên: Tuyệt đối tránh sử dụng
những dịch vụ kiểu như telnet, ftp (ngoại trừ ftp anonymous) vì những
dịch vụ này hoàn toàn không hề mã hoá mật khẩu khi truyền qua mạng. Bất
kỳ một kẻ phá hoại nào cũng có thể dễ dàng "tóm" được mật khẩu của bạn
bằng những công cụ nghe lén kiểu như sniffer.
Ơ' những trường hợp có thể, nên sử dụng dịch vụ ssh thay thế cho cả ftp
và telnet: dịch vụ SSH (Secure Shell) dùng cơ chế mã hoá công khai để
bảo mật thông tin, thực hiện mã hoá cả mật khẩu lẫn thông tin chuyển
trên đường truyền. Hiện đang được sử dụng khá rộng rãi, gói phần mềm
của SSH cũng được đóng kèm trong hầu hết các phiên bản gần đây của
Linux. Chẳng hạn, các phiên bản RedHat từ 7.0 trở lên mặc định đều cài
OpenSSH, một sản phẩm mã nguồn mở có thể sử dụng hoàn toàn miễn phí.
(Bạn đọc có thể tham khảo website
www.openssh.org về sản phẩm này).
Ngoài ra, những dịch vụ "r" kiểu như rsh, rcp hay rlogin chúng tôi cũng
khuyên nên tuyệt đối tránh sử dụng. Lý do là các dịch vụ này ngoài việc
truyền mật khẩu không mã hoá còn thực hiện việc kiểm tra quyền truy
xuất dựa trên địa chỉ máy kết nối, là một điều cực kỳ nguy hiểm. Các kẻ
phá hoại sử dụng kỹ thuật spoofing đều có thể dễ dàng đánh lừa được
cách kiểm tra này khi "làm giả" được địa chỉ của máy truy xuất dịch vụ
hợp lệ.
7. 7. Cấm sử dụng account root từ consoles
Có thể bạn đọc đều nhận thấy, ngay sau khi cài đặt RedHat, account root
sẽ không có quyền kết nối telnet vào dịch vụ telnet trên hệ thống (chỉ
những account thường mới có thể kết nối). Nguyên nhân là do file
/etc/securetty quy định những console được phép truy nhập bởi root chỉ
liệt kê những console "vật lý" (tức là chỉ truy xuất được khi ngồi trực
tiếp tại máy chủ) mà bỏ qua những kết nối qua mạng. Dịch vụ ftp cũng sẽ
bị hạn chế này: account root không được phép truy xuất ftp qua mạng.
Để tǎng tính bảo mật hơn nữa, soạn thảo file /etc/securetty và bỏ đi những console bạn không muốn root truy nhập từ đó.