UNIX/LINUX: Samba – Phần 2

Thứ Sáu, 1 tháng 11, 2013
Posted by Admin
Tag :

Việc thay đổi tên NetBIOS của server không được khuyến khích nếu không có lý do chính đáng, nếu như tên đó không phải là duy nhất vì mạng LAN được chia ra thành hai hay nhiều vùng DNS.
4. Các phần đặc biệt của file cấu hình Samba:
Phần [global]: Phần [global] xuất hiện hầu như trong mọi file cấu hình Samba, thậm chí khi trong đó không có dòng lệnh bắt buộc nào. Mọi tuỳ chọn được thiết lập trong phần này đều được áp dụng đối với tất cả các tài nguyên chia sẻ khác, vì nội dung của phần này sẽ được sao chép vào các phần khác. Nhưng các phần khác, nếu cũng có các tuỳ chọn giống như trong phần [global], thì trong các phần đó, các tuỳ chọn sẽ được xác định với các giá trị mới được ghi đè lên các lên các giá trị cũ của [global]. Ta có thể cấu hình server Samba, đầu tiên ta phải chú ý đến ba tuỳ chọn cấu hình cơ bản xuất hiện trong phần global của file cấu hình smb.conf:
Tuỳ chọn netbios name: cho phép đặt tên NetBIOS cho server.
Ví dụ: netbios name = DHQGHN
Giá trị mặc định cho tuỳ chọn này là tên máy của server (phần bên trái cùng của tên DNS đầy đủ). Ví dụ, tên NetBIOS mặc định của máy hut.edu.vn sẽ là HUT. Thông thường, người ta đặt tên NetBIOS khác với tên DNS hiện thời.
Việc thay đổi tên NetBIOS của server không được khuyến khích nếu không có lý do chính đáng, nếu như tên đó không phải là duy nhất vì mạng LAN được chia ra thành hai hay nhiều vùng DNS. Ví dụ, khi mạng hut.edu.vn bị chia thành hai vùng với các server là hut.lythuyet.edu.vn và hut.thuchanh.edu.vn thì tên NetBIOS cũ là HUT bây giờ có thể thành các tên HUTLYTHUYET và HUTTHUCHANH.
Tùy chọn server string: Thông số của server string xác định nội dung dòng chú thích sẽ xuất hiện cạnh tên của server Samba trong cả cửa sổ Network Neighborhood (khi ở chế độ Details) lẫn cửa sổ quản lý in của Microsoft Windows. Bạn có thể dùng các biến chuẩn để cung cấp thông tin cho dòng mô tả đó, ví dụ trên ta đã sử dụng hai biến là %v và %L.
Tùy chọn workgroup: Thông số của tuỳ chọn workgroup thiết lập nhóm làm biệc hiện thời, nơi mà server Samba tự thông báo cho các thành biên của mạng về mình. Các clients muốn truy cập được tài nguyên được chia sẻ trên server Samba phải cùng thuộc về một nhóm làm việc NetBIOS. Nên nhớ rằng các nhóm làm việc phải có các tên nhóm NetBIOS thực thụ, tuân theo quy tắc đặt tên NetBIOS.
Cấu hình chia sẻ đĩa cứng
Trong ví dụ ở phần trước ta đã nhắc đến rằng do chưa có tài nguyên được chia sẻ nên cửa sổ chi tiết của server hydra đang còn trống. Bây giờ ta tiếp tục làm việc cới file cấu hình Samba và tạo ra một đĩa cứng được chia sẻ còn rỗng có tên là [data]. Đây là các động tác cần thêm vào để đạt được kết quả vừa nêu:
Tài nguyên được chia sẻ ửSampleDataDriveứ thường là đĩa cứng được Samba chia sẻ và ánh xạ tới thư mục /export/samba/data trên server Samba. Ta đã cho thêm một dòng vào để có chú thích mô tả tài nguyên được chia sẻ đó là Data Drive, cũng như gán cho bản thân tài nguyên đó một cái tên SampleDataDrive.
Tài nguyên được chia sẻ được thiết lập có quyền ghi cho các người dùng. Giá trị mặc định của tuỳ chọn này là chỉ đọc. Trong phương án không cần nức độ bảo mật chặt chẽ như ở đây, ta đặt giá trị yes cho tuỳ chọn guest ok, để cho bất kỳ ai cũng có thể kết nối được tới tài nguyên vừa được chia sẻ. Trên máy UNIX có cài đặt Samba ta tạo thư mục /export/samba/data với quyền root bằng các lệnh sau:
Bây giờ, nếu ta lại kết nối với server hydra (bằng cách kích phím chuột vào biểu tượng của server trong cửa sổ Network Neighborhood của Windows), một thư mục được chia sẻ với tên data đã xuất hiện.

Các tuỳ chọn cơ bản chia sẻ đĩa cứng.
Các tuỳ chọn về mạng của Samba

Các tuỳ chọn cấu hình mạng.
Tùy chọn hosts allow: Tuỳ chọn này xác định các máy có quyền truy cập các tài nguyên được chia sẻ trên servers Samba, được viết như danh sách các máy hay địa chỉ IP của chúng, cách nhau bằng dấu phảy hoặc khoảng trống. Ta có thể đặt được một chút ít mức độ bảo mật, chỉ đơn giản bằng cách đặt địa chỉ mạng con LAN của mình vào chỗ giá trị của tuỳ chọn này.
Ví dụ:
Chú ý rằng ta đặt localhost (hoặc địa chỉ 127.0.0.1) ở vị trí sau địa chỉ của mạng con. Một trong số các lỗi thường thấy khi dùng tuỳ chọn hosts allow là cấm luôn servers Samba liên hệ với chính nó. Chương trình smbpasswd sẽ cần được kết nối với servers Samba như là một client để thay đổi mật khẩu mã hóa của người dùng. Thêm nữa, việc duyệt tại chỗ cũng đòi hỏi có được đăng nhập tại chỗ.
Sau đây là các quy tắc của Samba quy định cho việc dùng các tuỳ chọn hosts allow và hosts deny:
- Nếu không có tuỳ chọn allow hoặc deny nào được xác định trong file cấu hình smb.conf Samba sẽ cho phép các kết nối từ bất kỳ máy nào mà hệ thống Unix chấp nhận.
- Nếu có các tuỳ chọn allow hoăc deny được xác trong phần global của file cấu hình smb.conf, chúng sẽ được áp dụng cho tất cả các tài nguyên được chia sẻ, thậm chí khi một tài nguyên nào đó có tuỳ chọn ghi đè lên được xác định.
- Nếu chỉ có tuỳ chọn allow được xác định cho một tài nguyên được chia sẻ, chỉ có các máy được liệt kê mới có quyền truy cập tài nguyên đó. Các máy khác đều bị cấm.
- Nếu chỉ có tuỳ chọn deny được xác định cho một tài nguyên được chia sẻ, mọi máy không có trong danh sách đều có quyền sử dụng tài nguyên đó.
- Nếu cả hai tuỳ chọn allow và deny được xác định, một máy đã xuất hiện trong danh sách được phép thì không có mặt trong danh sách bị cấm. Nếu không máy đó sẽ bị cấm truy cập vào tài nguyên được chia sẻ.
Chý ý: Cẩn thận tránh trờng hợp ta cho phép một máy nào đó, nhưng sau đấy lại cấm cả mạng con mà máy ấy tham gia.
hosts deny: Tuỳ chọn hosts deny xác định các máy không có quyền truy nhập tài nguyên được chia sẻ, được viết như danh sách các tên máy hoặc địa chỉ IP của chúng, cách nhau bằng dấu phẩy hay khoảng trống với cú pháp giống như đới với tuỳ chọn hosts allow ở trên. Ví dụ, để hạn chế truy cập tới servers từ một máy, trừ từ vùng example.com, ta có thể viết:
Giống như hosts allow, không có giá trị mặc định cho tuỳ chọn hosts deny. Nếu muốn cho phép hay cấm truy cập tới tài nguyên được chia sẻ cụ thể ta phải qua cả hai tuỳ chọn hosts allow và hosts deny trong phần ửglobalứ hay nếu có dụng thì phải ghi đè giá trị mới trong phần cấu hình cho tài nguyên được chia sẻ đó.
interfaces: Tuỳ chọn interfaces liệt kê các địa chỉ mạng mà ta muốn servers Samba nhận biết và đáp ứng. Tuỳ chọn này rất tiện lợi nếu ta muốn máy tính tham gia đồng thời nhiều mạng con. Nếu không được dùng Samba tìm giao diện mạng chính của servers (thường là card Ethernet đầu tiên) khi khởi động và tự cấu hình để hoạt động chỉ trong mạng con có giao diện mạng đó. Ta phải dùng tuỳ chọn này để bắt buộc Samba phải thực hiện mạng con khác nữa trong mạng của ta.
Giá trị của tuỳ chọn là một hay nhiều bộ gồm các đôi địa chỉ IP/ mặt nạ mạng, giống như trong ví dụ sau:
Có thể dùng định dạng mặt nạ bít CIDR như sau:
Số của mặt nạ bít chỉ số đầu tiên được bật trong mặt nạ mạng, ví dụ số 24 nghĩa là 24 bít đầu tiên (trong số tất cả 32 bit) sẽ được kích hoạt, hay đông nghĩa với giá trị mặt nạ mạng 255.255.255.0. Tương tự như vậy, số 16 tương đương với mặt nạ 255.255.0.0, và 8-với 255.0.0.0. Tuy nhiên, tuỳ chọn này có thể hoạt động không đúng nếu ta dùng DHCP (phân phối địa chỉ IP động).
Bind interfaces only: Tuỳ chọn này có thể được dùng để bắt buộc các tiến trình smbd và nmbd phục vụ các yêu cầu SMB chỉ cho các địa chỉ được xác định bởi tuỳ chọn interfaces mà thôi. Tiến trình nmbd bình thường liên kết giao diện (0.0.0.0.) trên các cổng 137 và 138 tới tất cả các địa chỉ, cho phép chúng nhận các thông báo phân phối công cộng từ khắp mọi nơi. Tuy nhiên, nếu ta ghi đè lên giá trị đó bằng:
Thì chỉ các gói đi từ các địa chỉ nguồn xác thông qua tuỳ chọn interfaces mới được chấp nhận. Với smbd, tuỳ chọn này cũng bắt Samba không phục vụ các yêu cầu về file của các mạng con ngoài danh sách của tuỳ chọn interfaces. Nếu muốn cho phép có các nối kết mạng tạm thời, như dụng SLIP hoặc ppp, ta không được dụng tuỳ chọn này. Nói chung, tuỳ chọn này ít được dùng, và thường chỉ có nhng người quản trị đầy kinh nghiệm mới để ý tới nó.
Nếu đặt giá trị cho bind intefaces only là yes, ta phải thêm địa chỉ của máy tại chỗ (127.0.0.1) vào danh sách của interfaces, nếu không smbpasswd sẽ không thể hoạt động được.
socket address: Tuỳ chọn socket address quy định địa chỉ nào trong số được xác định bởi interfaces sẽ "ghe" tức là chờ các kết nối. Samba theo mặc định chấp nhận tất cả các nối kết với tất cả các địa chỉ. Khi được dùng trong file smb.conf, tuỳ chọn này hạn chế số địa chỉ mà Samba sẽ dùng để chờ các nối kết.
Ví dụ:
Bình thường, tuỳ chọn này không được khuyên dùng.
Nếu như có dùng các mật khẩu đã mã hoá, ta phải thêm vào một dòng có nội dung encrypt passwords=yes vào file cấu hình trên.
Sau khi đã soạn thảo nội dung như trên của file smb.conf và đặt nó vào đúng vị trí cần thiết, ta khởi động lại server Samba và dùng các máy client Windows để kiểm tra kết quả.
Tất nhiên các máy client Windows đó cũng phải thuộc về nhóm SIMPLE - trong ví dụ ta vẫn dùng từ đầu chơng - đó là các máy phoenix và chimaera.
Mọi tuỳ chọn xuất hiện trớc phần được đánh dấu bằng ngoặc vuông "[]"ầu tiên, tức là bên ngoài phần [lobal] cũng được coi là những tuỳ chọn chung.
Phần [mes] Nếu một client nào đó cố gắng kết nối tới tài nguyên được chia sẻ không được nêu trong file cấu hình smb.conf, Samba sẽ tìm tài nguyên được chia sẻ [homes] trong file cấu hình. Nếu phần này tồn tại, tên của tài nguyên được chia sẻ không xác định kia sẽ được coi như tên người dùng của Linux và được yêu cầu tìm trong cơ sở dữ liệu mật khẩu của server Samba. Nếu như có tên ngưười dùng đó, Samba coi máy được nói tới ở trên là một ngưười dùng Linux đang cố kết nối tới th mục home của mình trong server.
Ví dụ, giả sử một máy client kết nối với server Samba hydra lần đầu tiên, và cố truy cập tới tài nguyên được chia sẻ có tên là [dung]. Trong file smb.conf, không có tài nguyên được chia sẻ nào tên là [dung] được xác định, nhng lại có phần [homes], vì thế Samba tìm file cơ sở dữ liệu mật khẩu và tìm xem có tài khoản ngưười dùng dung trong hệ thống hay không, Sau đó Samba kiểm tra mầy khẩu được client cung cấp và so sánh với mật khẩu của ngưười dùng Linux dung - hoặc trong file cơ sở dữ liệu mật khẩu nếu dùng mật khẩu mã hoá. Nếu các mật khẩu đó trùng nhau, Samba nhận biết chắc là ngưười dùng dung có quyền và đang muốn kết nối tới th mục home của mình trong máy Linux. Sau đó Samba sẽ tự tạo tài nguyên được chia sẻ được gọi là ửdungứ cho người dùng dung.
Người ta cũng áp dụng phơng pháp được thực hiện với phần [homes] để tạo tài khoản người dùng mới, kèm theo mật khẩu.
Phần [printers]: Phần đặc biệt thứ ba gọi là [printers]tương tự như phần [homes]. Nếu một client cố kết nối tới tài nguyên được chia sẻ không có mặt trong file cấu hình smb.conf file, và nếu tên của nó không thể tìm được trong file mật khẩu, Samba sẽ kiểm tra xem nó có phải sự chia sẻ máy in cho client đó. Samba thực hiện điều đó thông qua việc đọc file dữ liệu máy in (thường là /etc/printcap hay /etc/terminfo) để xem có tên của tài nguyên được chia sẻ đó hay không. Nếu có, Samba tạo ra tài nguyên được chia sẻ với tên liên quan tới việc chia sẻ máy in. Để có thể in được trong Samba ta phải thêm các tuỳ chọn printer driver, printer driver file, và printer driver location vào file cấu hình smb.conf của Samba. Tuỳ chọn chung printer driver file chỉ đến file printers.def phải được đặt vào phần [global]. Các tuỳ chọn còn lại được đặt vào phần tài nguyên máy in được chia sẻ mà ta muốn cấu hình một cách tự động các trình điều khiển máy in. Giá tri cho printer driver phải trùng với xâu được hiện ra trong Printer Winzard trên hệ thống Windows. Giá trị của printer driver location là đường dẫn của tài nguyên PRINTER$ mà ta thiết lập, chứ không phải là đờng dẫn UNIX trên server. Do đó, ta có thể dùng các dòng mã sau đây trong file cấu hình Samba:
Giống như đối với phần [home], ta không cần phải bảo trì tài nguyên được chia sẻ cho mỗi một may in của hệ thống trong file cấu hình smb.conf. Thực vậy, Samba luôn dựa vào việc đăng ký máy in của Linux nếu ta cần đến, và cung cấp các máy in đã đăng ký cho các client. Tuy nhiên, có một hạn chế nhỏ: nếu tài khoản ngưười dùng và máy in đều có tên là hai, Samba bao giờ cũng tìm tài khoản ngưười dùng trớc tiên, bất kể là client thực ra là cần kết nối với máy in.
Các chi tiết vè việc thiết lập tài nguyên được chia sẻ [printers] được trình bày trong phần liên quan tới việc in và phân giải tên.
Các tuỳ chọn cấu hình: Các tuỳ chọn trong file cấu hình Samba được chia sẻ làm hai loại: global (toàn cục) và share (chia sẻ). Mỗi một loại quy định một tuỳ chọn sẽ được xuất hiện ở đâu trong file cấu hình.
Global (toàn cục): Các tuỳ chọn global phải có mặt chỉ trong phần [global]mà thôi. Đây là các tuỳ chọn thường chỉ ps dụng để xác định hoạt động của chính server Samba.
Share: Các tuỳ chọn share có thể xuất hiện trong các tài nguyên được chia sẻ cụ thể, hoặc cả trong phần [global]. Nếu có mặt trong phần [global], chúng sẽ xác định các giá trị mặc định cho tất cả các tài nguyên được chia sẻ, chừng nào cha bị các tuỳ chọn cùng tên tại các phần tài nguyên được chia sẻ cụ thể ghi đè những giá trị mới.
Hết phần 2
Nếu các dịch vụ chia sẻ file giữa các máy Windows với nhau và giữa các máy Linux với nhau đã được giải quyết thì còn lại là vấn đề chia sẻ file giữa các máy Linux và Windows lại là một nhu cầu quan trọng. Samba hiện đã trở thành cây cầu nối giữa Linux và Windows.
1. Cài đặt Samba:
Samba cho phép các máy tính chạy Linux có thể hoạt động và giao tiếp trên cùng một giao thức mạng với máy Windows. Samba server thực hiện các dịch vụ sau:
• Chia sẻ một hay nhiều hệ thống file.
• Chia sẻ các máy in đã được cài đặt ở cả hai phía server và client của nó.
• Hỗ trợ các client duyệt Network Neighborhood trong các máy windows.
• Kiểm tra xác nhận các client đăng nhập vào vùng của Windows.
• Cung cấp hoặc hỗ trợ việc phân giải địa chỉ của server bằng WINS (Windows Internet Name Server).
Để dễ hình dung hơn, ta lấy ví dụ mạng đơn giản có dùng Samba. Giả sử ta có một cấu hình mạng cơ bản sau: một máy chủ Linux có sử dụng Samba với tên được đặt là Toltec, và hai client trên MS Windows, với tên là Maya và Aztec, được nối với nhau trong một mạng Lan và tham gia vào nhóm làm việc có tên METRAN. Ta còn giả sử máy chủ Toltec còn có một máy in phun tên là lp được nối tại chỗ, đồng thời việc chia sẻ đĩa cứng cho phép các máy "nhìn" thấy nhau. Mô tả mạng trên bằng hình vẽ D.1 được biểu diễn dưới đây:

Hình D.1 Một mạng có nhiều hệ điều hành.
Các vai trò của Samba đối với mạng Windows NT (phiên bản Samba 2.0.4b.)

2. Các thành phần của Samba:
Samba thực chất chứa một số chương trình phục vụ cho những mục đích khác nhau nhưng có liên quan với nhau. Hạt nhân của Samba là hai deamon có những nhiệm vụ sau:
smbd Daemon: smbd chịu trách nhiệm điều khiển các tài nguyên được chia sẻ giữa máy chủ Samba và các máy trạm của nó. Nó cung cấp các dịch vụ về file, in, và trình duyệt cho các máy trạm SMB thông qua một hay nhiều mạng. smdb xử lý tất cả các trao đổi giữa máy chủ Samba và các client mạng của nó. Ngoài ra, deamon này còn chịu trách nhiệm kiểm tra xác nhận người dùng, khoá tài nguyên, và chia sẻ dữ liệu thông qua giao thức SMB.
nmbd Deamon: nmbd là một máy chủ dịch vụ tên đơn giản bắt chước các chức năng máy chủ dịch vụ tên, chạy với các giao thức WINS và NetBIOS. Daemon này ỏlắng ngheÕ các yêu cầu của máy chủ dịch vụ tên và cung cấp các thông tin thích hợp khi được gọi tới. Nó còn cung cấp danh sách duyệt Network Neighborhood và tham gia vào lựa chọn các đối tượng mạng trong đó.
Bộ cài đặt Samba còn có một tập hợp nhỏ các công cụ dòng lệnh Linux:
smbclient: Một client Linux theo kiêu ftp có thể dùng tiện ích này để kết nối với tài nguyên được Samba chia sẻ.
Smbtar: Chương trình để lưu trữ các tài nguyên được chia sẻ, tương tự như lệnh tar của Linux.
nmblookup: Chương trình cung cấp NetBIOS thông qua việc tìm tên bằng TCP/IP.
smbpasswd: Chương trình cho phép ngưười quản trị thay đổi mật khẩu đã mã hóa của Samba.
testparm: Chương trình đơn giản để làm cho file cấu hình Samba có hiệu lực.
testprns: Chương trình kiểm tra liệu các máy in khác nhau có được deamon smbd nhận ra hay không.
Nếu muốn xem từng deamon thực hiện những gì, Samba có chương trình với tên smbstatus sẽ đa tất cả các thông tin đó lên màn hình như sau:
Việc cài đặt samba cũng khá đơn giản, ta cần chuẩn bị các package sau:
Trong đó xxx là số hiệu phiên bản của samba. Đăng nhập với quyền root và sau đó ra lệnh:
Nếu ta không nhận lời thông báo lỗi nào cả thì quá trình cài đặt đã hoàn tất.
3. File cấu hình Samba:
Những tên được bao trong các ngoặc vuông dùng để ký hiệu cho các phần của file cấu hình smb.conf, mô tả các chia sẻ hay dịch vụ mà Samba cung cấp. Ví dụ, các phần "test" và "homes" là các chia sẻ riêng rẽ đối với đĩa cứng; chúng chứa các tuỳ chọn được ánh xạ tới các thư mục cụ thể trên server Samba. Phần chia sẻ "printers" chứa các tuỳ chọn ánh xạ tới các máy in khác nhau của servers. Tất cả các phần được xác định trong file smb.conf, trừ phần [global, sẽ được coi như các chia sẻ đĩa cứng hoặc máy in cho những dùng kết nối với server Samba.
Các dòng vào còn lại là các tuỳ chọn riêng được quy định cụ thể cho sự chia sẻ đã được đề cập tới. Các tuỳ chọn đó có tác dụng cho tới khi bắt đầu một phần mới được ký hiệu trong cặp ngoặc vuông, hoặc cho tới điểm cuối của file smb.conf được thiết lập bằng cách gán giá trị cho chúng. Mỗi một tuỳ chọn cấu hình đều có cú pháp đơn giản:
Cuối cùng, ta có thể dùng khoảng trống dể ngăn cách chuỗi các giá trị trong danh sách, hoặc có thể dùng các dấu phảy, Hai cách trên là tơng đơng nhau nhng ta chỉ nên dùng một cách hoặc dấu phảy hoặc khoảng trống.
Chữ viết hoa không có ý nghĩa gì đối với file cấu hính Samba, ngoại trừ trong các vị trí mà hệ điều hành được chỉ tới không cho phép viết, bởi vì hệ điều hành Linux phân biệt chữ viết thường và viết hoa.
Trong trường hợp dòng vào quá dài không thể gói gọn trong không gian mà cửa sổ dòng lệnh cho phép, ta có thể viết tiếp dòng trong file cấu hình Samba bằng cách dùng ký hiệu dấu gạch ngược "\", ví dụ:
Có thể thay đổi file smb.conf và bất kỳ tuỳ chọn nào của nó vào thời điểm bất kỳ trong khi các daemon Samba đang chạy. Theo mặc định, Samba kiểm tra file cấu hình của mình cứ 60 giây một lần để tiếp nhận cá thay đổi mới. Nếu không muốn chờ đợi lâu như vậy, bạn có thể bắt các daemon đó nạp lại bằng cách gửi tín hiệu SIGHUP tới chúng, hoặc chỉ đơn giản là khởi động lại. Ví dụ, nếu tiến trình smbd có PID là 893, ta có thể bắt nó đọc lại file cấu hình bằng lệnh sau đây:
Không phải tất cả các thay đổi đều được cá máy client chấp nhận ngay. Ví dụ, các tài nhuyên chia sẻ hiện thời đang được sử dụng sẽ không được đăng ký cho đến khi các máy client cắt các nối kết rồi kết nối lại tới các tài nguyên đó. Thêm nữa, cũng sẽ không được đăng ký ngay lập tức. Điều đó giúp cho các máy client tích cực không bị ngắt nối kết một cách bất ngờ hoặc gặp phải các vấn đề không được chờ đợi về truy cập tài nguyên khi phiên làm việc vẫn đang được mở.
Các biến: Samba có một tập hợp đầy đủ cá biến xác định các đặc trưng của server Samba và của cá máy client nối với nó. Mỗi một biến được bắt đầu bằng dấu phần trăm "%", tiếp theo là một ký tự đơn viết hoa hoặc viết thường và chỉ có thể được dùng bên vế phải của dòng liịnh tuỳ chọn cấu hình theo cú pháp potion = variable như trong câu lệnh ví dụ sau:
Ký hiệu biến %a có nghĩa đại diện cho kiến trúc của máy tính client, như WinNT để chỉ các máy tính chạy trên Windows NT, Win95 - cho máy Windows 95 hoặc 98, hay như WfWg - cho Windows for Worrgroups (Windows 3.11). Theo cách viết trên, Samba sẽ gán đường dẫn chung chỉ tới tài nguyên được chia sẻ trong phần [pub] cho các máy client chạy trên Windows NT, gán đường dẫn khác cho các máy Windows 9x, và một đường dẫn nữa cho các máy với Windows for Worrkgroups. Nói cách khác, các đường dẫn mà theo đó mỗi máy client nhận thấy tài nhuyên chia sẻ sẽ khác nhau, tuỳ thuộc vào kiến trúc của client.

Danh sách các biến của Samba.

Hết phần 1


Trong trường hợp ta viết một chương trình rất lớn được cấu thành bởi từ nhiều file, việc biên dịch sẽ rất phức tạp vì phải viết các dòng lệnh gcc rất là dài. Để khắc phục tình trạng này, công cụ GNU make đã được đưa ra. GNU make được giải quyết bằng cách chứa tất cả các dòng lệnh phức tạp đó trong một file gọi là makefile.
Làm thế nào gcc biết chia loại đặc biệt của file? Nó dựa vào đuôi mở rộng của file ở trên để xác định rõ phải xử lý file như thế nào cho dúng. Hầu hết những đuôi mở rộng thông thường và chú thích của chúng được liệt kê trong bảng dưới.

Các phần mở rộng của tên file đối với gcc.
Liên kết file đối tượng, và cuối cùng tạo ra mã nhị phân:
Trong trường hợp , ta chỉ muốn tạo ra các file obj, và như vậy thì bước liên kết là không cần thiết.
Hầu hết các chương trình C chứa nhiều file nguồn thì mỗi file nguồn đó đều phải được biên dịch sang mã obj trước khi tới bước liên kết cuối cùng. Giả sử có một ví dụ, ta đang làm việc trên killerapp.c là chương trình sử dụng phần mã của helper.c, như vậy để biên dịch killerapp.c ta phải dùng dòng lệnh sau:
gcc qua lần lượt các bước tiền xử lý - biên dịch - liên kết, lúc này tạo ra các file obj cho mỗi file nguồn trước khi tạo ra mã nhị phân cho killerapp.
Một số tuỳ chọn dòng lệnh của gcc:
-o FILE : Chỉ định tên file output; không cần thiết khi biên dịch sang mã obj. Nếu FILE không được chỉ rõ thì tên mặc định sẽ là a.out.
-c : Biên dịch không liên kết.
-DF00= BAR: Định nghĩa macro tiền xử lý đặt tên F00 với một giá trị của BAR trên dòng lệnh.
-IDI RNAME : Trước khi chưa quyết định được DIRNAME hãy tìm kiếm những file include trong danh sách các thư mục (tìm trong danh sách các đường dẫn thư mục).
-LDIRNAME: Trước khi chưa quyết định được DIRNAME hãy tìm kiếm những file thư viện trong danh sách các thư mục. Với mặc định gcc liên kết dựa trên những thư viện dùng chung.
-static: Liên kết dựa trên những thư viện tĩnh.
-lF00: Liên kết dựa trên libF00.
-g: Bao gồm chuẩn gỡ rối thông tin mã nhị phân.
-ggd b: Bao gồm tất cả thông tin mã nhị p hân mà chỉ có chương trình gỡ rối GNU- gdb mới có thể hiểu được.
-O: Tối ưu hoá mã biên dịch.
-ON: Chỉ định một mức tối ưu hoá mã N, 0<=N<=3.
-ANSI: Hỗ trợ chuẩn ANSI/ISO của C, loại bỏ những mở rộng của GNU mà xung đột với chuẩn( tuỳ chọn này không bảo đảm mã theo ANSI).
-pedantic: Cho ra tất cả những cảnh báo quy định bởi chuẩn.
-pedantic-erors: Thông báo ra tất cả các lỗi quy định bởi chuẩn ANSI/ISO của C.
-traditional: Hỗ trợ cho cú pháp ngôn ngữ C của Kernighan và Ritchie (giống như cú pháp định nghĩa hàm kiểu cũ).
-w: Chặn tất cả thông điệp cảnh báo.
-Wall: Thông báo ra tất cả những cảnh báo hữu ích thông thường mà gcc có thể cung cấp.
-werror: Chuyển đổi tất cả những cảnh báo sang lỗi mà sẽ làm ngưng tiến trình biên dịch.
-MM: Cho ra một danh sách sự phụ thuộc tương thích được tạo.
-v: Hiện ra tất cả các lệnh đã sử dụng trong mỗi bước của tiến trình biên dịch.
3.2. Công cụ GNU make:
Trong trường hợp ta viết một chương trình rất lớn được cấu thành bởi từ nhiều file, việc biên dịch sẽ rất phức tạp vì phải viết các dòng lệnh gcc rất là dài. Để khắc phục tình trạng này, công cụ GNU make đã được đưa ra. GNU make được giải quyết bằng cách chứa tất cả các dòng lệnh phức tạp đó trong một file gọi là makefile. Nó cũng làm tối ưu hóa quá trình dịch bằng cách phát hiện ra những file nào có thay đổi thì nó mới dịch lại, còn file nào không bị thay đổi thì nó sẽ không làm gì cả, vì vậy thời gian dịch sẽ được rút ngắn.
Một makefile là một cơ sở dữ liệu văn bản chứa cách luật, các luật này sẽ báo cho chương trình make biết phải làm gì và làm như thế nào. Một luật bao gồm các thành phần như sau:
• Đích (target) - cái mà make phải làm.
• Một danh sách các thành phần phụ thuộc (dependencies) cần để tạo ra đích.
• Một danh sách các câu lệnh để thực thi trên các thành phần phụ thuộc.
Khi được gọi, GNU make sẽ tìm các file có tên là GNUmakefile, makefile hay Makefile. Các luật sẽ có cú pháp như sau:
Target thường là một file như file khả thi hay file object ta muốn tạo ra. Dependency là một danh sách các file cần thiết như là đầu vào để tạo ra target. Command là các bước cần thiết (chẳng hạn như gọi chương trình dịch) để tạo ra target.
Dưới đây là một ví dụ về một makefile về tạo ra một chương trình khả thi có tên là editor (số hiệu dòng chỉ đưa vào để tiện theo dõi, còn nội dung của makefile không chứa số hiệu dòng).
Chương trình này được tạo ra bởi một số các file nguồn: editor.c, editor.h, keyboard.h, screen.h, screen.c, keyboard.c.
Để biên dịch chương trình này ta chỉ cần ra lệnh make trong thư mục chứa file này.
Trong makefile này chứa tất cả 5 luật, luật đầu tiên có đích là editor được gọi là đích ngầm định. Đây chính là file mà make sẽ phải tạo ra, editor có 3 dependencies editor.o, screen.o, keyboard.o. Tất cả các file này phải tồn tại thì mới tạo ra được đích trên. Dòng thứ 2 là lệnh mà make sẽ gọi thực hiện để tạo ra đích trên. Các dòng tiếp theo là các đích và các lệnh tương ứng để tạo ra các file đối tượng (object).
3.3. Làm việc với File:
Trong Linux, để làm việc với file ta sử dụng mô tả file (file descriptor). Một trong những thuận lợi trong Linux và các hệ thống UNIX khác là giao diện file làm như nhau đối với nhiều loại thiết bị. Đĩa từ, các thiết bị vào/ra, cổng song song, giả máy trạm (pseudoterminal), cổng máy in, bảng mạch âm thanh, và chuột được quản lý như các thiết bị đặc biệt giống như các tệp thông thường để lập trình ứng dụng.
Các socket TCP/IP và miền, khi kết nối được thiết lập, sử dụng mô tả file như thể chúng là các file chuẩn. Các ống (pipe) cũng tương tự các file chuẩn. Một mô tả file đơn giản chỉ là một số nguyên được sử dụng như chỉ mục (index) vào một bảng các file mở liên kết với từng tiến trình. Các giá trị 0, 1 và 2 liên quan đến các dòng (streams) vào ra chuẩn: stdin, stderr và stdout; ba dòng đó thường kết nối với máy của người sử dụng và có thể được chuyển tiếp (redirect).
Một số lời gọi hệ thống sử dụng mô tả file. Hầu hết các lời gọi đó trả về giá trị -1 khi có lỗi xảy ra và biến errno ghi mã lỗi. Mã lỗi được ghi trong trang chính tuỳ theo từng lời gọi hệ thống. Hàm perror() được sử dụng để hiển thị nội dung thông báo lỗi dựa trên mã lỗi.
Hàm open()
Lời gọi open() sử dụng để mở một file. Khuôn mẫu của hàm và giải thích tham số và cờ của nó được cho dưới đây:
Đối số pathname là một xâu chỉ ra đường dẫn đến file sẽ được mở. Thông số thứ ba xác định chế độ của file Unix (các bit được phép) được sử dụng khi tạo một file và nên được sử dụng khi tạo một file . Tham số flags nhận một trong các giá trị O_RDONLY, O_WRONLY hoặc O_RDWR

Các giá trị cờ của hàm open().
Open() trả về một mô tả file nếu không có lỗi xảy ra. Khi có lỗi , nó trả về giá trị -1 và đặt giá trị cho biến errno. Hàm create() cũng tương tự như open() với các cờ O_CREATE | O_WRONLY | O_TRUNC
Hàm close()
Chúng ta nên đóng mô tả file khi đã thao tác xong với nó. Chỉ có một đối số đó là số mô tả file mà lời gọi open() trả về. Dạng của lời gọ i close() là:
Tất cả các khoá (lock) do tiến trình xử lý trên file được giải phóng, cho dù chúng được đặt mô tả file khác. Nếu quá trình đóng file làm cho bộ đếm liên kết bằng 0 thì file sẽ bị xoá. Nếu đây là mô tả file cuối cùng liên kết đến một file được mở thì bản ghi ở bảng file mở được giải phóng. Nếu không phải là một file bình thường thì các hiệu ứng không mong muốn có thể xảy ra.
Hàm read()
Lời gọi hệ thống read() sử dụng để đọc dữ liệu từ file tương ứng với một mô tả file.
Đối số đầu tiên là mô tả file mà được trả về từ lời gọi open() trước đó. Đối số thứ hai là một con trỏ tới bộ đệm để sao chép dữ liệu và đối số thứ ba là số byte sẽ được đọc. read() trả về số byte được đọc hoặc -1 nếu có lỗi xảy ra.
Hàm write()
Lời gọi hệ thống write() sử dụng để ghi dữ liệu vào file tương ứng với một mô tả file.
Đối số đầu tiên là số mô tả file được trả về từ lời gọi open() trước đó. Đối số thứ hai là con trỏ tới bộ đệ m (để sao chép dữ liệu, có dung lượng đủ lớn để chứa dữ liệu) và đối số thứ ba xác định số byte sẽ được ghi. write() trả về số byte đọc hoặc -1 nếu có lỗi xảy ra.
Hàm ftruncate()
Lời gọi hệ thống ftruncate() cắt file tham chiếu bởi mô tả file fd với độ dài được xác định bởi tham số length
Trả về giá trị 0 nếu thành công và -1 nếu có lỗi xảy ra.
Hàm lseek()
Hàm lseek() đặt vị trí đọc và ghi hiện tại trong file được tham chiếu bởi mô tả file files tới vị trí offset.
Phụ thuộc vào giá trị của whence, giá trị của offset là vị trí bắt đầu (SEEK_SET), vị trí hiện tại (SEEK_CUR), hoặc cuối file (SEEK_END). Giá trị trả về là kết quả của offset: bắt đầu file, hoặc một giá trị của off_t , giá trị -1 nếu có lỗi.
Hết phần 6

Cài đặt và cấu hinh iptables trên Fedora

Thứ Năm, 31 tháng 10, 2013
Posted by Admin
Tag :

Cấu hình Firewall Iptables trên CentOS / Redhat

Thứ Tư, 30 tháng 10, 2013
Posted by Admin
Tag :

Netfilter là firewall cơ bản cho các máy chủ Linux.Nó được đưa vào như một phần của các hệ điều hành kể trên và được cấu hình mặc định có hiệu lực trên hệ thống.Firewall này được quản lý thông qua chương trình iptables.Netfilter lọc các gói tin tại tần kernel, trước khi hệ thống hoặc các phần mềm tầng ứng dụng xử lý gói tin đó.
Iptables Config File
Mặc định trong RHEL / CentOS / Fedora file cấu hình của iptables là :
/etc/sysconfig/iptables
Xem các rules (luật) mặc định:
Hãy gõ dòng lệnh sau:
iptables --line-numbers -n -L
Bạn sẽ nhận được kết quả trả về có nội dung tương tự như sau:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
3 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
4 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:53
8 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Bật / tắt / khởi động lại firewall 
Sử dụng các lệnh sau:
chkconfig iptables on
service iptables start
# Khởi động lạifirewall
service iptables restart
# Tắt firewall
service iptables stop
Tìm hiểu sâu hơn về Firewall iptables
Trong iptables có tất cả 4 kiểu sự kiện như sau:
§  INPUT: Các gói tin gửi đến hệ thống từ bên ngoài.Sử dụng sự kiện này để chặn các cổng (port) gửi đến như 80,25,110 hoặc các ip nguồn, subnet (chẳng hạn như 202.54.1.20/29).
§  OUTPUT: Chỉ các gói tin được tạo ra từ hệ thống.
§  FORWARD: Các gói tin được gửi thông qua thiết bị khác.Thường dùng trong trường hợp cài đặt máy chủ Linux như một router.Ví dụ, eth0 kết nối với modem ADSL / Cable và eth1 kết nối với mạng LAN. Sử dụng FORWARD để gửi và nhận các gói tin truy cập từ mạng LAN với Internet.
§  RH-Firewall-1-INPUT: Tùy chỉnh các sự kiện, nó sẽ gọi đến 3 kiểu sự kiện trên là INPUT,OUTPUT và FORWARD.
Quy trình xử lý gói tin:
§  Bắt đầu từ rules đầu tiên
§  Chạy đến khi gói tin phù hợp với một điều kiện trong các config đã cấu hình.
§  Nếu có sự phù hợp trong các rules, gói tin sẽ được xử lý bằng REJECT, ACCEPT, DROP.
Các cách xử lý gói tin:
§  ACCEPT cho phép gói tin đi qua.
§  REJECT loại bỏ và gửi thông báo lỗi đến địa chỉ nguồn gửi gói tin.
§  DROP xóa gói tin mà không thông báo đến địa chỉ nguồn gửi gói tin.
Cấu hình /etc/sysconfig/iptables
Bạn có thể sử dụng
 vi hoặc nano như sau:
nano /etc/sysconfig/iptables
Nội dung của file sẽ theo mẫu bên dưới:
*filter
:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0] 
:RH-Firewall-1-INPUT - [0:0] 
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Chặn tất cả gói tin:
Tìm các dòng:
*filter
:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0]
Chỉnh sửa thành:
:INPUT DROP [0:0] 
:FORWARD DROP [0:0]
Ghi lại log và xóa DROP các gói tin từ nguồn chỉ định:
Thêm các dòng sau vào file cấu hình, trước chữ COMMIT cuối cùng file:
-A INPUT -i eth0 -s 10.0.0.0/8 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 172.16.0.0/12 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 192.168.0.0/16 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 224.0.0.0/4 -j LOG --log-prefix "IP DROP MULTICAST "
-A INPUT -i eth0 -s 240.0.0.0/5 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -d 127.0.0.0/8 -j LOG --log-prefix "IP DROP LOOPBACK "
-A INPUT -i eth0 -s 169.254.0.0/16 -j LOG --log-prefix "IP DROP MULTICAST "
-A INPUT -i eth0 -s 0.0.0.0/8 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 240.0.0.0/4 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 255.255.255.255/32 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 168.254.0.0/16 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 248.0.0.0/5 -j LOG --log-prefix "IP DROP "
Ghi lại log và DROP tất cả các gói tin:
Tìm dòng sau:
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Sửa thành:
-A RH-Firewall-1-INPUT -j LOG
-A RH-Firewall-1-INPUT -j DROP
COMMIT
Mở port
Để mở port 80 cho webserver thêm dòng sau vào trước COMMIT cuối file:
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
Để mở port 53 cho DNS server thêm dòng sau vào trước COMMIT cuối file:
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT
Để mở port 443 cho HTTPS thêm dòng sau vào trước COMMIT cuối file:
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
Để mở port 25 cho SMTP server thêm dòng sau vào trước COMMIT cuối file:
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT
Chỉ chấp nhận cho sử dụng SSH từ ip nguồn 192.168.1.0/24:
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
….
Lưu lại file và restart iptables:
# service iptables restart
# iptables -vnL --line-numbers
Hy vọng bài viết này có thể giúp ích cho các bạn, giúp bạn hiểu hơn về hệ thống firewall cơ bản nhưng rất hiểu quả: iptables.
Welcome to My Blog

Tổng số lượt xem trang

Social Icons

Social Icons

Message From Admin

các bạn có thể tham gia bình luận,góp ý...những bình luận nào mang tính thô tục,chửi bậy..không tốt,admin sẽ xóa không báo trước Thân!

- Copyright © Hệ thống mạng unix/Linix -Robotic Notes- Powered by Blogger - Designed by Johanes Djogan -