Trên server có các ổ đĩa vật lý chứa các file hệ thống được chia sẻ và một số dịch vụ chạy ngầm trên hệ thống daemon phục vụ cho việc chia sẻ với client gọi là quá trình export.. Các cli
Trang 1Lời nói đầu 3
Đề Tài 13: 4
A NFS-NETWORK FILE SYSTEM 5
I Giới Thiệu Sơ Lược Về NFS 5
II Setup NFS Server 6
1 Danh sách các file cấu hình, các dịch vụ, các file script và câu lệnh của NFS server 6
a /etc/exports 6
b /Etc / hosts.allow và / etc / hosts.deny 7
2 Khởi động các dịch vụ có liên quan 7 a Khởi động portmapper 8 b Các tiến trình ngầm: 8 3 Xác minh các dịch vụ của NFS đang chạy 8
4 Cập nhật thay đổi cho /etc/exports 9
III Minh Họa Việc Cấu Hình NFS: 9
1 Thiết lập trên server: 9
2 Thiết lập trên client 11
IV Bảo Mật 11
1 Tổng quan 11
2 The Portmapper-quản lý các kết nối 11
3 Server security: nfsd and mountd 12
4 Client security 13 a Tùy chọn gắn kết “nosuid” – the nosuid mount option 13 b Tùy chọn gắn kết “broken_suid” – the broken_suid mount option 14 5 NFS và tường lửa 14
6 Truyền đa giao thức NFS thông qua SSH 16
7 Tóm tắt 17
B NIS-NETWORK INFORMATION SERVICE 18
I Giới Thiệu Sơ Lược Về NIS 18
II Cấu Hình NIS 18
1 Cấu hình NIS server:
19 a Cài đặt các gói dịch vụ
19 b Thay đổi file /etc/sysconfig/network
19 c Thay đổi file /etc/yp.conf
19 d Khởi động các dịch vụ NIS server liên quan
19 e Khởi tạo NIS domain 20
Page 1 Dương Mạnh Khánh
Trang 2f Khởi động 2 dịch vụ ypbind và ypxfrd 22
g Kiểm tra lại xem các dịch vụ đã chạy ổn chưa 22 2 Thêm người dùng NIS 23
3 Cấu hình NIS client 24
a Chạy authconfig 24 b Khởi động các dịch vụ ngầm liên quan tới NIS client 24 c Kiểm tra việc phân giải tên miền 24 d Kiểm tra việc truy cập tới NIS server 25 a Thử đăng nhập vào NIS server 25 i Đăng nhập thông qua Telnet 25 ii Đăng nhập thông qua SSH 26
III Minh Họa việc Cấu Hình NIS 27
IV Bảo Mật 32
Phụ Lục: 33
Một số khái niệm: 33
Tài liệu tham khảo: 33
Trang 3Lời nói đầu
Hiện nay hệ điều hành Linux đang ngày càng được ứng dụng trong nhiều ngành khoa học cũng như phục vụ cuộc sống thường ngày, từ ứng dụng trong các hệ thống chuyên biệt phục vụ trong y tế, quân đội tới phục vụ trong hệ thống giáo dục và ứng dụng văn phòng cho người dùng cuối…
Trong những năm gần đây hệ điều hành Linux từng bước được đưa vào sử dụng tại Việt Nam Nhiều tổ chức, công ty và các dự án tin học đã chọn Linux là môi trường để phát triển các ứng dụng của mình Chính vì thế nhu cầu tìm hiểu hệ điều hành này đang trở nên rất quan trọng và cần thiết
Đề tài này chỉ đề cập tới 2 ứng dụng rất nhỏ trong việc khai thác các dịch vụ quản trị mạng trên hệ điều hành linux đó là Network File System (NFS) và Network Information Service (NIS)
Tài liệu về linux hiện nay rất nhiều tuy nhiên các tài liệu chuyên sâu về 1 mảng nào đó thì đa số vẩn là tiếng Anh và hơn nữa: Linux hiện nay có rất nhiều bản phân phối ( trên 30 bản phân phối tính đến tháng4/2011 ), chính vì thế trong quá trình thực hiện đồ án, chúng em gặp không ít khó khăn khi tham khảo các tài liệu với nhiều từ chuyên ngành, cũng như có sự sai khác giữa các bước thiết lập trên từng bản phân phối Từ thực tế đó chắc chắn đề tài này không tránh khỏi nhiều thiếu sót và chưa chính xác Rất mong nhận được sự đóng góp ý kiến của thầy
Em chân thành cảm ơn sự hướng dẫn của thầy Nguyễn Tấn Khôi và các bạn cũng như
những thành viên trên các diễn đàn linux đã giúp đỡ em hoàn thành đề tài này
Quảng Ngãi,ngày 08, tháng 05, năm 2017
Trang 4Đề Tà i 06:
Tìm hiểu và khai thác dịch vụ quản trị mạng NIS, NFS trên hệ điều hành Linux: Giới thiệu chức năng
Các thư viện hỗ trợ và cách biên dịch cài đặt từ mã nguồn
Các dịch vụ/tools liên quan và file cấu hình
Triển khai dịch vụ trên máy server và client Minh họa kết quả cụ thể
Cơ chế an toàn và bảo mật cho dịch vụ
Trang 5A NFS-NETWORK FILE SYSTEM
I Giới Thiệu Sơ Lược Về NFS
NFS (Network File System) là hệ thống cung cấp dịch vụ chia sẻ file phổ biến hiện nay trong hệ thống mạng Linux và Unix
NFS được phát triển để cho phép các máy tính gắn kết tới 1 phân vùng đĩa trên 1 máy từ xa giống như
nó là đĩa cục bộ (local disk.)vậy nó cho phép việc truyền tải file qua mạng được nhanh và trơn tru hơn
Nó cũng tạo ra khả năng tìm tàng cho những người mà bạn không mong muốn truy cập ổ cứng của bạn qua mạng (theo cách đó họ có thể đọc email, xóa file và làm sập hệ thống của bạn) nếu bạn cài đặt nó không chính xác
NFSử dụng hệ thống mô hình client/server Trên server có các ổ đĩa vật lý chứa các file hệ thống được chia sẻ và một số dịch vụ chạy ngầm trên hệ thống (daemon) phục vụ cho việc chia sẻ với client (gọi là quá trình export) Ngoài ra các dịch vụ chạy trên server cũng cung cấp chức năng bảo mật file và quản lý lưu lượng sử dụng (file system quota) Các client muốn sử dụng các file system được chia sẻ trên Server chỉ đơn giản dùng giao thức NFS để mount (gắn kết) các file system đó lên hệ thống của mình
Hệ thống chia sẻ file NFS được sử dụng với nhiều chức năng khác nhau Ví dụ thay vì mổi hệ thống
client/server của bạn phải có một phân vùng /home/username của từng người dùng thì chỉ cần lưu trữ thư
mục đó trên 1 máy chủ trung tâm (NFS server), sau đó dùng giao thức NFS để mount thư mục
/home/username tương ứng của từng người dùng khi họ đăng nhập hệ thống.
Có vài sự khác biệt giữa các phiên bản 2 NFS,3NFS,4NFS Bạn sẽ cần 3 NFS nếu như cài đặt trên một
hệ thống lớn hay hệ thống chuyên biệt nào đấy, còn 2 NFS và 4 NFS thích hợp cho người dùng ngẫu
Trang 6II Setup NFS Server
Thiết lập máy chủ sẽ được thực hiện theo hai bước: Thiết lập các tập tin cấu hình cho NFS, và sau đó khởi động các dịch vụ NFS.
1 Danh sách các file cấu hình, các dịch vụ, các file script và câu lệnh của NFS server
Các dòng text trong file cấu hình /etc/exports có cú pháp như sau :
dir host1(options) host2(options) hostN(options) …
T
r o n g đ ó :
dir : thư mục hoặc file system muốn chia sẻ.
host : một hoặc nhiều host được cho phép mount dir có thể được định nghĩa là một tên, một nhóm sử
dụng ký tự , * hoặc một nhóm sử dụng 1 dải địa chỉ mạng/subnetmask
options : định nghĩa 1 hoặc nhiều options khi mount Cụ thể:
ro: thư mục được chia sẻ chỉ đọc được; client không thể ghi lên nó.
rw: client có thể đọc và ghi trên thư mục.
no_root_squash: mặc định, bất kỳ file truy vấn được tạo bởi người chủ (root) máy trạm đều được
xử lý tương tự nếu nó được tạo bởi user nobody (các file tạo ra trên hệ thống mà ko do người dùng can thiệp-tài khoản vô danh) trên máy chủ (truy vấn được ánh xạ phụ thuộc vào UID của user
nobody trên server chứ không phải trên client) Nếu no_root_squash được chọn, người quản trị cao
cấp trên client sẽ có cùng mức truy cập đến các file trên hệ thống giống như quản trị cao cấp trên server Điều này có thể kéo theo nhiều vấn đề an ninh nghiêm trọng, mặc dù nó có thể là cần thiết nếu bạn muốn thực hiện công việc quản trị nào trên client-công việc đòi hỏi các thư mục phải được chia sẻ Bạn không nên chỉ định lựa chọn này nếu không có lý do rõ ràng
no_subtree_check: nếu chỉ 1 phần của ổ đĩa được chia sẻ, 1 đoạn chương trình gọi là “thẩm tra lại
việc kiểm tra cây con” được yêu cầu từ phía client (nó là 1 file n m trong phân vùng được chia sẻ) Nếu toàn bộ ổ đĩa được chia sẻ, việc vô hiệu hóa sự kiểm tra này sẽ tăng tốc độ truyền tải
Trang 7sync: thông báo cho client biết 1 file đã được ghi xong- tức là nó đã được ghi để lưu trữ an toàn-khi
mà NFS hoàn thành việc kiểm soát ghi lên các file hệ thống cách xử lí này có thể là nguyên nhân làm sai lệch dữ liệu nếu server khởi động lại
Ví dụ 1 file cấu hình mẫu /etc/exports :
/usr/local *.ipmac.vn(ro)
/home 192.168.1.0/255.255.255.0(rw)
/var/tmp 192.168.1.1(rw)
Dòng thứ nhất : cho phép tất cả các host với tên miền định dạng “somehost”.ipmac.vn được mount thư
mục /usr/local với quyền chỉ đọc
Dòng thứ hai : cho phép bất kỳ host nào có địa chỉ IP thuộc subnet 192.168.1.0/24 được mount thư mục
/home với quyền đọc và ghi
Dòng thứ ba : chỉ cho phép host có địa chỉ IP là 192.168.1.1 được mount thư mục /var/tmp với quyền đọc
và ghi
b /Etc / hosts.allow và / etc / hosts.deny
Hai tập tin đặc biệt này giúp xác định các máy tính trên mạng có thể sử dụng các dịch vụ trên máy của bạn Mỗi dòng trong nội dung file chứa duy nhất 1 danh sách gồm 1 dịch vụ và 1 nhóm các máy tính Khi server nhận được yêu cầu từ client, các công việc sau sẽ được thực thi:
Kiểm tra file host.allow – nếu client phù hợp với 1 quy tắc được liệt kê tại đây thì nó có quyền truy cập
Nếu client không phù hợp với 1 mục trong host.allow server chuyển sang kiểm tra trong host.deny
để xem thử client có phù hợp với 1 quy tắc được liệt kê trong đó hay không (host.deny) Nếu phù hợp thì client bị từ chối truy cập
Nếu client phù hợp với các quy tắc không được liệt kê trong cả 2 file thì nó sẽ được quyền truy cập
2 Khởi động các dịch vụ có liên quan
Để sử dụng dịch vụ NFS, cần có các daemon (dịch vụ chạy ngầm trên hệ thống) sau:
Portmap: Quản lý các kết nối, sử dụng cơ chế RPC (Remote Procedure Call), dịch vụ chạy ở cảserver và client
NFS: Khởi động các tiến trình RPC khi được yêu cầu để phục vụ cho chia sẻ file, dịch vụ chỉ chạytrên server
NFS lock: Sử dụng cho client khóa các file trên NFS server thông qua PRC
Trang 8a Khởi động portmapper
NFS phụ thuộc vào tiến trình ngầm quản lý các kết nối (portmap hoặc rpc.portmap), chúng cần phải được khởi động trước Nó nên được đặt tại /sbin nhưng đôi khi trong /usr/sbin Hầu hết các bản phân phối linux gần đây đều khởi động dịch vụ này trong „kịch bản khởi động‟ (boot scripts –tự khởi động khi
server khởi động) nhưng vẩn phải đảm bảo nó được khởi động đầu tiên trước khi bạn làm việc với NFS (chỉ cần gõ lệnh netstat -anp |grep portmap để kiểm tra)
b ác tiến trình ngầm:
Dịch vụ NFS được hỗ trợ bởi 5 tiến trình ngầm:
rpc.nfsd- thực hiện hầu hết mọi công việc
rpc.lockd and rpc.statd-quản lý việc khóa các file.
rpc.mountd-quản lý các yêu cầu gắn kết lúc ban đầu
rpc.rquotad-quản lý các hạn mức truy cập file của người sử dụng trên server được truy xuất
lockd được gọi theo yêu cầu của nfsd Vì thế bạn cũng không cần quan tâm lắm tới việc khởiđộng nó
statd thì cần phải được khởi động riêng
Tuy nhiên trong các bản phân phối linux gần đây đều có kịch bản khởi động cho các tiến trình trên
Tất cả các tiến trình này đều n m trong gói nfs-utils, nó có thể được lưu giữ trong /sbin hoặc /usr/sbin
Nếu bản phân phối của bạn không tích hợp chúng trong kịch bản khởi động, thì bạn nên tự thêm chúng vào, cấu hình theo thứ tự sau đây:
rpc.portmap rpc.mountd, rpc.nfsd
3 Xác minh các dịch vụ của NFS đang chạy
Để làm điều này, ta truy vấn portmapper với lệnh rpcinfo quota để tìm ra dịch vụ nào đang được cung
cấp, bạn sẽ nhận được kết quả tương tự như sau:
Trang 9program vers proto port
4 Cập nhật thay đổi cho /etc/exports
Nếu bạn thay đổi trong /etc/exports, các thay đổi đó có thể chưa có hiệu lực ngay lập tức, bạn phải
thực thi lệnh exportfs để bắt nfst cập nhật lại nội dung file /etx/exports
Nếu bạn không tìm thấy lệnh exportfs thì bạn có thể kết thúc nfsd với lệnh HUD
Nếu các việc đó không hoạt động, đừng quên kiểm tra lại hosts.allow để đảm bảo r ng bạn không quên việc khai báo danh sách các máy con trong đấy Ngoài ra cũng nên kiểm tra danh sách các máy chủ trên bất kỳ hệ thống tường lửa nào mà bạn đã thiết lập
III inh Họa Việc ấu Hình NFS:
Mô hình 2 máy để thực hiện việc cấu hình
1 Thiết lập trên server:
Việc đầu tiên là tạo ra 1 thư mục dùng để chia sẻ trên máy NFS server ở đây là thư mục “nfsdir”
Trang 10Chỉnh sửa file /etc/exports để cho phép gắn kết NFS của thư mục này với các quyền truy cập dùng lệnh vi /etc/exports
VD:
(ro)=read –only
(rw)=read+write
Cập nhật bản ghi mới trong file /etc/exports ta dùng lệnh exportfs
Kiểm tra xem các dịch vụ NFS ,NFSlock, daemon portmap cũng hoạt động và tự khởi động
mổi khi server khởi động lại hay không
Trang 112 Thiết lập trên client
Tạo 1 thư mục trên client (nfsdirs) để mount tới thư mục trên server (nfsdir)
Mount 2 thư mục với nhau >> kết thúc
IV Bảo Mật
1 Tổng quan
Với NFS, có 2 bước cần thiết để 1 client được truy cập đến tài nguyên trên server
Bước đầu tiên là gắn kết truy cập việc gắn kết truy cập đạt được là do client cố gắng kết nối vào server
Nếu địa chỉ IP của các client khớp với 1 trong những địa chỉ trong “danh sách cho phép” thì client sẽ được gắn kết Điều này không thật sự an toàn Nếu ai đó có khả năng bắt chước hay chiếm lấy 1 địa chỉ đáng tin cậy thì họ có thể truy cập điểm gắn kết của bạn Một ví dụ thực tế: Bạn gọi tới công ty sửa
chữa đường ống nước, sau đó một người đến và tự giới thiệu bản thân với bạn, bạn tin r ng người đó đúng là người do công ty kia gởi đến, bởi vì họ có đeo 1 cái thẻ nhân viên của công ty trên Tuy nhiên
có thể người được cử đến là kẻ giả mạo thì sao
Mỗi một máy tính gắn kết với 1 đĩa (volume), hệ điều hành của máy sẽ có quyền truy cập đến mọi
file trên đĩa và được ghi lên các file đó, nếu đĩa được thể hiện với tùy chọn rw.
Bước thứ hai là việc truy cập file Đây là chức năng điều khiển truy cập file thông thường trên client chứ không phải 1 chức năng đặc biệt của NFS Mỗi ổ đĩa được gắn với người sử dụng và nhóm những quyền hạn trên các file giới hạn quyền điều khiển truy cập
Một ví dụ: trên server người dùng có tên NEO được ánh xạ với ID 9999 NEO tạo ra 1 tập tin trên server
mà người khác chỉ có quyền truy cập (tương đương với việc chmod 600) Một máy client được gắn kết tới
ổ đĩa chứa tệp tin đó Trên máy client người dùng tên XONE cũng có ID 9999 Điều này có nghĩa r ng XONE có thể truy cập tới tệp tin của NEO – cái mà chỉ được quyền truy xuất bởi chính NEO Tệ hại hơn, nếu người nào đó trở thành superuser (siêu người dùng- Là một tài khoản người dùng đặc biệt trên UNIX
có quyền truy cập tới Root) trên máy client thì họ có thể dùng lệnh su – username (để thay đổi tên tài
khoản) và trở thành bất kỳ ai Lúc này NFS không còn là sự lựa chọn sáng suốt
2 The Portmapper-quản lý các kết nối
The Portmapper (quản lý tiến trình) giữ 1 danh sách những dịch vụ đang chạy trên các cổng Danh sách này được sử dụng bởi 1 máy tính có kết nối để thấy được những cổng nào mà nó (máy tính) muốn truy cập tới các dịch vụ nào đấy
Portmapper không còn tệ như vài năm trước đây nhưng nó vẩn là 1 điểm đáng lo đối với nhiều người quản trị hệ thống portmapper giống như NIS và NFS, thật sự không nên có những kết nối ra bên ngoài 1
Trang 12mạng LAN Nếu bạn bắt buộc phải chia sẻ chúng ra bên ngoài – hãy cẩn thận và duy trùy thường
xuyên việc kiểm tra hệ thống
Không phải bản phân phối linux nào cũng được tạo ra giống nhau Một vài bản phân phối không kèm theo 1 portmapper đáng tin cậy Cách đơn giản để kiểm tra portmapper của bạn có đảm bảo hay không là
thực thi lệnh : strings /sbin/portmap | grep hosts Nó sẽ đọc file hosts.allow và hosts.deny.
Giả sử portmapper đặt tại /sbin/portmap bạn có thể kiểm tra nó với lệnh sau cùng kết quả trả về tương tự thế này:
# strings /sbin/portmap | grep hosts.
/etc/hosts.allow /etc/hosts.deny
Trước tiên, hãy chỉnh sửa /etc/hosts.deny Thêm dòng sau vào tập tin:
portmap: ALL
Điều này sẽ chặn truy cập đến mọi người Sau đó, trong lúc các truy cập bị chặn thì chạy lệnh rpcinfo –
p nh m kiểm tra xem portmap của bạn có thật sự đọc và tuân theo file này hay không Kết quả trả về có
thể không có gì, hoặc có thể là 1 thông báo lổi Hai file hosts.allow và hosts.deny có hiệu lực ngay lập tức sau khi bạn lưu lại chúng Không dịch vụ nào (daemon) cần được khởi động lại
Việc chặn mọi quản lý truy cập với tất cả mọi người có hơi mạnh tay, vì vậy chúng ta mở lại truy cập
b ng cách edit file /etc/hosts.allow Nhưng trước tiên ta phải tìm hiểu những gì chứa bên trong nó Về cơ
bản, nó liệt kê tất cả các máy tính được quyền truy cập portmap
Những máy cần truy cập các dịch vụ trên máy của bạn cần được chấp thuận để làm điều đấy Giả dụ máy bạn có địa chỉ 192.168.0.254, thuộc mạng con 192.168.0.0 và các máy trong mạng con có thể truy
cập đến nó (192.168.0.254) Để thực hiện điều trên thay vì portmap: ALL ta sẽ viết lại là portmap: 192.168.0.0/255.255.255.0 (Nếu bạn không chắc chắn về địa chỉ mạng/mặt nạ mạng, bạn có thể sử dụng lênh ifconfig hay netstat để xác minh lại).
3 Server security: nfsd and mountd
Trên máy chủ, chúng ta không hề muốn tin cậy vào bất cứ yêu cầu truy vấn nào được tạo ra như trường hợp người quản lý cao cấp trên máy trạm (với quyền root có thể toàn quyền truy cập trên client, điều này thì không được phép xảy ra trên một máy chủ) Chúng ta có thể ngăn chặn điều này b ng tùy chọn
root_squash trong /etc/exports /home slave1(rw,root_squash) (tùy chọn dùng để hạn chế quyền root)
Thiết lập này nên luôn được bật sẵn, chỉ khi có 1 lý do cực kỳ cấp bách thì chúng ta mới hủy thiết lập
trên, b ng tùy chọn no_root_squash.
Bây giờ nếu 1 user có UID 0 (tức ID của người quản trị cao cấp) thử truy cập (đọc, ghi, xóa) các tập tin
hệ thống, máy chủ sẽ thay thế b ng UID của tài khoản vô danh (nobody user) Điều này nghĩa là người quản trị cao cấp (root user) trên máy trạm không thể truy cập hay thay đổi các file đó, chỉ có người quản
Trang 13trị cao cấp trên server mới có được quyền đấy mà thôi Điều này rất tốt và có lẽ bạn nên dùng
root_squash trên tất cả các file hệ thống mà bạn cho truy cập đến.
Vẩn tồn tại câu hỏi r ng “ liệu người quản trị cao cấp trên máy trạm có thể dùng lệnh su để mạo danh
thành người dùng bất kỳ và cố gắng truy cập, thay đổi các file hệ thống trên máy chủ hay không ” Câu trả lời là có, và đó thật sự là những gì sẻ diển ra (trên 1 hệ thống chạy linux với NFS) Ở đây có 1 chú ý: tất cả các file quan trọng nên được sở hữu bởi người quản trị cao cấp vì tài khoản duy nhất mà người quản trị cao cấp trên máy trạm không thể giả mạo chính là tài khoản quản trị cao cấp của máy chủ
Các cổng TCP từ 1-1024 được dành riêng cho công việc của người quản trị cao cấp (đó là lí do mà đôi khi nó được gọi là “cổng an toàn”) Những người dùng khác không thể ghép nối tới các cổng này Bổ sung
thêm tùy chọn secure trong /etc/exports nghĩa là nó sẽ chỉ liệt kê các truy vấn đến từ các cổng 1-1024
trên máy khách, do đó mối nguy hiểm từ những người dùng không phải là quản trị cao cấp trên máy trạm không thể xuất hiện và mở ra 1 sự tương tác giả mạo trên 1 cổng không được bảo mật Tùy chọn này được thiết lập mặc định
4 Client security
a Tùy chọn gắn kết “nosuid” – the nosuid mount option
Vài khái niệm về SUID
Đôi khi bạn gặp lổi khi cố gắng thực thi 1 chương trình, nó báo rằng chương trình đó phải được khởi động bởi quyền SUID.
SUID viết tắt của set user ID có nghĩa là nếu SUID được thiết đặt cho 1 ứng dụng/file nào đấy, sau đó ID tài
khoản của bạn sẽ được thiết lập như là chủ nhân của ứng dụng/file đấy thay cho người dùng hiện tại, trong khi thực
thi chương trình đó điều này có nghĩa là trong trường hợp tối có một ứng dụng mà chủ sở hữu của nó là 'root' và
nó đã được thiết lập SUID, sau đó khi tôi chạy ứng dụng đó như người dùng bình thường, ứng dụng đó sẽ vẩn được
chạy như dưới quyền 'root' Từ khi SUID bit báo cho linux biết rằng user ID root được thiết lập cho ứng dụng này
và bất cứ khi nào ứng dụng đó được thực thi, nó phải được thự thi giống như khi được thực thi dưới quyền root (từ
lúc root sở hữu file này).
Trong trường hợp bạn đã thật sự hiểu vấn đề trên, bạn có thể đang lo lắng-nó có phải là 1 lổi bảo mật nghiêm trọng Nếu người dùng có khả năng chạy ứng dụng như quyền root, nó trở thành sự xâm phạm trắng trợn như là mối đe dọa tới an ninh hệ thống Trong thực tế SUID được dùng như là 1 cách để tăng độ an toàn cho hệ thống.
Chúng ta có thể cấm những chương trình SUID để làm biến mất hệ thống file NFS với tùy chọn nosuid Vài chương trình trên linux, như passwd được gọi là chương trình “suid”: chúng thiết lập ID của những người đang chạy chúng thành ID chủ nhân file đó Nếu 1 file cùng được quản lý bởi root và suid, chương trình sẽ thực thi với quyền root, vì thế chúng có thể thực hiện các công việc mà chỉ root mới có quyền
thực hiện (như là ghi chép trên file chứa mật khẩu)
Việc sử dụng tùy chọn nosuid là ý tưởng tốt, và bạn nên xem xét áp dụng nó trên tất cả các ổ đĩa NFS được gắn kết Điều này có nghĩa là người dùng có quyền root trên máy chủ không thể tạo 1 chương trình suid-root trên file hệ thống, đăng nhập máy trạm như người sử dụng bình hường và dùng chương trình suid-root đó để trở thành người quản trị cao cấp trên máy trạm Một người nào đấy cũng có thể chặn truy
Trang 14cập đối với các file trên hệ thống đã được gắn kết hoàn toàn với tùy chọn noexec Nhưng điều này nhiều khả năng không thực tế hơn việc nosuid vì r ng 1 file hệ thống ít nhất có khả năng ngăn chặn 1 vài kịch
bản hoặc chương trình cần được thực thi
b Tùy chọn gắn kết “broken_suid” – the broken_suid mount option
Một vài chương trình cũ ( ví dụ xterm ) thường tin vào việc root có thể thực thi ở mọi khu vực Điều
này sẽ bị phá vỡ ở các nhân linux mới trên các gắn kết NFS Các vấn đề bảo mật liên quan đó là những
chương trình thực hiện kiểu hoạt động này của suid có thể quen với việc thay đổi uid của bạn ở bên ngoài máy chủ nfs thực hiện việc ánh xạ uid Vì thế, mặc định broken_suid được vô hiệu hóa trong nhân linux Nếu bạn đang sử dụng 1 bản phân phối linux cũ, 1 vài loại chương trình suid cũ hoặc 1 vài bản unix cũ hơn, bạn có thể phải gắn kết từ máy trạm với tùy chọn broken_suid Tuy nhiên các bản unix và linux gần đây có xterm và những chương trình như thế chỉ giống như có khả năng thực thi bình thường, họ gọi những chương trình đó để thực hiện việc setuid.
Giải thích: setuid là một tiến trình có thể thiết lập quan hệ của người sử dụng có hiệu lực và super-user
(root) Có nghĩa là mặc dù bất kỳ người dùng nào cũng có thể chạy tiến trình, nhưng sau đó tiến trình có thể đòi hỏi những đặc quyền gốc (root) Một ví dụ về setuid là tiến trình wservice ArcStorm
5 NFS và tường lửa
Khi 1 dịch vụ chạy ngầm khởi động, nó yêu cầu 1 cổng còn trống từ bản đồ ánh xạ Portmapper đưa ra 1 cổng cho tiến trình và ghi lại dấu vết của cổng đó Khi các máy chủ hoặc những tiến trình khác cần giao tiếp với tiến trình ngầm, chúng yêu cầu số cổng từ portmapper để truy tìm tiến trình Vì thế các cổng sẽ không ngừng bị thả nổi, vì các cổng khác nhau có thể rảnh vào các thời điểm khác nhau và vì thế
portmapper sẽ phân bổ chúng (port) mỗi lần mỗi khác Đây là vấn đề đau đầu cho việc thiết lập tường lửa nếu như bạn chưa bao giờ biết được khu vực mà các tiến trình sẽ diễn ra, sau đó không biết chính xác những cổng nào để cho phép truy cập Đây không hẳn là một vấn đề lớn đối với nhiều người đang chạy trên mạng LAN được bảo vệ hoặc bị cô lập Với người dùng trên mạng công cộng thì điều này thật khủng khiếp
Trong phiên bản nhân 2.4.13 và sau này bạn không còn phải lo lắng về việc thả nổi của các cổng Bây giờ tất cả các tiến trình ngầm liên quan đến NFS có thể được “đính” với 1 cổng Hầu hết chúng dể dàng
thực hiện k m tùy chọn –p khi được khởi động Các tiến trình ngầm đó được khởi động với 1 vài đối số
hoặc tùy chọn, chúng được mô tả sau đây:
Portmap luôn sử dụng cổng 111 trên giao thức tcp và udp Nfsd trên cổng 2049(tcp/udp).
Một số tiến trình khác: statd, mountd, lockd, rquotad thường sẽ được chuyển tới cổng khả dụng
đầu tiên do portmapper chỉ định
Để những tác động của statd kết hợp với 1 cổng cụ thể, sử dụng tùy chọn –p số cổng Để những tác động của statd đáp ứng trên 1 cổng cụ thể, thêm vào tùy chọn –o số cổng khi khởi động nó.
Để những tác động của mountd kết hợp với cổng cụ thể, sử dụng thuộc tính –p số cổng
Trang 15Ví dụ: để statd phát đi trên cổng 32765, nghe trên cổng 32766, và mountd nghe trên cổng 32767, ta gõ
Nếu bạn đang dùng modul có thể nạp tải và muốn chỉ rõ những tùy chọn này trong file
/etc/modules.conf thì hãy thêm dòng sau:
options lockd nlm_udpport=32768 nlm_tcpport=32768
Dòng trên sẽ xác định giao thức tcp và udp trên cổng 32768 cho lockd.
Nếu bạn không sử dụng modul nạp tải hoặc nếu bạn đã biên dịch lockd vào trong nhân thay vì xây dựng
nó như 1 modul, bạn sẽ cần vượt qua điều này b ng tùy chọn trong sự khởi động của nhân
Nó trông tự như thế này :
vmlinuz 3 root=/dev/hda1 lockd.udpport=32768 lockd.tcpport=32768
Nếu bạn đang sử dụng hạn ngạch (quota) và dùng nrc.quotad để khiến nó có khả năng xem được trên nfs, bạn sẽ cần phải đưa nó vào tài khoản khi thiết lập tường lửa Có 2 nơi chứa mã nguồn của
rpc.rquotad, một ở nơi chứa nfs-utils, còn lại ở nơi chứa quota-tools Chúng không hoạt động đồng nhất với nhau: Một cái được cung cấp với sự hỗ trợ bởi nfs-utils nối tiến trình ngầm tới 1 cổng với lệnh dẫn hướng –p, nhưng phần n m trong quota-tools thì không như thế.
Ta cùng lấy 1 ví dụ về việc thiết lập tường lửa trên máy chủ:
NFS server 192.168.0.42
Client 192.168.0.45
Trong ví dụ ở phần trên ta có:
statd nhận các truy vấn ở cổng 32765, hồi đáp trên cổng 32766
mountd buộc phải gắn với cổng 32767
Các thông số của lockd được thiết lập để gắn cho cổng 32768
Trang 16ipchains -A input -f -j ACCEPT -s 192.168.0.45
ipchains -A input -s 192.168.0.45 -d 0/0 32765:32768 -p 6 -j ACCEPT
ipchains -A input -s 192.168.0.45 -d 0/0 32765:32768 -p 17 -j ACCEPT
ipchains -A input -s 192.168.0.45 -d 0/0 2049 -p 17 -j ACCEPT
ipchains -A input -s 192.168.0.45 -d 0/0 2049 -p 6 -j ACCEPT
Dòng đầu tiên cho biết sự chấp nhận tất cả các phần rời rạc của gói tin (ngoại trừ mảnh tin đầu tiên sẽ được sử lý như gói tin bình thường) Trên lý thuyết không có gói tin nào đi qua cho đến khi nó được ghép lại Dĩ nhiên có những cuộc tấn công được gây ra bởi việc gây quá tải 1 máy tính với các mảnh gói tin Nhưng NFS sẽ không hoạt động chính xác cho đến khi bạn để các mảnh tin đi qua
Các dòng khác cho biết việc chấp nhận các kết nối cụ thể từ bất kỳ cổng nào trên máy trạm đến các cổng cụ thể mà chúng tôi đã làm cho nó sẵn sàng sử dụng được trên máy chủ Có nghĩa là nếu có 1 máy trạm
192.158.0.46 cố gắng liên lạc với máy chủ NFS thì nó sẽ không thể gắn kết…
Với những cổng có khả năng gắn kết, hiển nhiên là rất dể dàng để điều khiển những gì các máy chủđược cho phép để gắn kết các chia sẻ NFS của bạn Điều đang nói đó là NFS không phải là 1 giao thức mã hóa và bất cứ ai trên cùng mạng vật lý có thể phát hiện sự lưu thông (các gói tin) và tái hiện lại các thông tin đang được chuyển qua lại
6 Truyền đa giao thức NFS thông qua SSH
cơ bản về SSH:
SSH (Secure Shell) là một giao thức mạng dùng để thiết lập kết nối mạng một cách bảo mật SSH hoạt động ở lớp trên trong mô hình phân lớp TCP/IP Các công cụ SSH (như là OpenSSH, ) cung cấp cho người dùng cách thức
để thiết lập kết nối mạng được mã hoá để tạo một kênh kết nối riêng tư.
SSH là một chương trình tương tác giữa máy chủ và máy khách có sử dụng cơ chế mã hoá đủ mạnh nhằm ngăn chặn các hiện tượng nghe trộm, đánh cắp thông tin trên đường truyền Các chương trình trước đây: telnet, rlogin không sử dụng phương pháp mã hoá Vì thế bất cứ ai cũng có thể nghe trộm thậm chí đọc được toàn bộ nội dung của phiên làm việc bằng cách sử dụng một số công cụ đơn giản Sử dụng SSH là biện pháp hữu hiệu bảo mật dữ liệu trên đường truyền từ hệ thống này đến hệ thống khác.
SSH làm việc thông qua 3 bước đơn giản:
Định danh host - xác định định danh của hệ thống tham gia phiên làm việc SSH.
Mã hoá - thiết lập kênh làm việc mã hoá.
Chứng thực - xác thực người sử dụng có quyền đăng nhập hệ thống.
Một phương án để mã hóa luồng lưu thông dữ liệu trong NFS trên mạng là sử dụng khả năng chuyển
tiếp cổng của SSH Tuy nhiên làm như vậy có 1 hạn chế nghiêm trọng nếu bạn không hoàn toàn tin tưởng
vào người dùng cục bộ trên máy chủ