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
|
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ấu hình Firewall Iptables trên CentOS / Redhat
Thứ Tư, 30 tháng 10, 2013
Posted by Admin
Tag :
Centos
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à :
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:
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
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:
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
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:
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:
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
: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:
Tìm các dòng:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
: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]
: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:
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 "
-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:
Tìm dòng sau:
-A
RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
COMMIT
Sửa thành:
-A
RH-Firewall-1-INPUT -j LOG
-A RH-Firewall-1-INPUT -j DROP
COMMIT
-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:
Để 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
-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
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT
-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
-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
# 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.
Vừa qua phiên bản Ubuntu 13.10 đã chính thức phát hành, đối với cộng đồng Linux nói chung thì đây là tin vui bởi Ubuntu 13.10 mang đến nhiều cải tiến đáng quan tâm, nhưng đối với cộng đồng Việt thì lại gặp đôi chút rắc rối trong việc kích hoạt bộ gõ Tiếng Việt, cụ thể là app iBus trên Ubuntu 13.10 đã bị thay đổi nên gây đôi chút "mù mịt" cho người dùng.
Để có thể gõ Tiếng Việt trên Ubuntu 13.10 bạn cần cài thêm ứng dụng hỗ trợ Unikey đi kèm với iBus có sẵn trên Ubuntu, mặc dù bản thân Ubuntu đã có phần hỗ trợ gõ Tiếng Việt nhưng rất khó sử dụng. Bạn có thể tìm thấy ứng dụng hỗ trợ Unikey trên hệ thống Ubuntu Software Center.
Sau khi cài xong ứng dụng hỗ trợ, bạn vào Terminal và nhập vào dòng lệnh "ibus restart".
Kế tiếp, bạn vào All Apps và gõ vào từ khóa "Text Entry" để tiến hành thêm ứng dụng hỗ trợ Unikey vào bộ gõ iBus của Ubuntu 13.10.
Trên giao diện Text Entery, bấm chuột vào biểu tượng dấu "+" sau đó nhập vào ô tìm kiếm là Vietnamese (Unikey) để tích hợp Unikey vào iBus và nhấn nút Add để thêm vào.
Cuối cùng chỉ cần di chuyển Vietnamese (Unikey) bằng các phím mũi tên bên dưới danh sách sao choVietnamese (Unikey) đứng hàng đầu tiên, như thế Ubuntu sẽ hiểu là Vietnamese (Unikey) là bộ gõ mặc định.