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 sử dụng hệ thống mô hình clientserver. 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
Trang 1MỤC LỤC
CHƯƠNG 1: NFS – Network File System 2
1.1 Giới thiệu sơ lược về NFS 2
1.2 Cài đặt và cấu hình NFS Server 2
1.2.1 File cấu hình, câu lệnh cơ bản 2
1.2.2 Khởi động các dịch vụ có liên quan 3
1.2.3 Cập nhật thay đổi cho /etc/exports 4
1.3 Minh họa việc cấu hình NFS 5
1.3.1 Thiết lập trên server: 5
1.3.2 Thiết lập trên client 6
1.4 Bảo mật 7
1.4.1 Tổng quan 7
1.4.2 The Portmapper-quản lý các kết nối 8
1.4.3 Server security: nfsd and mountd 9
1.4.4 NFS và tường lửa 10
CHƯƠNG 2: NIS – Network Information Service 11
2.1 Giới thiệu sơ lược về NIS 11
2.2 Cài đặt và cấu hình NIS 13
2.2.1 Cài đặt và cấu hình NIS Server 13
2.2.2 Cài đặt và cấu hình NIS Client 17
2.3 Bảo mật 19
Trang 2BẢNG PHÂN CÔNG NHIỆM VỤ
Trần Nghĩa Hưng Tìm hiểu chung NIS, NFSLàm báo cáoTrịnh Thị Gái Cấu hình và cài đặt NFS serverLàm demoNguyễn Thế Hùng Cấu hình và cài đặt NIS serverLàm demo
Lê Hoàng Long
(nhóm trưởng)
Cấu hình và cài đặt NFS server,Cấu hình và cài đặt NIS server
Làm slide
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ềungành khoa học cũng như phục vụ cuộc sống thường ngày, từ ứng dụng trongcá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ốnggiá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 quantrọ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ề mộtmả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ềubản phân phối ( trên 30 bản phân phối tính đến tháng 4/2011 ), chính vì thế trongquá 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àiliệ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ậptrê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ềuthiế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
Cấu trúc báo cáo bao gồm 2 chương:
- NFS – Network File System
- NIS – Network Information Service
Trang 4CHƯƠNG 1: NFS – NETWORK FILE SYSTEM
1.1 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 đĩatrên 1 máy từ xa giống như nó là đĩa cục bộ (local disk) vậy nó cho phép việctruyề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 mongmuốn truy cập ổ cứng của bạn qua mạng (theo cách đó họ có thể đọc email, xóafile 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 sử 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 filesystem được chia sẻ trên Server chỉ đơn giản dùng giao thức NFS để mount (gắnkế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áychủ 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 3NFS nếu như cài đặt trên mộthệ 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 nhiên, nhỏ lẻ
NFS (Network File System) hệ thống được phát triển để gán các phânvùng đĩa ở trên các máy từ xa như thể trên máy local Cho phép chia sẻ filenhanh và tập trung trên mạng
1.2 Cài đặt và cấu hình NFS Server
1.2.1 File cấu hình, câu lệnh cơ bản
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 tincấu hình cho NFS, và sau đó khởi động các dịch vụ NFS
Nội dung file cấu hình: /etc/exports
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) …
Trang 5Trong đó: dir : thư mục hoặc file system muốn chia sẻ host: một hoặcnhiều host được cho phép mount dir có thể được định nghĩa là một tên, mộtnhó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ácfile 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ênmáy chủ (truy vấn được ánh xạ phụ thuộc vào UID của user nobody trên serverchứ không phải trên client) Nếu no_root_squash được chọn, người quản trị caocấ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 ninhnghiê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ệcquả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ạnkhô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ươngtrì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
- sync: 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ácfile 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ếuserver khởi động lại
Ví dụ về 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 subnet192.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 mountthư mục /var/tmp với quyền đọc và ghi
1.2.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:
Trang 6- Portmap: Quản lý các kết nối, sử dụng cơ chế RPC (Remote ProcedureCall), 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ụ chochia sẻ file, dịch vụ chỉ chạy trên server
- NFS lock: Sử dụng cho client khóa các file trên NFS server thông quaPRC
1.2.2.1 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ặcrpc.portmap), chúng cần phải được khởi động trước Nó nên được đặt tại /sbinnhư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 khiserver khởi động) nhưng vẩn phải đảm bảo nó được khởi động đầu tiên trước khibạn làm việc với NFS (chỉ cần gõ lệnh netstat -anp |grep portmap để kiểm tra)
1.2.2.2 Cá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ênserver đượ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 quantâm lắm tới việc khởi động nó
- statd thì cần phải được khởi động riêng
1.2.2.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
1.2.3 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ệulự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 dungfile /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ệnhHUD
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ườnglửa nào mà bạn đã thiết lập
Trang 71.3 Minh họa việc cấu hình NFS
Mô hình 2 máy để thực hiện việc cấu hình
1.3.1 Thiết lập trên server:
- Thiết lập địa chỉ IP tĩnh cho máy chủ là 192.168.0.3 bằng câu lệnh:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0Thiết lập thông số như sau:
- Sau đó cập nhật lại IP:
[root@localhost ~]# ifdown eth0[root@localhost ~]# ifup eth0
- Tắt tường lửa:
- Tắt Selinux
[root@localhost ~]# vi /etc/selinux/config
- Tạo thư mục chia sẻ trên máy chủ tên “long”: mkdir long (/root/long)
- Cấp quyền truy cập tới thư mục: chmod 777 –R /root/long
- Chỉ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
Trang 8- 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
1.3.2 Thiết lập trên client
- Thực hiện đặt IP cho client cùng dải mạng với server, tắt tường lửa vàSelinux như hướng dẫn ở phần trên Kết quả là 2 máy thông nhau:
- Tạo 1 thư mục trên client (sim) để mount tới thư mục trên server
- Mount 2 thư mục với nhau:
Trang 9- Kiểm tra: tạo thêm file hung.txt trong thư mục chia sẻ /root/long tạiserver thì thư mục /root/sim tại client cũng xuất hiện file hung.txt
- Cấu hình truy cập trong file /etc/fstab:
- Sửa file /etc/fstab như sau:
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ậpfile 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ớihạ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
Trang 10đó Trên máy client người dùng tên XONE cũng có ID 9999 Điều này có nghĩarằng XONE có thể truy cập tới tệp tin của NEO – cái mà chỉ được quyền truyxuất bởi chính NEO Tệ hại hơn, nếu người nào đó trở thành superuser (siêungườ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ángsuốt
1.4.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ụ đangchạ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 mạng LAN Nếu bạnbắ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ườngxuyê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ộtvà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ệnhsau 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ứcsau 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ácmáy tính được quyền truy cập portmap
Trang 11Nhữ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 con192.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)
1.4.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ềnroot có thể toàn quyền truy cập trên client, điều này thì không được phép xảy ratrê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ý docự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
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ácfile 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ảnquả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ị caocấ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
1.4.4 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 đó Khicá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úngyêu cầu số cổng từ portmapper để truy tìm tiến trình Vì thế các cổng sẽ không