Một
phần quan trọng của quá trình bảo mật PC là duy trì quyền kiểm soát
liên tục đối với những dịch vụ đang chạy. Việc chạy những dịch vụ mạng
không cần thiết có thể gây ra lỗ hổng bảo mật cho hệ thống. Thậm chí
với những dịch vụ rất cần thiết cho server cũng cần được quản lý và cấu
hình cẩn trọng để giảm thiểu nguy cơ bị tấn công.
Khi cấu hình để thực hiện bảo mật một hệ thống Linux thì những dịch vụ
được quản lý trực tiếp qua file /etc/inittab, runlevels và một trong số
2 công cụ quản lý dịch vụ đặc biệt hiệu quả là
inetd và
xinetd.
File inittab
File
/etc/inittab được sử dụng bởi tiến trình
init
của hệ thống để khởi động dịch vụ. Trong một hệ thống được cấu hình
tốt, file này thường không chứa quá 24 mục, và chúng được một số phân
bổ của Linux mặc định tải lên cùng với những dịch vụ bổ sung. Nội dung
file
/etc/inittab có thể khó hiểu, nhưng quan trọng quản lý dịch vụ với nó lại rất đơn giản.
- Thứ nhất, không nên bổ sung những dịch vụ vào hệ thống khởi động bằng file /etc/inittab. Trường
hợp này cũng có nhiều ngoại lệ, tuy nhiên theo quy định chung thì những
dịch vụ bổ sung cần được quản lý bởi các công cụ khác.
- Thứ hai, không được xóa bỏ trong file /etc/inittab
những mục có trường đầu tiên (trước dấu hai chấm đầu tiên) là một ký tự
số duy nhất, hay bất kì ký tự gì trước những mục này. Những lệnh bắt
đầu với một ký tự số duy nhất sẽ mở bàn giao tiếp TTY, và
những mục được liệt kê trước chúng sẽ mở những lệnh khác, thậm chí là
chức năng. Dù cũng có nhiều ngoại lệ cho những nguyên tắc này, nhưng
tốt nhất bạn cũng không nên xóa bỏ chúng.
- Thứ ba, /etc/inittab giúp quản lý dịch vụ khi khởi động và lựa chọn runlevel. Nó không được sử dụng khi hệ thống hoạt động bình thường.
- Cuối cùng, nếu sử dụng hệ thống rc, bạn cần khởi động những dịch vụ bổ sung khi khởi động hệ thống, nhưng không nên thực hiện như vậy với hệ thống init. Khi xem xét nội dung của file /etc/inittab bạn sẽ thấy những mục kết thúc với rc 0 đến rc 6. Đây là những mục chỉ dẫn cho hệ thống init điều khiển runlevel.
Công cụ runlevels
Hoạt động của hệ điều hành nền tảng Linux có thể được quản lý thông qua
runlevel. Runlevel khác
nhau sẽ tạo ra những xử lý khác nhau, tương tự như chế độ vận hành của
hệ điều hành Windows, gồm chế độ Safe Mode, chế độ DOS Mode, …
Runlevel 0: được sử dụng để tắt mọi thứ trong hệ thống, và nếu
những cài đăt nguồn được cài đặt chính xác có thể tắt cả nguồn của hệ
thống.
Runlevel 1: được sử dụng như một người dùng đơn lẻ, chế độ ngoại tuyến có thể được sử dụng để quản lý và gỡ rối mức độ thấp.
Runlevel 2 đến
Runlevel 5: là chế độ đa người dùng cho hệ thống bình thường. Chế độ này thường được dùng cho những giao diện dòng lệnh của
runlevel 2 và
runlevel 3.
Runlevel 3 có kết nối mạng còn
runlevel 2 thì không. Ngoài ra nó cũng thường được dùng cho
runlevel 5 để tự động khởi động hệ thống cửa sổ X để cung cấp một GUI. Tuy nhiên, từ
runlevel 2 đến
runlevel 5 phải được cấu hình bởi root user.
Runlevel 6: được sử dụng để khởi động lại hệ thống, khi toàn bộ hệ thống i
nit, và thậm chí cả trình khởi động, cần khởi động lại.
Những
runlevel bổ sung (từ 7 trở lên) có thể được tạo bởi admin, nhưng những hệ thống UNIX truyền thống không cần đến chúng.
Tại tiện ích
shell, bạn có thể tìm thấy
runlevel trước đó và
runlevel hiện tại bằng cách nhập lệnh
runlevel. Nếu
runlevel của hệ thống vẫn không thay đổi, đầu ra của lệnh đó sẽ là một chữ cái
N sau đó là số của
runlevel hiện tại, trong đó, giá trị
N cho biết không có
runlevel trước đó.
Để thay đổi
runlevel, bạn có thể sử dụng lệnh
init, tiếp theo là số của
runlevel cần sử dụng. Ví dụ, lệnh
init 6 để khởi động lại hệ thống, hay
init 1 để vào chế độ người dùng đơn lẻ.
Thủ tục cấu hình
runlevel cũng rất khác nhau. Ví dụ, trong Debian GNU/Linux, gói dịch vụ được đặt trong
/etc/init.d có nhiều liên kết tới chúng từ thư mục
/etc/rcN.d, trong đó
N là số của
runlevel cần cấu hình. Những
symlink có tên bắt đầu bằng chữ cái
K chỉ những dịch vụ sẽ bị tắt, và
S chỉ những dịch vụ được khởi động khi vào
runlevel đó. Số theo sau chữ cái đó càng cao, từ 1 tới 99, thì những dịch vụ bị đóng hay được khởi động càng chậm.
Hầu hết những phân bổ nền tảng RPM đều sử dụng hệ thống rc dựa trên
những phân bổ được phát triển bởi RedHat. Hệ thống này sử dụng một cấu
trúc thư mục phức tạp hơn so với những hệ thống phân bổ nền tảng
Debian, và khác hoàn toàn hệ thống phân bổ nền tảng RPM. Tài liệu phân
bổ sẽ cung cấp nhiều thông tin tin giúp bạn quản lý
runlevel tốt hơn.
Công cụ inetd
Đây là một công cụ thường dùng để quản lý nhóm dich vụ xấu cho Linux vì
inetd là một công cụ quản lý dịch vụ thông thường. Việc hủy bỏ sự quản lý dịch vụ của
inetd rất đơn giản. Trước tiên, mở
file /etc/inetd.conf
trong một trình soạn thảo văn bản. Sau đó, tìm những dịch vụ muốn hủy
bỏ. Cuối cùng, thêm một dấu # vào trước dòng lệnh khởi động dịch vụ.
Thao tác này sẽ hủy dòng lệnh, vì vậy
inetd sẽ không khởi động dịch vụ nữa. Trước khi hiệu chỉnh, một mục của dịch vụ
ident có dạng:
ident stream tcp wait identd /usr/sbin/identd identd
Sau khi xóa bỏ ident trở thành:
# ident stream tcp wait identd /usr/sbin/identd identd
Nếu muốn gỡ bỏ dịch vụ xấu bằng mục đó, bạn chỉ cần xóa bỏ nó khỏi
file, hoặc gỡ bỏ bằng cách sử dụng trình quản lý gói phân bổ và xóa
file thực thi
/usr/sbin/ident (theo ví dụ trên). Sau khi hiệu chỉnh file
/etc/inetd.conf, lưu lại để
inetd
thực hiện những hiệu chỉnh này. Khi hoàn thành những bước này, bạn có
thể áp dụng những thay đổi này ngay lập tức bằng cách nhập lệnh dưới
đây:
kill -HUP `pidof inetd`
Lệnh này làm
inetd khởi động lại, sau đó sẽ áp dụng cấu hình file vừa được hiệu chỉnh.
Công cụ xinetd
Đây là một công cụ quản lý mới hơn nhưng phức tạp hơn
inetd. Nó có thể thực hiện nhiều chức năng hơn, thường được sử dụng để hủy bỏ dịch vụ và thao tác cũng khá đơn giản.
Sử dụng
xinetd, để hủy dịch vụ bạn phải bổ sung một lệnh vào file
/etc/xinets.conf. Nếu
chỉ muốn xóa một mục cho một dịch vụ, bạn phải xóa nhiều lệnh thay vì
một lệnh duy nhất. Tìm nhóm lệnh với tên chứa tên dịch vụ cần hủy hay
xóa, và bổ dung lệnh
disable = yes vào nhóm lệnh đó, hay xóa toàn bộ nhóm. Ví dụ, để huy telnet, bạn sử dụng lệnh sau:
service telnet { . . . disable = yes }
Trong một số hệ thống, và với một số dịch vụ, việc cấu hình dịch vụ có thể không thực hiện trong fiel
/etc/xinetd.conf. Thay vào đó, với những dich vụ như
telnet, cấu hình có thể đặt trong file
/etc/xinetd.d/telnet. Thực hiện thay đổi cấu hình cho dịch vụ đó tương tự như trong file
/etc/xinetd.conf.
Sau khi hiệu chỉnh và lưu file
/etc/xinetd.conf hay hiệu chỉnh file của dịch vụ, bạn cần phải lưu lại những hiệu chỉnh đó bằng cách sử dụng lệnh sau:
kill -USR2 `pidof xinetd`
Lệnh này sẽ thông báo yêu cầu áp dụng những hiệu chỉnh. Ngoài việc hủy
và gỡ bỏ cấu hình dịch vụ cho xinetd, bạn cũng có thể dùng tiện ích này
để kiểm soát máy chủ từ xa truy cập cào những dịch vụ nó kiểm soát.
Một máy chủ được cho phép có thể được chỉ định cấu hình dịch vụ. Ví dụ, bạn có thể giới hạn truy cập từ xa vào dịch vụ
telnet bằng cách thêm lệnh
only_from = 192.168.0.101
vào cấu hình của dịch vụ đó. Lệnh này có thể được sử dụng nhiều lần để
giới hạn cho vài máy chủ thay vì chỉ giới hạn cho một máy. Bạn cũng có
thể sử dụng những địa chỉ cục bộ để chỉ định cả hệ thống mạng. Ví dụ,
dùng lệnh
only_from = 192.168.0. để chỉ ra những dịch vụ trong mạng cục bộ nhóm C cần được cho phép truy cập.
Ngược lại, một máy chủ bị chặn cũng có thể được dùng để chỉ định cấu
hình cho dịch vụ. Ví dụ, bạn có thể chặn truy cập từ xa vào dịch vụ
telnet từ một máy chủ cho trước bằng cách bổ sung lệnh
no_access = 192.168.0.102
vào cấu hình của dịch vụ đó. Bạn cũng có thể sử dụng lệnh này nhiều lần
với những địa chỉ cục bộ để chặn nhiều máy chủ. Trong trường hợp một
máy chủ bị giới hạn bởi 2 lệnh
only_from và
no_access , thì quyền truy cập sẽ được xác định dựa trên điều kiện phù hợp nhất với máy chủ đó. Nếu
xinetd
không thể xác định lệnh nào phù hợp nhất, hệ thống sẽ mặc định lựa chọn
tùy chọn bảo mật hơn và dịch vụ sẽ không được khởi chạy.
Tóm lại, có nhiều cách để bảo mật truy cập dịch vụ từ xa, tuy nhiên bạn
phải đảm bảo rằng hệ thống tường lửa luôn được cấu hình để chống lại
tấn công từ chối dịch vụ và những nguy hiểm từ việc chạy những dịch vụ
không cần thiết.
Proxying,
Port Forwarding
thông qua cổng máy chủ và thay đổi địa chỉ mạng cũng là những biện pháp
hiệu quả làm giảm lỗ hổng của những dịch vụ chạy trên hệ thống. Những
công cụ sử dụng truy cập vào những dịch vụ đang chạy cần được cấu hình
đảm bảo bảo mật, như tắt
X Forwarding trong
SSH nếu
hiện không sử dụng Server X khi dùng tiện ích bảo mật để kết nối từ xa.
Việc quản lý trực tiếp những dịch vụ là công việc rất quan trọng trong
việc bảo mật hệ thống Linux, tuy nhiên đây không phải là một phần trong
kế hoạch bảo mật tổng thể.