Khi là quản trị viên hệ thống, một trong những nhiệm vụ trọng yếu của bạn là xử lý các vấn đề bảo mật server.. Trong phần này chúng tôi muốn bàn về vấn đề bảo mật file hệ thống, các giới
Trang 1Mẹo giữ server Ubuntu Linux của bạn an toàn
Trang 2Khi là quản trị viên hệ thống, một trong những nhiệm vụ trọng yếu của bạn là xử lý các vấn đề bảo mật server Nếu server của bạn được kết nối
Internet, bạn nên đặt nó trong vùng xung đột Nếu đó chỉ là một server nội
bộ, bạn vẫn cần xử lý (có thể là một cách ngẫu nhiên) những đối tượng nguy hiểm, các nhân viên chống đối hay gã kế toán nào đó muốn đọc trộm e-mail
bí mật của sếp
Thông thường Ubuntu Server rất an toàn
Ubuntu Server Team - nhóm sản xuất các phiên bản update bảo mật văn phòng - đã thực hiện lần lột xác thành công nhất trong lịch sử ngành công nghiệp bảo mật với Ubuntu Server
Ubuntu không được gắn với chính sách cổng mở Có nghĩa là sau khi bạn cài đặt, để chế dộ desktop hay server cho Ubuntu xong, mặc định sẽ không có chương trình ứng dụng nào chấp nhận kết nối đến internet Giống như
Ubuntu desktop, Ubuntu Server sử dụng cơ chế sudo trong quản trị hệ thống,
tránh sử dụng tài khoản gốc Các bản update bảo mật còn được bảo hành ít nhất 18 tháng sau khi phát hành (một số bản lên đến 5 năm như Dapper) và hoàn toàn miễn phí
Trang 3Trong phần này chúng tôi muốn bàn về vấn đề bảo mật file hệ thống, các giới hạn nguồn hệ thống, xử lý các bản ghi và an ninh mạng Nhưng bảo mật
trong Linux là một đề tài khó và rộng lớn nên chúng tôi chỉ xin cung cấp cho các bạn một số cách giải quyết xung đột cơ bản Để trở thành một quản trị viên tốt, bạn nên quan tâm tới vấn đề này và học hỏi thêm từ các nguồn khác
mà chúng tôi sẽ cung cấp trong bài
Quản trị tài khoản người dùng
Nhiều khía cạnh quản trị người dùng của hệ thống Linux được thực hiện nhất quán trên các phân phối của nó Trước đây, hãng Debian cung cấp một số tiện ích như mã lệnh useadd, giúp bạn quản trị dễ dàng hơn Sau này Ubuntu kế thừa đầy đủ mô hình quản trị người dùng của Debian Chúng ta sẽ không đi sâu vào chi tiết của Debian mặc dầu nó được coi là mô hình chuẩn trong quản trị người dùng Các bạn muốn tìm hiểu thêm có thể tham khảo tại website của O’Reilly Vấn đề chúng ta quan tâm ở đây là sự khác biệt của Ubuntu với mô
hình chuẩn: sudo
Trang 4Ubuntu không cho phép đặt mặc định root, administrator, account Nó có cách xử lý lợi ích bảo mật khá hay và một số phương án giảm cấp đáng kinh
ngạc Đó là văn bản hoá tất cả trong các trang chính của file gốc sudo_root
Trong quá trình cài đặt, bạn thêm vào người dùng nào thì mặc định người dùng đó sẽ được đặt trong nhóm admin và có thể dùng sudo để thực hiện các nhiệm vụ quản trị hệ thống Sau khi thêm tên người dùng mới vào hệ thống, bạn có thể đưa họ vào nhóm admin bằng câu lệnh:
$ sudo adduser username admin
Nếu muốn loại một người nào ra khỏi nhóm admin, đơn giản bạn chỉ cần đặt lệnh deluser thay thế adduser
Một điều bạn nên chú ý là sudo không chỉ cung cấp quyền truy cập thư mục gốc Nó còn có thể điều khiển các quyền nhỏ bên trong, chẳng hạn như việc
ra lệnh: “chỉ cho phép người dùng này thực thi 3 câu lệnh với các đặc quyền của superuser”
Trang 5Tài liệu mô tả các quyền này nằm trong trang “sudoers” nhưng nó khá khó hiểu Bạn chỉ cảm thấy rõ ràng hơn đôi chút khi đọc đến phần ví dụ của nó, tài liệu này cung cấp hầu hết các tình huống bạn cần dùng đến sudo Khi đã thực sự hiểu, đơn giản bạn chỉ cần chạy câu lệnh:
$ visudo
Ở đây bạn phải cẩn thận Cơ sở dữ liệu sudoers, nằm trong “/etc/sudoers”
không mở được bằng một trình soạn thảo Bởi vì một trình soạn thảo không thể kiểm tra được cú pháp
Nếu bạn làm rối cơ sở dữ liệu sudoers, có thể bạn sẽ phải tự mình tra tìm dữ liệu mà không thể trở thành người quản trị được
Bảo mật hệ thống file
Mô hình bảo mật file được chuẩn hoá trong hầu hết các hệ thống tựa Unix và được gọi là mô hình POSIX Mô hình này có 3 quyền truy cập file và thư mục mở rộng cho: người sở hữu, nhóm và các đối tượng khác Tất cả đều
Trang 6được thực hiện giống nhau tại bất kỳ phân phối Linux nào Đó là lý do vì sao chúng ta không tập trung phân tích kỹ vấn đề này Các bạn có thể tham khảo
thêm tại các trang “chmod” và “chown” trong phần trợ giúp của Linux hoặc
trên Internet
Bây giờ chúng ta sẽ tập trung vào việc phân vùng bảo mật thông qua các tuỳ chọn lắp ghép, một vấn đề quan trọng cần chú ý khi xử lý bảo mật hệ thống Việc phân vùng sẽ có tác động mạnh nếu được dùng thích hợp Khi giải thích cách thức phân vùng hệ thống chúng tôi đã nhấn mạnh ưu điểm của Linux
trong việc cung cấp các thư mục “/home”, “/tmp”, “/var” cho các phân vùng
riêng Các thư mục này đề cập đến cách dùng các tuỳ chọn đặc biệt khi ghép các phần vùng vào hệ thống file
Nhiều tuỳ chọn lắp ghép là kiểu hệ thống file phụ thuộc Nhưng những tuỳ chọn chúng ta xét đến không phải loại này Chúng ta có một số tuỳ chọn sau:
nodev: Một hệ thống file lắp ghép với tuỳ chọn nodev sẽ không cho phép sử
dụng hay tạo các file “device” đặc biệt Chẳng có lý do tốt đẹp nào khi cho
phép hệ thống file biên dịch các ổ đặc biệt block, character vì như thế tức là
Trang 7cho phép chúng tạo ra các nguy hiểm bảo mật tiềm ẩn
nosuid Các file trong Unix nói chung và trong Linux nói riêng đều có thể
được đánh dấu bằng cờ để cho phép một người nào đó thực thi file bằng
quyền của người khác hay nhóm khác, thông thường là của người quản trị hệ
thống Cờ này được gọi là setuid (suid) hay cờ nhị phân setgid bit Nó cũng
cho phép thực thi file bên ngoài thư mục chứa các mã nhị phân hệ thống
không cần thiết, làm giảm độ an toàn Nếu một người dùng được quyền sử dụng thì anh ta có thể tạo hoặc lấy một cờ nhị phân suid theo cách chọn riêng Sau đó có thể sử dụng hệ thống một cách hiệu quả
noexec: nếu một hệ thống file được đánh dấu cờ là noexec, người dùng sẽ
không thể chạy bất kỳ chương trình thực thi nào nằm trong nó
noatime cờ này nói rằng hệ thống file không giữ bản ghi lần truy cập cuối
cùng của các file Nếu sử dụng một cách bừa bãi có thể khiến giảm an toàn hệ thống Vì nó giới hạn thông tin ghi sự cố bảo mật Cờ này cũng cung cấp các lợi ích thực thi cho bất kỳ kiểu dùng nào Bạn nên dùng trên các phân vùng, nơi bảo mật cân bằng với tốc độ
Trang 8Quyết định sử dụng tuỳ chọn lắp ghép nào trong phân vùng nào là một kỹ thuật cao Bạn sẽ thường xuyên phải phát triển các tham chiếu khi trở nên quen thuộc hơn với cơ chế quản trị Dưới đây là kiểu lựa chọn cơ bản các bạn
có thể tham khảo Tất nhiên các bạn có thể lựa chọn kiểu khác, nhưng nên bắt đầu bằng kiểu cơ bản này:
• /home-nosuid, nodev
• /tmp-noatime, noexec, nodev, nosuid
• /var-noexec, nodev, nosuid
Giới hạn nguồn hệ thống
Mặc định Linux sẽ không sử dụng bất kỳ giới hạn nguồn nào trong các tiến trình của người dùng Điều này có nghĩa là bất kỳ người dùng nào đều được
tự do lấp đầy bộ nhớ làm việc trên máy, hoặc sinh ra các tiến trình lặp vô hạn, trả lại hệ thống không dùng được trong vài giây Giải pháp khắc phục là thiết
lập một số giới hạn nguồn bằng cách chỉnh sửa file “/etc/security/limits.conf”:
$ sudoedit /etc/security/limits.conf
Trang 9Các thiết lập đều được giải thích trong các comment bên trong file Các bạn
nên dùng ít nhất là giới hạn “nproc” hoặc cũng có thể là
“as/data/_memlock/rss”
Mẹo nhỏ: một ví dụ giới hạn nguồn real-life
Chúng tôi mới chỉ giới thiệu sơ lược về các giới hạn như thế nào trên các server sản xuất Dưới đây là cấu hình server đăng nhập chung của Bộ môn khoa học máy tính, trường đại học Harvard, Hoa Kỳ:
as 2097152 _
data 131072 _
memlock 131072 _
rss 1013352 _
Trang 10hard nproc 128
Các giới hạn này quy định người dùng có thể sử dụng 128 tiến trình, với không gian địa chỉ lớn nhất là 2GB, kích thước dữ liệu nhỏ nhất và địa chỉ được khoá trong bộ nhớ là 128MB, giới hạn kích thước tập hợp lưu trú lớn nhất là 1GB
Các file bản ghi hệ thống
Khi là một quản trị viên hệ thống, các file bản ghi log là một trong số những người bạn tốt nhất của bạn Nếu bạn theo dõi các file này một cách thưòng xuyên, cẩn thận, bạn sẽ phát hiện được lỗi sai trong hệ thống ngay khi nó vừa xuất hiện Do đó bạn có thể giải quyết được hầu hết mọi vấn đề trước khi chúng kịp phát sinh
Đáng tiếc, khả năng quan tâm tới các file log này ngày càng giảm Vì thế các quản trị viên thường chỉ sử dụng phần mềm thực hiện tiến trình log, cảnh báo
họ một số sự kiện nào đó, hoặc ghi các tuỳ chọn riêng của họ theo một số
Trang 11ngôn ngữ như Perl và Python
Các bản ghi log thường nằm trong thư mục “/var/log” Sau khi server của bạn
chạy được một lúc, bạn sẽ thấy có rất nhiều phiên bản file log cũ đang tăng lên trong thư mục này Nhiều trong số chúng được nén trong chương trình
nén gzip (với đuôi mở rộng là “.gz”)
Dưới đây là một số file log cần chú ý:
/var/log/syslog – file log hệ thống thông thường
/var/log/auth.log – các file log thẩm định hệt thống
/var/log/mail.log các file log thư hệ thốngsystem
/var/log/messages – các tin nhắn log thông thường
/var/log/dmesg – tin nhắn bộ đệm chuông ở nhân kernel, thông thường
từ khi khởi động hệ thống
Hộp công cụ Toolbox Log
Khi xem lại các file log, có một vài công cụ lựa chọn mà bạn phải sử dụng thuần thục Phần cuối của các tiện ích được in ra đặt mặc định là mười dòng
Trang 12cuối cùng của file, đây là tùy chọn gọn nhỏ cho biết thông tin về lần cuối cùng truy cập vào file log
$ tail /var/log/syslog
Với tham số -f, phần đuôi được đưa vào theo mẫu dưới, nó sẽ mở các file và thể hiện sự thay đổi trên màn hình cho bạn biết
Các file z.grep, zcat, zless cũng hoạt động giống như các file tương ứng
không có chữ “z” ở đầu Các file này là kiểu file nén của gzip Ví dụ, để lấy
ra danh sách các dòng trong tất cả file log nén có từ “warthog” bạn chỉ cần
cung cấp câu lệnh sau:
$ zgrep -i warthog /var/log/*.gz
Hộp công cụ Toolbox của bạn xử lý các log phát triển theo kinh nghiệm và dựa trên các tham chiếu của bạn nhưng bạn nên tìm kiếm trong apt-cache các file log trước
Trang 13Một chút về bảo mật mạng
Quản trị bảo mật mạng là một thành phần khác, được hệ điều hành cung cấp theo mảng khá rộng Giữa Ubuntun và các mô hình phân phối khác của Linux không có sự khác nhau nhiều lắm
Câu lệnh iptables là phần mặt trước tới các bảng tường lửa rất mạnh của
Linux Thật không may, thao tác xử lý với iptables có thể khó hơn nhiều nhất
là khi bạn đang cố gắng thiết lập các chính sách firewall tổng hợp Câu lệnh dưới đây xoá tất cả các gói dữ liệu đến từ một tên miền xấu:
$ sudo iptables -A INPUT -s www.slashdot.org -j DROP
Các tài liệu hướng dẫn, các cách thức thực hiện và các bài báo về iptables có trên Internet với số lượng lớn và hệ thống trang chính cung cấp thông tin chi tiết về các tuỳ chọn thích hợp Bạn nên bỏ ra một chút thời gian học về
iptables vì nó sẽ cho phép bạn cài đặt chế độ bảo mật an toàn trên bất kỳ cơ chế Linux nào và sẽ dễ dàng hơn khi học về các hệ thống tường lửa OS khác
Trang 14Những điểm cần chú ý cuối cùng về bảo mật
Trong bài này chúng ta mới chỉ lướt qua các vấn đề bề mặt của bảo mật hệ thống Mặc dù chúng tôi đã cố gắng cung cấp cho các bạn các gợi ý hay về điểm bắt đầu và nơi có thể học hỏi thêm Nhưng thật sự là không có một hệ thống bảo mật hoàn hảo nào cả Bảo mật không có nghĩa là xoá bỏ được hoàn toàn các vi phạm, mà chỉ là làm cho chúng trở nên khó bị khai thác, khó bị tấn công Định nghĩa này có thể bị thay đổi dễ dàng Bởi nó còn phụ thuộc vào kẻ tấn công Nếu kẻ tấn công là một đứa trẻ bụi đời, sống trong tầng hầm, nhai bánh pizza lạnh thì nó có thể chán nản, dễ dàng bỏ cuộc nếu hàng rào an ninh của bạn quá an toàn Nhưng nếu bạn đang giữ các thông tin bí mật đắt giá thì cho dù hệ thống bảo mật có an toàn đến đâu vẫn có thể bị phá vào một ngày nào đó Bởi hoạt động phá hoại lúc này xuất phát từ quan điểm giá cả, lợi nhuận của kẻ tấn công
Bảo mật cũng khá rõ ràng, vì nó được phát triển như là một khái niệm trong khoa học máy tính Muốn bảo mật thật tốt đòi hỏi phải thực sự hiểu sâu về các hoạt động bên trong hệ thống máy tính Tuy nhiên cũng sẽ chẳng có cải tiến đáng kể nào nếu bạn hiểu sâu về nó mà không biết bắt đầu từ đâu Các
Trang 15bạn có thể bắt đầu ngay từ hôm nay, theo những tham khảo ở trên, và dùng
nó để nâng cao kiến thức bảo mật sau này của bạn