Tài liệu Quản trị hệ thống Linux - Cơ bản (Phần 2)

pdf 86 trang hapham 1290
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu Quản trị hệ thống Linux - Cơ bản (Phần 2)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftai_lieu_quan_tri_he_thong_linux_co_ban_phan_2.pdf

Nội dung text: Tài liệu Quản trị hệ thống Linux - Cơ bản (Phần 2)

  1. Quản trị Hệ thống Linux - Cơ bản CẤU HÌNH MẠNG The Network Interface Card mạng phải được hỗ trợ từ nhân của hệ điều hành. Để xác định những card mạng nào có thể sử dụng được, bạn có thể truy vấn thông tin qua câu lệnh dmesg, /proc/interrupts, /sbin/lsmod. hoặc /etc/modules.conf Ví dụ: Dmesg ► Linux Tulip driver version 0.9.14 (February 20, 2001) PCI: Enabling device 00:0f.0 (0004 -> 0007) PCI: Found IRQ 10 for device 00:0f.0 eth0: Lite-On 82c168 PNIC rev 32 at 0xf800, 00:A0:CC:D3:6E:0F, IRQ 10. eth0: MII transceiver #1 config 3000 status 7829 advertising 01e1. cat /proc/interrupts ► 0: 8729602 XT-PIC timer 1: 4 XT-PIC keyboard 2: 0 XT-PIC cascade 7: 0 XT-PIC parport0 8: 1 XT-PIC rtc 10: 622417 XT-PIC eth0 11: 0 XT-PIC usb-uhci 14: 143040 XT-PIC ide0 136
  2. Quản trị Hệ thống Linux - Cơ bản 15: 180 XT-PIC ide1 /sbin/lsmod ► Module Size Used by tulip 37360 1 (autoclean) Từ ví dụ trên, chúng ta thấy rằng Chipset của card mạng Ethernet là Tulip, địa chỉ i/o là 0xf800 và ngắt (IRQ) là 10. Thông tin này có thể được sử dụng trong cả trường hợp nếu module sai được dụng hoặc các tài nguyên (i/o hoặc IRQ) không có. Thông tin này cũng được sử dụng để chèn một module với một địa chỉ i/o khác (sử dụng tiện ích modprobe hoặc insmod) hoặc cũng có thể được ghi trong /etc/modules.conf hoặc /etc/modprobe.conf (sẽ ghi các thông số cài đặt trong lần khởi động sau). Thông tin máy chủ (Host Information) Các tệp sau đây được sử dụng để lưu trữ các thông tin mạng. • /etc/resolv.conf chứa danh sách các máy chủ DNS nameserver 192.168.1.108 nameserver 192.168.1.1 search linuxit.org • /etc/hosts chứa địa chỉ IP của máy tính cũng như danh sách các máy chủ đã biết # Do not remove the following line, or various programs 137
  3. Quản trị Hệ thống Linux - Cơ bản # that require network functionality will fail. 127.0.0.1 localhost localhost.localdomain # other hosts 192.168.1.108 mesa mesa.domain.org 192.168.1.119 pico 1. /etc/sysconfig/network xác định nếu mạng phải được khởi động (có thể chứa biến HOSTNAME) NETWORKING=yes HOSTNAME=mesa.domain.org GATEWAY=192.168.1.1 2. /etc/sysconfig/network-scripts/ifcfg-eth0 Các tham số thiết lập cho eth0 DEVICE=eth0 BOOTPROTO=none BROADCAST=192.168.1.255 IPADDR=192.168.1.108 NETWORK=192.168.1.0 ONBOOT=yes USERCTL=no Khởi động (Start) và dừng (Stop) mạng 138
  4. Quản trị Hệ thống Linux - Cơ bản ● Từ chế độ câu lệnh Công cụ chính được sử dụng để hiển thị giao diện mạng là /sbin/ifconfig. Đầu tiên khởi tạo module nhân được gán cho eth0 trong /etc/modules.conf (ví dụ tulip.o) được load và sau đó gán giá trị địa chỉ IP và mặt nạ mạng (netmask). Kết quả là giao diện có thể được chuyển bật và tắt mà không bị mất các thông tin này trong khi module nhân được thêm vào. Ví dụ: Sử dụng ifconfig. /sbin/ifconfig eth0 192.168.10.1 netmask 255.255.128.0 /sbin/ifconfig eth0 down /sbin/ifconfig eth0 up Một công cụ khác là /sbin/ifup. Tiện ích này đọc các tệp cấu hình hệ thống trong /etc/sysconfig/network-script/ và gán các giá trị được lưu trữ cho một giao diện mạng nào đó. Script cho eth0 được gọi là ifcfg-eth0 và đã được cấu hình. Nếu giao thức khởi động như DHCP được định nghĩa thì ifup sẽ khởi động giao diện mạng với giao thức này. Ví dụ: Sử dụng ifup. /sbin/ifup eth0 /sbin/ifup ppp0 /sbin/ifdown eth0 ●. Sử dụng network script 139
  5. Quản trị Hệ thống Linux - Cơ bản Tại thời điểm khởi động card Ethernet được khởi tạo với /etc/rc.d/init.d/network script. Tất cả các file mạng liên quan được chứa trong thư mục /etc/sysconfig/. Hơn nữa script có thể đọc các lựa chọn sysctl trong /etc/sysctl.conf, đây là nơi mà bạn có thể cấu hình hệ thống như một bộ định tuyến (cho phép địa chỉ IP chuyển trong nhân hệ điều hành). Ví dụ dòng lệnh net.ipv4.ip_forward = 1 sẽ cho phép địa chỉ IP chuyển (forwarding) và file /proc/sys/net/ipv4/ip_forward sẽ chứa số 1 Network script được khởi động lại với câu lệnh sau /etc/rc.d/init.d/network restart 3. Phục hồi lại DHCP Các công cụ sau đây có thể truy vấn máy chủ DHCP cho một địa chỉ IP mới: pump dhcpclient Một daemon khách hỗ trợ DHCP được gọi là dhcpcd (không nhầm lẫn với daemon máy chủ DHCP là dhcpd). Định tuyến Một điều dễ nhận thấy khác khi sử dụng ifup là bảng định tuyến của hệ thống. Điều này có thể do file etc/sysconfig/network được đọc, trong khi default 140
  6. Quản trị Hệ thống Linux - Cơ bản gateway được lưu trữ, hoặc máy chủ DHCP đã gửi thông tin này cùng với địa chỉ IP. Bảng định tuyến được cấu hình, kiểm tra và thay đổi với công cụ /sbin/route. Các vi dụ định tuyến: Thêm một tuyến tĩnh (static route) vào mạng 10.0.0.0 qua thiết bị eth1 trong đó sử dụng 192.168.1.108 làm gateway cho mạng: /sbin/route add -net 10.0.0.0 gw 192.168.1.108 dev eth1 Thêm một gateway mặc định (default gateway) /sbin/route add default gw 192.168.1.1 eth0 Liệt kê bảng định tuyến nhân: /sbin/route -n ► Kernel IP routing table Destination Gateway Genmask Iface 192.168.1.0 0.0.0.0 255.255.255.0 eth0 10.1.8.0 192.168.1.108 255.0.0.0 eth1 127.0.0.0 0.0.0.0 255.0.0.0 lo 0.0.0.0 192.168.1.1 0.0.0.0 eth0 Gateway mặc định (Default Gateway): Trong danh sách cuối cùng. Trường đích là một danh sách các mạng. Đặc biệt, 0.0.0.0 có nghĩa là “mọi nơi”. Cần nhớ rằng, tồn tại 2 địa chỉ IP trong trường Gateway. Vậy địa chỉ nào là default gateway? 141
  7. Quản trị Hệ thống Linux - Cơ bản Để tránh phải nhập bằng tay các tuyến tĩnh, các daemon đặc biệt gated hoặc routed được thực thi để cập nhật một cách động các bảng định tuyến qua một mạng. Nếu bạn thuộc về mạng 192.168.10.0 và bạn thêm vào một tuyến tới mạng 192.168.1.0 thì bạn có thể nhận được kết quả là các máy tính trong mạng vừa thêm vào là không có (not responding) bởi vì không có tuyến (route) được thiết lập từ mạng 192.168.1.0 tới máy chủ của bạn!! Vấn đề này có thể được giải quyết bằng cách sử dụng định tuyến động (dynamic routing) Các tuyến tĩnh cố định Nếu bạn có một số mạng với nhiều hơn một gateway, bạn có thể sử dụng /etc/sysconfig/static-routes (thay cho các daemon định tuyến). Các tuyến này sẽ được thêm vào tại thời điểm khởi động bởi network script. Một kịch bản định tuyến: 142
  8. Quản trị Hệ thống Linux - Cơ bản Các công cụ mạng Sau đây là danh sách ngắn các công cụ hữu ích khi gỡ rối các kết nối mạng: 143
  9. Quản trị Hệ thống Linux - Cơ bản ping host: Công cụ này gửi một gói dữ liệu ICMP ECHO_REQUEST tới một máy chủ và chờ một ICMP ECHO_RESPONSE. Các tham số lựa chọn của công cụ ping: -b ping một địa chỉ broadcast -c N gửi N gói tin -q Chế độ im lặng: hiển thị chỉ các gói tin đầu và cuối netstat: Bạn có thể nhận được thông tin của các kết nối mạng hiện tại, bảng định tuyến hoặc các thống kê giao diện mạng phụ thuộc vào các lựa chọn sau được sử dụng: Các lựa chọn của netstat: -r giống như /sbin/route -I hiển thị danh sách giao diện mạng (card mạng) -n không giải các địa chỉ mạng IP -p trả về PID và tên của các chương trình (chỉ sử dụng cho root) -v diễn giải dài -c tiếp tục cập nhật Ví dụ: Kết quả của netstart –inet –n: ► Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.1.10:139 192.168.1.153:1992 ESTABLISHED tcp 0 0 192.168.1.10:22 192.168.1.138:1114 ESTABLISHED 144
  10. Quản trị Hệ thống Linux - Cơ bản tcp 0 0 192.168.1.10:80 192.168.1.71:18858 TIME_WAIT Trong danh sách trên bạn có thể thấy máy chủ địa phương (local host) đã thiết lập các kết nối ở cổng 139, 22 và 80. arp: Hiển thị bộ đệm giải địa chỉ nhân. Ví dụ: arp ► Address HWtype HWaddress Iface 192.168.1.71 ether 00:04:C1:D7:CA:2D eth0 traceroute: Hiển thị tuyến (route) được lấy từ một máy chủ địa phương (local host) tới một máy chủ đích. Traceroute ép ngay lập tức các tuyến (routes) tới các thông báo lỗi trở về (send back error message) (ICMP TIME_EXCEEDED) bằng cách xem xét thiết lập giá trị tty (time to live) xuống mức rất thấp (too low). Sau mỗi thông báo TIME_EXEEDED, traceroute tăng giá trị của tty, gửi gói tin tiếp theo đi xa hơn cho đến khi tới được địa chỉ đích của nó. Ví dụ: CMD: /usr/sbin/traceroute -n www.redhat.com ► traceroute: Warning: www.redhat.com has multiple addresses; using 216.148.218.197 traceroute to www.redhat.com (216.148.218.197), 30 hops max, 38 byte packets 1 192.168.1.1 0.440 ms 0.347 ms 0.341 ms snip 145
  11. Quản trị Hệ thống Linux - Cơ bản 14 12.122.2.145 112.116 ms 110.908 ms 112.002 ms 15 12.122.2.74 156.629 ms 157.028 ms 156.857 ms 16 12.122.255.222 156.867 ms 156.641 ms 156.623 ms 17 216.148.209.66 159.982 ms 157.462 ms 158.537 ms 18 216.148.218.197 157.395 ms 156.789 ms 156.080 ms Các lựa chọn của traceroute: -f ttl Thay đổi thời gian sống khởi tạo về ttl thay vì giá trị 1 -n không giải các địa chỉ IP -v diễn giải dài -w sec thiết lập thời gian chờ tại các gói trả về thành sec 146
  12. Quản trị Hệ thống Linux - Cơ bản Thực hành 1. Trong phần kịch bản định tuyến được trình bày ở trên đưa ra bảng định tuyến đối với gateway của mạng LAN. 2. Khởi động giao diện mạng của bạn bằng tay ifconfig eth0 192.168.0.x Liệt kê danh sách các module nhân. Đảm bảo rằng module eth0 đã được tải (kiểm tra /etc/modules.conf). 3. Dừng giao diện mạng với: (i) ifconfig eth0 down Chắc chắn rằng bạn có thể lưu trữ các thông tin giao diện mạng này mà không bị mất thông tin: (ii) ifconfig eth0 up 4. Dừng giao diện mạng và gỡ bỏ module nhân (rmmod module). Điều gì sẽ xảy ra nếu bạn lặp lại bước 3 (ii)? 5. Chia lớp thành hai mạng A (192.168.1.0) và B (10.0.0.0). • Thử truy cập các máy qua các mạng • Chọn một máy làm gateway (tại một trong hai mạng) • Chỉ trên máy gateway! thực hiện các lệnh sau: cho phép chuyển IP (allow IP forwarding): echo 1 > /proc/sys/net/ipv4/ip_forward đưa ra một giao diện mạng đã được gán (sẽ làm việc như một giao diện mạng thứ hai). Nếu bạn ở trong mạng 192.168.1.0 thì sẽ thực hiện các lệnh sau: ifup eth0:1 10.0.0.x (trong đó x là một địa chỉ IP xác định nào đó). 147
  13. Quản trị Hệ thống Linux - Cơ bản thêm một tuyến (route) tới một mạng mới và gán nó sử dụng thiết bị eth0:1 thêm một tuyến (route) tới một mạng khác bằng cách sử dụng một máy làm gateway (bạn sẽ cần biết thiết lập eth0 hoặc eth0:1 của gw này phụ thuộc vào việc bạn đang ở mạng nào) 148
  14. Quản trị Hệ thống Linux - Cơ bản MẠNG TCP/IP Số nhị phân và Dotted Quad Số nhị phân 10 = 21 100 = 22 101 = 22 + 1 111 = 100 + 010 + 001 Điều này cho thấy một số nhị phân có thể dễ dàng chuyển sang số thập phân: 10000000 = 27 = 128 01000000 = 26 = 64 00100000 = 25 = 32 00010000 = 24 = 16 00001000 = 23 = 8 00000100 = 22 = 4 00000010 = 21 = 2 00000001 = 20 = 1 The Dotted Quad: Địa chỉ IP được gán cho một interface được gọi là một Dotted Quad. Trong trường hợp một địa chỉ Ipv.4, địa chỉ là 4 bytes (4 lần 8 bits) phân cách nhau bởi các dấu chấm. Decimal Binary 192.168.1.1 11000000.10101000.00000001.00000001 Địa chỉ Broadcast, địa chỉ mạng và netmask Một địa chỉ IP bao gồm địa chỉ của host và địa chỉ của mạng. 149
  15. Quản trị Hệ thống Linux - Cơ bản The Netmask Netmask được dùng để qui định số bit trong một địa chỉ IP được dùng để đánh địa chỉ mạng. Netmask hay còn gọi là subnet mask. Ví dụ netmask 16 và 17 bit: 255.255.0.0 16-bit 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 0 0 0 0 0 0 0 0 . 0 255.255.128.0 17-bit 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 . 1 0 0 0 0 0 0 0 . 0 Địa chỉ broadcast thường được sinh ra bởi hệ thập phân. Ví dụ: với 16 – bit netmask, các IP sau nằm trên cùng một mạng 00100000 . 10000000 . 00000001 . 00000001 00100000 . 10000000 . 00000000 . 00000011 Có nghĩa rằng bất kỳ một bit nào nằm trong hình chữ nhật (hình vẽ) (8+8 = 16 bits) sẽ thay đổi địa chỉ mạng và các host cần một gateway để kết nối chúng với nhau. Tương tự, bất kỳ bit nào bên ngoài hình chữ nhật (hình vẽ) sẽ thay đổi địa chỉ của host mà không làm thay đổi địa chỉ mạng. Ví dụ: với netmask 24 bit dưới đây, 2 IP sẽ nằm trên 2 mạng khác nhau: 00100000 . 10000000 . 00000001 . 00000001 00100000 . 10000000 . 00000000 . 00000011 Địa chỉ mạng Mỗi một mạng cần có một số hiệu, số hiệu cần thiết trong việc thiết lập bộ dẫn đường (routing). Số hiệu của mạng là có số nguyên(0-255) phân cách bởi dấu chấm. 150
  16. Quản trị Hệ thống Linux - Cơ bản Địa chỉ Broadcast Địa chỉ broadcast là một miền các host/interface có thể được truy cập trên mạng giống nhau. Ví dụ một host có địa chỉ broadcast là 10.1.255.255 sẽ truy cập đến tất cả các máy nào có IP có dạng 10.1.x.x. Địa chỉ broadcast điển hình 192.168.1.255. Các phép toán logic có thể áp dụng cho các địa chỉ broadcast, netmask, network. Để lấy địa chỉ mạng, ta làm động tác đơn giản là thực hiện phép toàn AND giữa địa chỉ IP và netmask. Network Address = IP AND Netmask Tính địa chỉ broadcast bằng cách: network address OR ‘not MASK’ Broadcast Address = Network OR not[Netmask] AND và OR à các phép toán logic trong mẫu nhị phân của các địa chỉ này Ví dụ: Địa chỉ IP 192.168.3.5 với net mask 255.255.255.0. Chúng tac có thể thực hiện các phép toán sau: Địa chỉ mạng = IP AND MASK 11000000. 10101000.00000011.00000101 (192.168.3.5) AND 11111111.11111111.11111111.00000000 (255.255.255.000) ___ 11000000.10101000.00000011.00000000 (192.168.3.0) Địa chỉ Broadcast = IP OR NOT-MASK 11000000. 10101000.00000011.00000101 (192.168.3.5) OR 00000000.00000000.00000000.11111111 (000.000.000.255) 151
  17. Quản trị Hệ thống Linux - Cơ bản ___ 11000000.10101000.00000011.11111111 (192.168.3.255) Từ các ví dụ trên ta rút ra nhận xét. Một địa chỉ IP cùng với netmask đủ để xác định các thông tin về mạng và host đó. Lớp mạng Địa chỉ IP dự phòng Đối với các mạng riêng biệt, các địa chỉ IP có thể không bao giờ được sử dụng làm địa chỉ IP trên internet. Các địa chỉ IP dự phòng này thông thường chỉ được sử dụng cho các mạng LAN. Bảng sau đây sẽ cho thấy các lớp địa chỉ riêng/ dự phòng. Bảng1: Địa chỉ dự phòng 1 Class A 10.x.x.x 16 Class B 172.16.x.x 172.31.x.x 255 Class C 192.168.o.x Lớp địa chỉ IP Lớp A: 8 bit dùng để đánh địa chỉ mạng và 24 bit đánh địa chỉ host. Byte đầu tiên dự phòng cho địa chỉ mạng. Vì vậy subnet mask mặc định sẽ là 255.0.0.0. Do 255.255.255 and 0.0.0 không phải là địa chỉ host nên có tối đa 224 – 2 = 16777214 host trên mạng. Số IP có byte đầu tiên nằm trong miền từ 1 đến 127, tương ứng với số nhị phân 00000001 -> 01111111. Hai bit đầu tiên của lớp A có thể thiết lập bằng “00” hoặc “01”. 152
  18. Quản trị Hệ thống Linux - Cơ bản Lớp B: địa chỉ mạng và host 16 bit 16 bit dùng để đánh địa chỉ mạng và 16 dùng để đánh địa chỉ host trên mạng.Subnet mask mặc định là 255.255.0.0. Có tối đa 216-2 = 65 534 host trên một mạng thuộc lớp B. Byte đầu tiên có phạm vi từ 128 đến 191. Tương ứng với số nhị phân là 10000000->10111111. Hai bit đầu tiên của lớp B luôn thiêt lập là “10”. Lớp C: địa chỉ mạng và host 24-bit 24 bit dùng để đánh địa chỉ mạng và 8 bit dùng để đánh địa chỉ host trên mạng. Subnet mask mặc định là 255.255.255.0. Có tối đa 28 -2 = 254 host trên một mạng thuộc lớp C. Byte đầu tiên có giá trị từ 192 đến 223. Tương ứng với số nhị phân là 11000000 ->11011111. Như vậy 2 bit đầu tiên của lớp C luôn là “11”. Subnets Subnet là khái niệm phân chia một mạng thành nhiều mạng con bằng cách dùng các bit của phần địa chỉ host để đánh địa chỉ mạng. Ví dụ netmask lớp A là 255.0.0.0 có thể được dùng để biến bit đầu tiên của byte thứ 2 trở thành bit đánh địa chỉ mạng. Kết quả chúng ta có 9 bit để đánh địa chi mạng và 23 bit đánh chỉ host trên mạng. Netmask có dạng binary như sau : 11111111.10000000.00000000.00000000 or 255.128.0.0 25-bit network Netmask: 11111111.11111111.11111111.10000000 or 255.255.255.128 Do địa chỉ mạng Network = IP AND Netmask, từ giá trị của netmask, ta thấy là có thể tạo được 2 mạng con. 1. Các địa chỉ host nằm trong miền 192.168.1.0xxxxxxx thuộc vào mạng 192.168.1.0 network. Số hiệu của mạng là 0. 153
  19. Quản trị Hệ thống Linux - Cơ bản 2. Các địa chỉ host nằm trong miền 192.168.1.1xxxxxxx thuộc vào mạng 192.168.1.128 network. Số hiệu của mạng là 128 Bảng2: Trong cả 2 trường hợp, thay x byte bằng 0 hoặc 1, ta có các địa chỉ đặc biệt Network address Substitute with 1’s Substitute with 0’s 0 Broadcast: 127 Network: 0 128 Broadcast: 255 Network: 128 Số bit để đánh địa chỉ host là 7 và trừ đi 2 giá trị đặc biệt (tất cả các bit bằng 0 hoặc 1), chúng ta có 27 – 2 = 126 trên mỗi mạng và có tất cả 252 host. Nếu chúng ta dùng subnet mask mặc định là 255.255.255.0 thì chúng ta có 254 địa chỉ host. Trong ví dụ trên 192.168.1.127 là các địa chỉ đặc biệt, do đó chỉ có 252 địa chỉ host được sử dụng. 26-bit network Netmask: 11111111.11111111.11111111.11000000 or 255.255.255.192 Tạo được 4 mạng con, địa chỉ của mỗi mạng được xác định bằng qui tắc AND, địa chỉ của các host được xác định như sau: 1. Địa chỉ các host nằm trong miền 192.168.1.00xxxxxx thuộc vào mạng 192.168.1.0 network. 2. Địa chỉ các host nằm trong miền 192.168.1.01xxxxxx thuộc về mạng 192.168.1.64 network. 3. Địa chỉ các host nằm trong miền 192.168.1.10xxxxxx thuộc về mạng 192.168.1.128 network. 154
  20. Quản trị Hệ thống Linux - Cơ bản 4. Địa chỉ các host nằm trong miền 192.168.1.11xxxxxx thuộc về mạng 192.168.1.192 network. Thay thế x bit trên bằng 1 ta có địa chỉ ở trên ta có các địa chỉ broadcast tương ứng: 192.168.1.63, 192.168.1.127, 192.168.1.191, 192.168.1.255 6 Mỗi mạng con có 2 – 2 = 62 hosts và tống số có 62 x 4 = 248 host trên mạng. Họ giao thức TCP/IP TCP/IP là một bộ giao thức, được sử dụng trên mạng Internet. Gọi là họ giao thức vì TCP/IP chứa một số giao thức, những giao thức này dùng để truyền dữ liệu và chương trình qua mạng. Hai giao thức chính trong họ giao thức TCP/IP là TCP (Transmission Control Protocol) và Ip (Internet Protocol). Hiểu một cách đơn giản, giao thức IP chỉ xử lý các gói tin và các datagrams (gói tin chứa địa chỉ đến, kích thước ) trong khi đó giao thức TCP xử lý vấn đề kết nối giữa 2 máy tính. Các giao thức kết hợp với nhau để thực hiện tác vụ đặc biệt của mình. Tài liệu này sẽ trình bày các tác vụ của TCP/IP. Hoạt động của các giao thức diễn ra ở các tầng khác nhau trong tiến trình hoạt động của mạng. Bảng 1: Mô hình 4 tầng của giao thức TCP/IP Tần ứng dụng (Application) Mức ứng dụng(FTP,SMTP,SNMP) Tầng giao vận(Transport) Kết nối các máy(TCP,UDP) Tầng internet(Internet) Routing(Dẫn đường):IP,ICMP,IGMP,ARP 155
  21. Quản trị Hệ thống Linux - Cơ bản Tầng truy cập mạng() Mức card mạng, ví dụ card Ethernet, token ring ● Tổng quan về các giao thức IP Giao thức IP làm nhiệm vụ truyền tải dữ liệu cho giao thức TCP , UDP và ICMP.IP cung cấp dịch vụ kết nối không tin cậy (unreliable), có nghĩa là dữ liệu truyền đi không đảm bảo được truyền đến địa chỉ cần gửi. Giao thức IP cho phép tất cả tính toàn vẹn của dữ liệu được xử lý bởi một trong giao thức tầng cao hơn, ví dụ như giao thức TCP hoặc những thiết bị chuyên biệt cho ứng dụng nào đó. IP có nhiệm vụ xử lý vấn đề địa chỉ và dẫn đường (routing) giữa các mạng. Đơn vị dữ liệu sử dụng ở giao thức IP là datagram. TCP Giao thức TCP(Transmission Control Protocol) cung cấp dịch vụ kết nối tin cậy. TCP có nhiệm vụ kiểm tra trên mỗi host thứ tự gửi và nhận và kiểm tra và bảo đảm rằng mội gói dữ liệu (data packet) đã được truyền. Ví dụ các ứng dụng FTP hay telnet(ứng dụng đăng nhập từ xa) không cần 156
  22. Quản trị Hệ thống Linux - Cơ bản phải xử lý vấn đề mất dữ liệu trong quá trình truyền. UDP Giao thức UDP (User Datagram Protocol) cho phép một chương trình ứng dụng truy cập trực tiếp đến IP, không giống như TCP, UDP là giao thức không liên kết và không tin cậy. ICMP Giao thức ICMP(Internet Cỏntom Message Protocol) được sử dụng bởi các thiết bị dẫn đường và các host để thoi dõi trạng thái của mạng. Đơn vị dữ liệu sử dụng trong giao thức này là IP datagrams và ICMP là giao thức không liên kết. PPP Giao thức PPP(Point to Point) thiết lập một kết nối TCP/IP thông qua đường điện thoại. Ngoài ra nó còn được sử dụng bên trong các kết nối được mã hóa như pptp. Các dịch vụ và các cổng trong TCP/IP Danh sách các dịch vụ và các cổng của nó nói chung sẽ tìm thấy trong /etc/services. Danh sách các dịch vụ và các cổng tương ứng với các dịch vụ được quản lý bởi IANA(Internet Assigned Numbers Authority). Mỗi cổng là một số 16 bit, đó đó có tổng số là 65535 cổng. Các cổng từ 1 đến 1023 là các cổng độc quyền, được giành cho các dịch vụ chạy bởi người dùng root. Tất cả các ứng dụng đã biết sẽ được phục vụ ở một trọng những cổng này. Chúng ta hãy quan sát kêt quả của dịch vụ portscans(dò tìm các cổng). Nên nhớ rằng dịch vụ này là bất hợp pháp, tuy nhiên rất nhiều người dụng dịch vụ này. Dưới đây là kết quả của lệnh quét cổng: Port State Service 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 25/tcp open smtp 157
  23. Quản trị Hệ thống Linux - Cơ bản 70/tcp open gopher 79/tcp open finger 80/tcp open http Dịch vụ portscan cho biết các cổng đang mở và phục vụ ứng dụng nào Các cổng chính /etc/services: ftp-data 20/tcp ftp 21/tcp telnet 23/tcp smtp 25/tcp mail domain 53/tcp domain 53/udp http 80/tcp # www is used by some broken www 80/tcp # progs, http is more correct pop-2 109/tcp # PostOffice V.2 pop-3 110/tcp # PostOffice V.3 sunrpc 111/tcp sftp 115/tcp uucp-path 117/tcp nntp 119/tcp usenet # Network News Transfer ntp 123/tcp # Network Time Protocol netbios-ns 137/tcp nbns netbios-ns 137/udp nbns netbios-dgm 138/tcp nbdgm netbios-dgm 138/udp nbdgm netbios-ssn 139/tcp nbssn imap 143/tcp # imap network mail protocol NeWS 144/tcp news # Window System snmp 161/udp snmp-trap 162/udp 158
  24. Quản trị Hệ thống Linux - Cơ bản Thực hành Registering a service with xinetd 1. Viết một bash script đưa ra màn hình(stdout) dòng “Welcome”. Lưu lại trong /usr/sbin/hi 2. Trong thư mục /etc/xinetd.d tạo một file tên là fudge như sau: service fudge { socket_type = stream server =/usr/sbin/hi user = root wait = no disable = no } 3. Thêm một dịch vụ tên là fudge trong /etc/services, dịch vụ này sử dụng cổng 60000. 4. Khởi động lại xinetd và dùng dịch vụ telnet đến cổng 60000. 5. Giả sử bạn có một miền IP trên mạng 83.10.11.0/27 a. Bao nhiêu mạng có 4 byte đầu tiên giống như của bạn? b. Có bao nhiêu máy trên mạng của bạn? Có bao nhiêu địa chỉ broadcast cho mạng đầu tiên này? 159
  25. Quản trị Hệ thống Linux - Cơ bản CÁC DỊCH VỤ MẠNG Các dịch vụ mạng có thể chạy đồng thời hoặc đơn lẻ như các ứng dụng, chúng làm nhiệm vụ lắng nghe (listen) các kết nối và trực tiếp điều khiển các client hoặc chúng cũng có thể được gọi bởi các tiến trình nền mạng (network daemon) inetd hoặc xinetd. Tiến trình nền inetd (cũ) Tiến trình nền này sẽ được thực hiện tại thời điểm khởi động hệ thống và có nhiệm vụ lắng nghe (listen) các kết nối tại các cổng (port) được xác định trước. Điều này cho phép máy chủ chỉ chạy một tiến trình nền mạng nào đó (network daemon) khi cần thiết. Ví dụ, dịch vụ telnet có một tiến trình nền /usr/sbin/in.telnetd sẽ kiểm soát các tiến trinhd telnet. Để lúc nào cũng chạy tiến trình nền này inetd được chỉ định lắng nghe cổng 23. Chỉ định này được thiết lập trong /etc/inetd.conf. Hình 1: Tiến trình nền inetd 160
  26. Quản trị Hệ thống Linux - Cơ bản Các trường của /etc/inetd.conf chứa các thông tin sau: service-name tên hợp lệ từ /etc/services socket type stream đối với TCP và dgram đối với UDP protocol giao thức hợp lệ từ /etc/protocols flag nowait nếu đa tiến trình (multithreaded) và wait nếu đơn tiến trình (single-threaded) user/group chạy chương trình như user hoặc group program tcpd thông thường argument tên của chương trình chạy đối với dịch vụ này Ví dụ: pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d Chú ý: File /etc/services được sử dụng để tạo sự tương quan giữa tên dịch vụ và số cổng socket. Các trường trong file services là: service-name port/protocol [aliases] Tiến trình nền xinetd Đây là phiên bản mới nhất của inetd. Tiến trình nền tcpd không còn được sử dụng nữa, do đó tất cả mọi thứ đều được thực hiện bởi xinetd. Cấu hình của xinetd được thực hiện qua một file đơn /etc/xinetd.conf hoặc bằng cách soạn thảo các file riêng biệt trong /etc/xinetd.d/ tương ứng với các dịch vụ sẽ được kiểm soát bơit xinetd. Cũng có thể chuyển đổi từ file cấu hình inetd cũ sang các file cấu hình của xinetd hiện thời. 161
  27. Quản trị Hệ thống Linux - Cơ bản Cấu trúc của file service trong xinet.d Service-name { socket_type = stream đối với TCP và dgram đối với UDP protocol = giao thức phù hợp từ /etc/protocols wait = user= người dùng chạy ứng dụng group= nhóm của người dùng chạy ứng dụng server= tên của chương trình chạy của dịch vụ này } TCP wrappers Nếu các chương trình đã được biên dịch với libwrap thì chúng có thể được liệt kê trong /etc/host.allow và /etc/host.deny. Thư viện libwrap sẽ xác định những file nào tương ứng với hosts nào. Định dạng mạng định đối với /etc/hosts.{allow,deny}: DAEMON : hosts [EXCEPT hosts ] [: spawn command] Bạn cũng có thể sử dụng những file này để ghi log các dịch vụ không xác thực (unauthorised services). Đây được xem như sự cảnh báo sớm của hệ thống. Sau đây là một số ví dụ: Truy vấn thông tin về máy chủ (host): 4. /etc/hosts.allow in.telnetd: LOCAL, .my.domain 5. /etc/hosts.deny in.telnetd: ALL : spawn (/usr/sbin/safe_finger –l @%h | mail root) & 162
  28. Quản trị Hệ thống Linux - Cơ bản Chuyển tới một dịch vụ giả (bogus service) 6. /etc/hosts.allow in.telnetd: ALL : twist /dtk/Telnetd.pl Ví dụ cuối cùng nằm trong bộ công cụ mẹo (Deception Tool kit) và có thể download tại địa chỉ sau: Thiết lập NFS Thiết lập phía máy trạm Đối với các máy trạm Linux muốn gán (mount) các file hệ thống từ xa (remote file system): 1. file hệ thống nfs phải được hỗ trợ bởi nhân 2. tiến trình nền portmapper phải đang được chạy. Tiến trình nền portmapper được khởi động bởi script /etc/rc.d/init.d/portmap. Tiện ích mount sẽ gán file hệ thống. Các đầu vào thông thường trong /etc/fstab sẽ là: nfs-server:/shared/dir /mnt/nfs nfs defaults 0 0 Thiết lập phía máy chủ Một máy chủ NFS cần phải chạy portmap trước khi khởi động máy chủ nfs. Máy chủ nfs sẽ được khởi động hoặc dừng với script /etc/rc.d/init.d/nfs. File cấu hình chính là /etc/exports. Ví dụ file /etc/exports: /usr/local/docs *.local.org(rw, no_root_squash) *(ro) Thư mục được kết xuất (export) tới tất cả các máy chủ (host) theo quyền chỉ đọc (read-only) và đọc – ghi (read – write) tới tất cả các máy chủ (host) trọng miền .local.org 163
  29. Quản trị Hệ thống Linux - Cơ bản Tham số lựa chọn mặc định root_squash sẽ ngăn ngừa người dùng root (root user - uid = 0) trên máy khách truy cập vào vùng chia xẻ trên máy chủ và có thể được thay đổi bởi tham số lựa chọn no_root_squash. File /etc/exports sẽ tương ứng với các host như *.machine.com trong khi /etc/hosts.allow/deny tương ứng với các host như .machine.com Nếu file /etc/exports đã được thay đổi thì tiện ích exportfs sẽ được chạy. Nếu các thưc mục tồn tại trong /etc/exports bị thay đổi thì nó có thể cần thiết để tháo (unmount) tất cả các chia sẽ nfs trước khi chúng được gán lại (remount). Các thư mục riêng rẽ có thể được gán hoặc tháo (unmount) với exportfs. Kết xuất và dừng kết xuất (unexporting) tất cả thư mục trong /etc/exports: exportfs -ua ; exportfs –a SMB và NMB Các máy Linux có thể truy cập và cung cấp các nguồn tài nguyên chia xẻ của Window (thư mục và máy in). Giao thức được dùng để làm việc này là MS Windows Server Message Block SMB. Trong Linux công cụ Samba thường được sử dụng để hỗ trợ cho phần mềm khách và chủ. Từ cửa sổ dòng lệnh Tiện ích smbclient được sử dụng để liệt kê tất cả nguồn tài nguyên được chia xẻ. Các thư mục từ xa (remote directories) thông thường được gán với smbmount, tuy nhiên ‘mount –t smbfs’ cũng có thể được sử dụng. Ví dụ: 164
  30. Quản trị Hệ thống Linux - Cơ bản Gửi một thông báo pop up tới một máy tính win98desk smbclient -M win98desk Gán một thư mục chia sẻ của máy chủ winserv smbmount //winserver/shared /mnt/winserver/shared Máy chủ Samba có thể được cấu hình với file /etc/smb.conf và được khởi động hoặc dừng với script /etc/rc.d/init/d/smb. Chú ý smb sẽ cũng khởi động các dịch vụ NBS. Khối thông báo NetBIOS (NetBIOS Message Block) sau đây sẽ cho phép giải tên (name resolution) trong Windows. Hình 1: Nautilus Browsing SMB shares:: Các đầu vào chính trong /etc/smb.conf: [global] workgroup = LINUXIT os level = 2 kernel oplocks = No security = user 165
  31. Quản trị Hệ thống Linux - Cơ bản encrypt passwords = Yes guest account = nobody map to guest = Bad User [homes] comment = Home Directories read only = No create mask = 0640 directory mask = 0750 browseable = No [printers] comment = All Printers path = /var/tmp create mask = 0600 printable = Yes browseable = No Cấu hình SWAT và Webmin GUI Nếu cài đặt gói swat thì bạn có thể quản trị máy chủ samba qua nền web GUI tại cổng 901. Một công cụ quản trị phổ thông khác được sử dụng là webmin. Công cụ này có thể được tải về tại địa chỉ www.webmin.com CHÚ Ý File cấu hình /etc/samba/smb.conf là một nguồn tài liệu tốt. Tất cả các tham số lựa chọn được mô tả và có thể được chuyển thành câu lệnh bằng cách xoá dấu ghi chú ‘;’. Có thể xem trong trang hướng dẫn smb.conf(5). Các dịch vụ DNS • Bộ phân giải địa chỉ (Resolvers) Khi một chương trình cần giải một tên host thì cần sử dụng một cơ chế gọi là bộ giải (resolver). Bộ giải đầu tiên sẽ tra cứu file /etc/nsswitch (trước /etc/host.conf) và xác định phương thức nào sẽ được sử dụng để giải các tên host (local file, name server, NIS hay ldap server). 166
  32. Quản trị Hệ thống Linux - Cơ bản File /etc/host.conf (hoặc /etc/nsswitch.conf): Các file này được quét bởi bộ giải tên để xác định xem đâu là các file, máy chủ dns, cơ sở dữ liệu ldap hoặc máy chủ nis sẽ được tra cứu. Ví dụ (/etc/nsswitch): hosts: files dns nis networks: files Dòng đầu tiên cho thấy các file (ở đây là /etc/hosts) sẽ được truy vấn đầu tiên và sau đó là máy chủ DNS nếu nó bị lỗi. Dòng thứ hai chỉ dẫn sẽ sử dụng file /etc/networking cho thông tin về mạng. File /etc/hosts Với một số nhỏ các máy tính được nối mạng thì có thể chuyển đổi địa chỉ IP thành tên bằng cách sử dụng file /etc/hosts. Các trường có thể là: IP machine machine.domain alias Ví dụ: file /etc/hosts 192.168.1.233 io io.my.domain 61.20.187.42 callisto callisto.physics.edu File /etc/resolv.conf Nếu bộ giải cần sử dụng một máy chủ tên miền (DNS) thì nó sẽ tra cứu danh sách các máy chủ hiện có tại file /etc/resolv.conf • Cấu trúc có cấp bậc Các máy chủ tên (Name servers) đều có một cấu trúc cấp bậc (hierachical structure). Phụ thuộc vào vị trí trong tên miền điều kiện đầy đủ (fully qualified domain name – FQDM) mà một tên miền có thể được gọi là mức top – level, mức thứ hai (second level) hoặc mức thứ ba (third level). Ví dụ đối với các tên miền cấp 1 (top level) 167
  33. Quản trị Hệ thống Linux - Cơ bản com Các tổ chức thương mại edu Các tổ chức giáo dục Mỹ gov Các tổ chức chính phủ Mỹ mil Các tổ chức quân sự Mỹ net Các nhà cung cấp dịch vụ và cổng truy cập org Các trang phi thương mại uk Các trang thuộc về nước Anh • Kiểu của Máy chủ DNS Các tên miền có thể được chia nhỏ hơn thành các tên miền con (subdomain). Điều này sẽ giới hạn tổng số thông tin cần để quản trị trong một miền. Mỗi vùng (Zone) sẽ có một máy chủ tên miền chính (thường gọi là primary DNS) và một hoặc nhiều máy chủ tên miền phụ (thường gọi lại secondary). Việc quản trị máy chủ tên gồm có việc cập nhất thông tin về một vùng cụ thể. Máy chủ chính thường được ra lệnh cho việc xác thực. • File cấu hình DNS Trong phiên bản BIND cũ (trước phiên bản BIND 8) file cấu hình là /etc/named.boot. Với BIND phiên bản 8, file /etc/named.conf được thay thế. Bạn có thể dử dụng tiện ích named-bootconf.pl để chuyển đổi từ file cấu hình cũ sang file cấu hình mới. File /etc/named.boot: directory /var/named cache . named.ca primary myco.org named.myco primary 0.0.127.in-addr.arp named.local primary 1.168.192.in-addr.arp named.rev Dòng đầu tiên định nghĩa thư mục cơ sở được sử dụng. File name.ca sẽ chứa danh sách các địa chỉ IP DNS cho việc truy vấn các địa chỉ mở rộng. Dòng thứ ba là tham số lựa chọn và chứa các bản ghi cho mạng nội bộ. Hai tham số tiếp theo được sử dụng cho tìm kiếm ngược lại (reverse lookup). 168
  34. Quản trị Hệ thống Linux - Cơ bản Trong /etc/named.conf cache được thay thế bởi hint secondary được thay thế bởi slave primary được thay thế bởi master. Áp dụng các thay đổi này đối với file cấu hình BIND4 sẽ sinh ra các file cấu hình BIND8 và BIND9 như sau. File /etc/named.conf: options { directory “/var/named”; }; zone “.” { type hint; file “named.ca”; }; zone “myco.org” { type master; file “named.myco”; }; zone “1.168.192.in-addr.arp” { type master; file “named.rev”; }; zone “0.0.127.in-addr.arpa” { type master; file “named.local”; }; 169
  35. Quản trị Hệ thống Linux - Cơ bản • File vùng DNS Trong ví dụ này máy chủ được thiết lập như một máy chủ chỉ bẫy (catching-only server). Tất cả các file vùng (zone file) đều chữa các bản ghi tài nguyên. Ví dụ file named.local zone file: @ IN SOA localhost. root.localhost. ( 2001022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS localhost. 1 IN PTR localhost. Đây là một file vùng rất đơn giản nhưng nó cung cấp đầy đủ các thông tin để giúp ta hiểu được cơ chế cơ bản của một máy chủ tên. Ký hiệu @ sẽ giải (tham chiếu) tới một vùng liên quan được khai báo trong /etc/named.conf. Điều này cho phép bất kỳ file vùng nào cũng có thể sử dụng như là một template cho các vùng khác (xem bài tập). Bảng 1: Kiểu bản ghi thông thường NS Xác định các vùng của máy chủ tên miền chính PTR Tham chiếu ngược địa chỉ IP tới tên máy host MX Bản ghi thư điện tử Mail Exchange A Tương ứng một địa chỉ IP với một máy host CNAME Tương ứng một tên gán (alias) với một tên chính của máy host Bảng 2: Các tham số vùng 170
  36. Quản trị Hệ thống Linux - Cơ bản @ IN SOA Start Of Authority. Xác định một vùng được cho phép bởi các tham số lựa chọn nằm trong dấu ngoặc kép serial Giá trị được tăng bằng tay khi dữ liệu thay đổi. Các máy chủ phụ (secondary servers) sẽ truy vấn số hiệu (serial number) của máy chủ chính. Nếu nó thay đổi, toàn bộ file vùng sẽ được tải về (downloaded) refresh Thời gian được tính bằng giây trước khi máy chủ phụ truy vấn bản ghi SOA của tên miền chính (primary domain). Giá trị của nó nhỏ nhất là một ngày. retry Khoảng thời gian tính bằng giây trước khi một vùng mới được chuyển (transfer) nếu việc download trước đó lỗi. expire Thời gian sau khi máy chủ phụ loại bỏ tẩt cả dữ liệu vùng nếu nó liên hệ với máy chủ chính. Giá thị của tham số này thông thường ít nhất là 1 tuần minimum đây là ttl đối với các dữ liệu đã được cached. Giá trị mặc định là 1 ngày (86400 giây) nhưng cũng có thể lâu hơn đối với các mạng LAN ổn định • Cấu hình Sendmail Sendmail là dịch vụ chuyển mail (MTA) phổ biến nhất trên internet. Nó sử dụng giao thức Simple Mail Transfer Protocol (SMTP) và chạy như một tiến trình nền lắng nghe các kết nối tại cổng 25. Script Sendmail được dùng để dừng hoặc chạy tiến trình nền sendmail thông thường được đặt tại thư mục /etc/rc.d/init.d/. Cấu hình chính của file là /etc/mail/sendmail.cf (hoặc /etc/sendmail.cf) Tại đây bạn có thể xác định tên của máy chủ cũng như tên của các host mà từ đó và ở đó mail relay được cho phép. File /etc/aliases chứa hai trường sau đây: alias: user Khi chuyển tới /etc/aliases, câu lệnh newaliases phải được chạy để rebuild cơ sở dữ liệu /etc/aliases.db. 171
  37. Quản trị Hệ thống Linux - Cơ bản Khi thư được máy chủ chấp nhận, nó sẽ được móc vào một file đơn với tên do người dùng đặt. Các file này được lưu trữ tại /var/spool/mail. Phụ thuộc vào Mail User Agent được sử dụng, người dùng có thể lưu trữ các thông điệp (message) trong thư mục gốc của mình hoặc có thể download chúng về một máy khác. Nếu máy chủ đang chuyển tiếp (relaying), hoặc nếu mạng chậm và nhiều message đang được chuyển, thư sẽ được lưu trữ trong hàng đợi thư /var/spool/mqueue. Bạn có thể truy vấn với tiện ích mailq hoặc sendmail –bp. Quản trị mạng có thể flush hàng đợi của máy chủ với câu lệnh sendmail –q. Cuối cùng, để đăng ký một tên miền như một địa chỉ email hợp lệ, một bản ghi MX cần được thêm vào trong cơ sở dữ liệu DNS. Ví dụ nếu mail.company.com là một máy chủ mail, để nó chấp nhận mail như joe@company.com thì bạn sẽ phải cấu hình như sau 1. Thêm company.com vào /etc/mail/local-host-names 2. company.com MX 10 mail.company.com trong một file vùng DNS Máy chủ Apaches • File cấu hình File /etc/httpd/conf/httpd.conf chứa tất cả các tham số thiết lập cấu hình Các phiên bản trước của apache có thêm hai file ngoài, một là access.conf trong đó sẽ giới hạn các thư mục đã được khai báo và một file khác là srm.conf xác định thư mục gốc (roôt) của máy chủ. Các cấu hình cần chú ý: ServerType standalone/inetd ServerRoot “/etc/httpd” DocumentRoot “/var/www/html” AllowOverride None Options ExecCGI Order allow,deny Allow from all 172
  38. Quản trị Hệ thống Linux - Cơ bản DocumentRoot “/www/docs/server1” ServerName virtual.mydomain.org • Chạy Apache Để chạy và dừng máy chủ, đầu tiên bạn có thể sử dụng script /etc/rc.d/init.d/httpd. Trên một máy chủ bận (busy server) thì nên sử dụng apachectl đặc biệt với lựa chọn graceful sẽ khởi động lại máy chủ chi khi các kết nối hiện tại đã được thoả thuận. Các file nhật ký chính được lưu trong /var/log/httpd/. Các file này có thể rất hữu ích trong các lý do an ninh. Thông thường chúng ta kiểm tra file error_log và access_log. 173
  39. Quản trị Hệ thống Linux - Cơ bản Thực hành Cài đặt một máy chủ DNS chính Như là một bài tập, chúng ta sẽ cài đặt gói BIN9 rpm bind9-9.1.3-252.i386.rpm và cấu hình một domain có tên là gogo.com. 1. Tiến hành lần lượt các bước sau trong /etc/named.conf: Copy/Paste các đoạn sau và sửa lại như sau 2. Trong /var/named: cp 127.0.0.zone 192.168.2.zone cp local.zone gogo.zone 3. Thay đổi các trường tương ứng trong file vùng mới (zone file). Thêm một host có tên là harissa. 4. Thêm dòng “nameserver 127.0.0.1” vào /etc/resolv.conf. 5. Sử dụng host để giải harissa.gogo.com Quản trị Apache Các cấu hình cơ bản trong file /etc/httpd/conf/httpd.conf 1. Thay đổi Port từ 80 thành 8080. 2. Kiểm tra rằng apache trả lời với câu lệnh telnet localhost 8080. Bạn sẽ nhận được: Trying 127.0.0.1 Connected to localhost.linuxit.org. 174
  40. Quản trị Hệ thống Linux - Cơ bản Escape character is '^]'. Tiếp theo gõ ‘GET /’ để download file index . 3. Thiết lập “StartServer” thành 15. Khởi động lại httpd và kiểm tra rằng 15 tiến trùnh sẽ được chạy (thay vì 8 tiến trình như mặc định) IP based virtual server Card mạng ethernet của bạn phải định danh tới một địa chỉ IP mới (gọi là new- IP) ifconfig eth0:0 new-IP Thêm các đoạn sau đây vào /etc/httpd/conf/httpd.conf: DocumentRoot /var/www/html/virtual ServerName www1 Cài đặt một thư mục chia xẻ SMB (shared SMB directory) Trong hầu hết các trường hợp bạn sẽ không cần thêm người dùng smb (smbusers) vào hệ thống. Đơn giản chỉ cần soạn thảo file smb.conf và thêm như sau: [public] comment = Example Shared Directory path = /home/samba guest ok = yes writeable = yes Cài đặt một máy in chia sẻ: [global] snip printcap name = /etc/printcap load printers = yes [printers] comment = All Printers path = /var/spool/samba browseable = no # Set public = yes to allow user 'guest account' to print 175
  41. Quản trị Hệ thống Linux - Cơ bản guest ok = yes writable = no printable = yes 176
  42. Quản trị Hệ thống Linux - Cơ bản BASH SCRIPTING Môi trường bash Biến Khi bạn gõ câu lệnh tại dấu nhắc của chương trình bash shell thì nó sẽ sử dụng biến PATH để tìm xem bảng thực hiện (executable) nào trong hệ thống mà bạn cần chạy. Bạn có thể kiểm tra giá trị của biến path bằng cách sử dụng lệnh echo: echo $PATH /usr/bin:/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/sbin/:/usr/loca l/sbin/ Thực tế, có rất nhiều biến cần thiết đối với shell để cung cấp đối với mỗi môi trường người dùng. Ví dụ các biên PWD, HOME, TERM và DISPLAY. Cú pháp để khởi tạo và khai báo một biến như sau: VARIABLE=VALUE Chú ý rằng không được đặt bất kỳ dấu cách nào xung quanh dấu ‘=’. Khi một biến được khai báo và khởi tạo, nó sẽ có thể được tham chiếu bằng cách sử dụng ký tự dolla đằng trước như ví dụ sau đây: echo $VARIABLE Khi một phiên shell được bắt đầu, một số các tệp cấu hình được đọc và hầu hết các biến được thiết lập. Để giải phóng một biến khỏi giá trị hiện thời, sử dụng unset. Các file cấu hình 177
  43. Quản trị Hệ thống Linux - Cơ bản Đầu tiên có thể phân biệt các file cấu hình xem file nào sẽ được đọc đối với mỗi phiên bash mới. File cấu hình Login: Các file được đọc khi login là /etc/profile và ~/.bash_profile (bash sẽ tìm một số file khác như ~/.profile). Tiếp theo bash sẽ đọc các file điều khiển thời gian của nó ~/.bashrc và (nếu tồn tại) /etc/bashrc. Các File bashrc: Các file này được đọc mỗi lần khi một phiên shell được khởi chạy (ví dụ một xterm mới). Các file này là /etc/bashrc và ~/.bashrc. Các định danh (alias) và các function có thể được ghi trong ~/.bashrc Cú pháp Function: function-name () { command1; command2; } Bạn có thể kiểm tra xem những file nào sẽ được đọc bằng cách thêm một dòng echo Profile trong /etc/profile, kiểu: bash Không profile nào được đọc, bạn không thấy gì hết bash -login Sẽ bắt bash đóng vai trò như một login bash, từ Profile sẽ được hiển thị. Các câu lệnh sau đây sẽ điều khiển cách thức mà bash bắt đầu: bash -norc bash -noprofile 178
  44. Quản trị Hệ thống Linux - Cơ bản Chú ý bất kỳ phiên bash mới nào cũng sẽ kế thừa các biến của cha đã được khai báo trong /etc/profile và ~/.bash_profile. Các yếu tố Scripting File script Script shell là một danh sách các chỉ dẫn được lưu trữ trong một tệp phẳng (flat file). Chỉ có hai chỉ dẫn sau là cần thiết. 1. Dòng đầu tiên của script phải là #!/bin/bash (đối với script bash) 2. File phải có có thể đọc và chạy được (ví dụ đối với quyền 755) Nếu các dòng này không hiện hữu thì cũng có thể chạy chương trình script bằng cácg gõ: bash program-name Truyền biến vào script (Passing variables to the script) Các biến được tạo tại các dòng lệnh được tham chiếu bên trong script như $1 đối với đối số đầu tiên, $2 cho đối số thứ hai, vv Ví dụ script, mycat: #!/bin/bash cat $1 Script này đòi hỏi một đối số là một file và sẽ hiển thị nội dung của file bằng cách sử dụng cat. Để chạy script này trong file lilo.conf, bạn sẽ chạy: ./mycat /etc/lilo.conf 179
  45. Quản trị Hệ thống Linux - Cơ bản Một cách khác để chuyển các biến vào script là đặt dấu nhắc script để cho người dùng nhập đầu vào. Cách này có thể thực hiện bằng cách sử dụng câu lệnh read. Tên mặc định của biến được đọc là REPLY. Sau đây là một script đã được thay đổi: Chuyển biến tương tác: #!/bin/bash echo -n "Which file shall I display ?" read cat $REPLY hoặc read -p “File to display: “ FILENAME cat $FILENAME Các biến đặc biệt Các biến đặc biệt chỉ có thể được tham chiếu và được tự động thiết lập bởi bash. Sau đây là một số biến đặc biệt thông dụng nhất: $* Liệt kê tất các các biến được nhập tại dòng lệnh $# Số lượng các đối số đợc nhập tại dòng lệnh $0 Tên của script $! PID của câu lệnh nền gần nhất $$ PID của shell hiện tại $? Mã thoát của dòng lệnh cuối cùng Đối với các tham số vị trí $1, $2 vv phép toán dịch chuyển shift sẽ đặt lại tên mỗi tham số một cách tuần hoàn theo cách sau. $2 sẽ thành $1 $3 sẽ thành $2 vv Có thể tổng quát lại như sau $(n+1) Æ $n 180
  46. Quản trị Hệ thống Linux - Cơ bản Tính toán logic Các biểu thức logic được ước lượng với câu lệnh test hoặc dấu [ ]. Trong cả hai trường hợp này, kết quả đều được lưu trữ trong biến $? như: if biểu thức true then $? là 0 if biểu thức false then $? Không là 0 Sau đây là một số ví dụ minh hoạ: sử dụng test Sử dụng [ ] giải nghĩa Test –f /bin/bash [ -f /bin/bash ] test nếu /bin/bash là một file test -x /etc/passwd [ -x /bin/passwd ] test nếu /etc/passwd là một tệp thi hành Cũng có thể ước lượng nhiều hơn một biều thức tại cùng một thời điểm bằng cách sử dụng các phép toán logic || (OR) và && (AND) trong một dòng lệnh. Ví dụ chúng ta có thể test nếu /bin/bash là một tệp thực thi và tồn tại trong /etc/inittab: test -x /bin/bash && test /etc/inittab [ -e /bin/kbash ] || [ -f /etc/passwd ] Cũng tương tự như vậy khi sử dụng cờ -o and -a trong phép toán test test -x /bin/bash -a -f /etc/inittab [ -e /bin/kbash -o -f /etc/passwd ] 181
  47. Quản trị Hệ thống Linux - Cơ bản Vòng lặp if then loop Cú pháp: if CONDITION ; then command1 command2 fi #!/bin/bash if [ -x /bin/bash ] ; then echo “The file /bin/bash is executable” fi 182
  48. Quản trị Hệ thống Linux - Cơ bản if then else Cú pháp: if CONDITION ; then command1 command2 else command3 fi vòng lặp while Cú pháp: while CONDITION is true; do command done Ví dụ: Aligne 10 hashes (#) then exit #!/bin/bash COUNTER=0 while [ $COUNTER -lt 100 ]; do echo -n "#" sleep 1 let COUNTER=COUNTER+1 done Vòng lặp Until Cú pháp: until CONDITION is false; do command done Ví dụ: Giống như trên, kiểu C tăng đối với mỗi COUNTER #!/bin/bash COUNTER=20 until [ $COUNTER -lt 10 ]; do echo -n "#" sleep 1 183
  49. Quản trị Hệ thống Linux - Cơ bản let COUNTER-=1 done Vòng lặp for Cú pháp for VARIABLE in SET; do command done Ví dụ: tập 'SET' có thể là các dòng của một file #!/bin/bash for line in `cat /etc/lilo.conf`; do IMAGE=$(echo $line | grep image) if [ “$IMAGE” != “” ]; then echo Kernel configured to boot: $line fi done Nhập dữ liệu từ dòng lệnh Giả sử rằng script đợi người dùng nhập giá trị đầu vào, phụ thuộc vào kết quả trả lời, phần còn lại của chương trình sẽ thực hiện một số việc một cách phù hợp. Có hai cách để thực hiện điều này là: select và case. Sử dụng case Cú pháp: case $VARIABLE in CHOICE command ;; CHOICE command ;; esac Sử dụng select Cú pháp: select VARIABLE in SET; do if [ $VARIABLE = CHOICE ]; then command fi if [ $VARIABLE = CHOICE ]; then 184
  50. Quản trị Hệ thống Linux - Cơ bản command fi done Làm việc với số Trong khi các xử lý các chuỗi ký tự một cách liền mạch, một có gắng nhỏ khác là thực hiện một số phép toán số học hết sức cơ bản. Các phép toán nhị phân Cộng hoặc nhân các số có thể được thực hiện bằng các sử dụng cả biểu thức expr hoặc cấu trúc $(( ))s. Ví dụ: expr 7 + 3; expr 2 \* 10; expr 40 / 4; expr 30 – 11 $((7+3)); $((2*10)); $((40/4)); $((30-11)) Các giá trị so sánh Các phép toán kiểm tra: Số Xâu -lt -le = -eq = -ne != Thực hành 1. Trên dòng lệnh xuất biến TEST 185
  51. Quản trị Hệ thống Linux - Cơ bản export TEST=old 2. Viết một script #!/bin/bash echo old variable: $TEST export $TEST=new echo exported variable: $TEST 3. Giá trị của $TEST là gì khi script được chạy? 4. Trong script sau gọi test_shell sẽ in PID của shell test_shell #!/bin/bash if [ -n $(echo $0 |grep test) ]; then echo The PID of the interpreter is: $$ else echo The PID of the interpreter is: $$ fi 5) Thiết lập quyền 755 và kiểm tra các câu lệnh sau test_shell ./test_shell bash test_shell . test_shell source test_shell exec ./test_shell 186
  52. Quản trị Hệ thống Linux - Cơ bản BẢO MẬT Bảo mật địa phương The BIOS Nếu một người nào đấy tìm cách truy nhập các đĩa đã được bảo mật hoặc một đĩa linux bằng cách khởi động từ đĩa mềm hoặc CD ROM thì sẽ rất dễ dàng có thể đọc và truy cập tới bầy kỳ file nào của hệ thống. Để tránh được điều này BIOS sẽ được thiết lập để thiết lập chỉ cho phép khởi động từ đĩa cứng. Khi điều này được thực hiện thành công nó sẽ thiết lập một mật khẩu trong BIOS. LILO LILO có thể đưa ra các tham số lựa chọn khi khởi động. Thông thường một số hệ điều hành Linux sẽ không hỏi mật khâu khi khởi động hệ thống trong chế độ single user hoặc mức thực thi runlevel 1. Có hai tham số lựa chọn sẽ được thêm vào trong /etc/lilo.conf: Tham số restricted sẽ nhắc người dùng nhập mật khẩu Tham số password="", thiết lập xâu mật khẩu Cấm có nghĩa là LILO không thể đưa ra bất kỳ tham biến nào khi "password" không xác định trong lilo.conf. Boot=/dev/had install=/boot/boot.b Prompt timeout=50 Password="password" restricted Quyền truy cập file Để bảo vệ khỏi những tấn công phá huỷ file. Đề xuất thực hiện các bước sau. 187
  53. Quản trị Hệ thống Linux - Cơ bản 1) Tạo các công cụ hệ thống không thể thay đổi được, hoặc các file nhật ký chỉ thêm vào cuối (append-only): chattr +i /bin/login chattr +i /bin/ps chattr +a /var/log/messages 2) Tạo thư mục /tmp và /home nosuid hoặc noexec: Lines to be changed in /etc/fstab /tmp /tmp ext2 nosuid 1 2 /home /home ext2 noexec 1 2 3) Tìm tất cả file trong hệ thống không thuộc về một người dùng hoặc nhóm người dùng nào đó: find / -nouser –o –nogroup find / -perm +4000 File nhật ký (Log file) Các file log chính là /var/log/messages : chứa các thông tin đăng nhập bởi chương trình nền syslogd /var/log/secure. : chứa thông tin những lần đăng nhập không thành công, thông tin về thêm người sử dụng, vv Công cụ last sẽ liệt kê tất cả những lần đăng nhập và khởi động hệ thống thành công. Các thông tin được đọc từ file /var/log/wtmp. Công cụ who và w liệt kê tất cả người dùng hiện tại đang đăng nhập vào hệ thống bằng cácg sử dụng file /var/run/utmp. Giới hạn người dùng 188
  54. Quản trị Hệ thống Linux - Cơ bản Khi file /etc/nologin tồn tại (có thể rỗng) thì nó sẽ bảo vệ tất cả người dùng từ khi đăng nhập vào hệ thống (ngoại trừ người dùng root). Nếu file nologin chứa một thông báo thì nó sẽ được hiển thị sau khi việc xác thực người dùng thành công. Thư mục /etc/security/ sẽ là một tập các file mà cho phép người quản trị giới hạn thời gian CPU người dùng, độ lớn tối đa file, số lượng kết nối tối đa, vv /etc/security/access.conf : không cho phép đăng nhập đối với các nhóm và người dùng từ một vị trí xác định. /etc/security/limits.conf Định dạng của file này là domain tên người dùng, tên nhóm (với @group) type cứng hoặc mềm (hard or soft) item core - giới hạn kích thước lõi của file (KB) data - kích thước dữ liệu tối đa (KB) fsize - kích thước tối đa của file (KB) memlock - không gian địa chỉ khoá bộ nhớ (locked-in-memory) tối đa (KB) nofile - số lượng tối đa file được mở cpu - thời gian CPU lớn nhất (MIN) proc - số lượng tối đa các tiến trình as - giới hạn không gian địa chỉ maxlogins - số lượng tối đa các đăng nhập đồng thời của người dùng này priority - - độ ưu tiên để chạy tiến trình người dùng locks - số lượng tối đa khoá file mà người dùng có thể 189
  55. Quản trị Hệ thống Linux - Cơ bản An ninh mạng Bảo mật mạng có thể được chia ra thành hai mục chính như sau: Bảo mật theo máy chủ (Host Based Security) Quyền truy cập vào các nguồn tài nguyên có thể được cho phép dựa vào yêu cầu dịch vụ của Host. Điều này được thực hiện bởi tcp_wrappers. Thư viện libwrap cũng đóng vai trò như tcp_wrappers cung cấp danh sách truy cập kiểm soát host đối với các dịch vụ mạng khác nhau. Một số dịch vụ như xinetd, sshd, và portmap, được biên dịch dựa vào thư viện libwrap do đó có kích hoạt tcp_wrapper hỗ trợ cho các dịch vụ này. Khi một client kết nối tới một dịch vụ với hỗ trợ tcp_wrapper, file /etc/hosts.allow và /etc/hosts.deny được phân tích (parse) để kích thích yêu cầu dịch vụ host. Dựa vào kết quả mà dịch vụ có thể được cho phép hoặc không. File hosts_access có 2 hoặc 3 (lựa chọn) dấu hai chấm ngăn cách các trường. Trường đầu tiên là tên của tiến trình, tiếp theo là tên host hoặc domain bị hạn chế hoàn toàn với một “dấu chấm đầu” ("leading dot"), địa chỉ IP hoặc subnet với dấu chấm sau. Các từ đại diện như ALL và EXCEPT cũng được chấp nhận. Cú pháp của file /etc/hosts.{allow | deny} như sau: service : hosts [EXCEPT] hosts Ví dụ: /etc/hosts.deny ALL: ALL EXCEPT .example.com /etc/hosts.allow ALL: LOCAL 192.168.0. in.ftpd: ALL sshd: .example.com Tcp_wrappers có thể chạy một lệnh cục bộ dựa vao host tương ứng với các file host_access. 190
  56. Quản trị Hệ thống Linux - Cơ bản Công việc được hoàn thành với lệnh spawn. Bằng cách sử dụng ký tự %, việc thay thế có thể được sử dụng đối với tên của host và tên dịch vụ. Ví dụ: /etc/hosts.deny ALL: ALL : spawn (/bin/echo `date` from %c for %d >> /var/log/tcpwrap.log) Để biết thêm các thông tin về ký tự thay thế %, xem trang trợ giúp host_access (5) bằng lệnh man. Bảo mật theo cổng (Port Based Security) Với chức năng lọc gói tin trong nhân của Linux, có thể giới hạn truy cập tới nguồn tài nguyên bằng cách tạo ra tập luật với các tiện ích như ipchains và iptables, sẽ cho phép xác định một gói tin khi đi qua hoặc giao diện mạng của nó và cũng chỉ ra điều gì sẽ diễn ra đối với gói tin này. Có ba chuỗi trong ipchains và iptables, đó là input, forward và output cho ipchains INPUT, FORWARD, và OUTPUT cho iptables. Ví dụ, khi sử dụng ipchains tất cả gói tin đi vào một giao diện mạng sẽ đi qua chuỗi input. Tất cả các gói tin không có địch là host này sẽ đia qua chuỗi forward. Tất cả các gói tin được sinh ra bởi host và các gói tin chuyển tiếp sẽ đi qua chuỗi output. Luật ipchains và iptables có thể xác định các thông tin như nguồn source (s), đích (d), giao thức (p), và cổng. 191
  57. Quản trị Hệ thống Linux - Cơ bản Ví dụ: Tất cả các gói tin từ địa chỉ 192.168.0.254 sẽ bị cấm ipchains -A input -s 192.168.0.254 -j DENY Các luật Ipchains và iptables có thể được thực thi theo các thông số lựa chọn sau -A Thêm vào cuối (Append) -D Xoá (Delete) -P Thay đối chính sách mặc định đối với một chuỗi (chain) -I Chèn (Insert) -F In các luật ra một chuỗi (Flush the rules(s) in a chain) -N Tạo một chuỗi được người dùng định nghĩa -X Xoá chuõi do người dùng định nghĩa -L Liệt kê Ví dụ: Chính sách mặc định đối với một iptable có thể bị thay đổi từ ACCEPT thành DENY như sau: iptables -P INPUT REJECT iptables -P FORWARD REJECT iptables –P OUTPUT REJECT Trong dự án phát triển nhân Linux 2.4 và dự án Netfilter cũng sử dụng tiện ích bảng iptables để quản lý các luật firewall. Điểm khác biệt lớn nhất giữa iptable và ipchain là iptables hỗ trợ cho việc đánh giá các gói tin dựa trên trạng thái của chúng dựa theo các gói tin khác đã được truyền qua nhân. Dưới đây là một ví dụ minh hoạ tường lửa theo trạng thái gói tin được thực hiện. Nó là một đoạn script shell gòm một số dòng lệnh. Ví dụ: 192
  58. Quản trị Hệ thống Linux - Cơ bản Một đoạn script cơ bản phù hợp với người dùng gia đình (home user) hoặc không có nhu cầu kết nối internet nhưng vẫn sử dụng gateway cho mạng LAN và cho phép các kết nối từ mạng LAN tới tất các dịch vụ. Chú ý: Dòng bôi đậm dưới đây chỉ cho phép kết nối tại cổng 80 #!/bin/sh # Variables IPTABLES="/sbin/iptables" LAN_IFACE="eth0" INET_IFACE="eth1" INET_IP="1.2.3.4" LOCALHOST_IP="127.0.0.1/32" LAN_IP="192.168.0.1/32" LAN_BCAST="192.168.0.0/24" # Setup IP Masquerading echo "1" > /proc/sys/net/ipv4/ip_forward $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE # Specify the default policy for the built in chains $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT DROP # Specify INPUT Rules $IPTABLES -A INPUT -i !$INET_IFACE -j ACCEPT $IPTABLES -A INPUT -p TCP -i $INET_IFACE -m state state NEW dport http -j ACCEPT $IPTABLES -A INPUT -m state state ESTABLISHED,RELATED -j ACCEPT # Specify FORWARD Rules $IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT 193
  59. Quản trị Hệ thống Linux - Cơ bản $IPTABLES -A FORWARD -m state state ESTABLISHED,RELATED -j ACCEPT # Specify OUTPUT RULES $IPTABLES -A OUTPUT -p ALL -s $LOCALHOST_IP -j ACCEPT $IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT Shell an toàn • Xác thực Host Với ssh thì cả host và người dùng được xác thực. Xác thực host được hoàn thành bằng cách sử dụng các khoá đảo (swapping key). Khoá công khai và khoá riêng của host thông thường được lưu trữ trong /etc/ssh nếu bạn sử dụng OpenSSH. Phụ thuộc vào giao thức được sử dụng mà file khoá host sẽ được gọi ssh_host_key đối với Giao thức 1 và ssh_host_rsa_key hoặc ssh_host_dsa_key đối với giao thức 2. Mỗi khoá này có một khoá công cộng tương ứng, ví dụ ssh_host_key.pub. Khi một ssh client kết nối tới một server thì server sẽ cung cấp một khoá host công khai. Đoạn ví dụ dưới đây người dùng sẽ được thông báo một số thông số như sau: The authenticity of host 'neptune (10.0.0.8)' can't be established. RSA key fingerprint is 8f:29:c2:b8:b5:b2:e3:e7:ec:89:80:b3:db:42:07:f4. Are you sure you want to continue connecting (yes/no)? Nếu bạn đồng ý tiếp tục kết nối thì kháo công khai của server sẽ được thêm vào trong file $HOME/.ssh/known_hosts. • Xác thực người dùng (sử dụng password) Tiếp theo người dùng sẽ được hệ thống nhắc nhập mật khẩu tương ứng với account của mình để đăng nhập vào server từ xa. • Xác thực người dùng (sử dụng khoá) 194
  60. Quản trị Hệ thống Linux - Cơ bản Xác thực người dùng cũng có thể đòi hỏi các khoá đảo (swapping key). Để thực hiện điều này người dùng sẽ cần phải sinh ra một cặp khoá riêng / công khai. Ví dụ: ssh-keygen -t dsa -b 1024 sẽ sinh một lhjoá DSA 1024 bit. Mặc định các khoá này sẽ được ghi trong $HOME/.ssh và trong ví dụ này được gọi là id_dsa và id_dsa.pub. Giả sử rằng chúng ta có một id_dsa.pub ta có thể ‘thành lập’ khoá này với một tài khoản từ xa và tránh được việc phải nhập mật khẩu đối với các kết nối sau này. Để thực hiện được việc này, ta cần phải copy nội dung của file id_dsa.pub vào một file có tên là authorized_keys2 được lưu trữ trong thư mục từ xa $HOME/.ssh. CHÚ Ý Tất cả khoá công khai trong /etc/ssh and ~/.ssh sẽ có quyền là 600 ● File cấu hình sshd Ví dụ file /etc/ssh/sshd_config: #Port 22 #Protocol 2,1 #ListenAddress 0.0.0.0 #ListenAddress :: # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key ● File cấu hình ssh configuration File ví dụ /etc/ssh/ssh_config or $HOME/.ssh/config: 195
  61. Quản trị Hệ thống Linux - Cơ bản # Host * # ForwardX11 no # RhostsAuthentication no # RhostsRSAAuthentication no # RSAAuthentication yes # PasswordAuthentication yes # HostbasedAuthentication no # CheckHostIP yes # IdentityFile ~/.ssh/identity # IdentityFile ~/.ssh/id_rsa # IdentityFile ~/.ssh/id_dsa # Port 22 # Protocol 2,1 # Cipher 3des Cấu hình thời gian Ngày hệ thống Ngày hệ thống có thể thay đổi với câu lệnh date. Cú pháp là: date MMDDhhmmCCYY[.ss] Đồng hồ phần cứng (Harware Clock) Đồng hồ phần cứng có thể được thay đổi trực tiếp với tiện ích hwclock. Các tham số lựa chọn chính là: -r hoặc –-show hiển thị thời gian hiện tại -w hoặc –-systohc thiết lập đồng hồ phần cứng thành thời gian hệ thống hiện tại -s hoặc –-hctosys thiết lập thời gian hệ thống với thời gian của đồng hồ phần cứng hiện tại Sử dụng NTP Toạ độ thời gian toàn cầu Coordinated Universal Time (UTC) là một tiêu chuẩn được sử dụng để giữ thời gian chuẩn dựa vào sự quay tròn của trái đất xung 196
  62. Quản trị Hệ thống Linux - Cơ bản quanh trục của mình. Tuy nhiên do có sự sai số nhỏ bất qui tắc khi chuyển động quay tròn nên quảng nhảy của giây cần được thêm vào thang độ UTC bằng cách sử dụng các đồng hồ nguyên tử. Do máy tính không được trang bị các đồng hồ nguyên tử, ý tưởng sử dụng một giao thức để đồng bộ các đồng hồ máy tính qua internet. NTP - Network Time Protocol là một giao thức như vậy. Các máy tính được cập nhật một cách trực tiếp bởi đồng hồ nguyên tử được gọi là thời gian chính (primary time) và được sử dụng để cập nhật một số lượng lớn máy chủ thời gian phụ khác. Điều này tạo nên một cấu trúc cây giống với cấu trúc DNS. Máy chủ gốc (root server) ở mức (tầng) đầu tiên, máy chủ thứ yếu sẽ ở mức thứ hai và tương tự như vậy với các mức thấp hơn. Cấu hình một client truy vấn một máy chủ NTP: Một tiến trình nền gọi là ntpd được sử dụng để truy vấn tới một máy chủ thời gian từ xa. Tham số cần thiết là server trong tệp /etc/ntp.conf trỏ đến một máy chủ NTP công cộng hoặc liên kết. Các máy chủ này có thể tìm thấy trực tuyến trên mạng. Giao thức NTP cũng có thể ước lượng các lỗi về tần số của đồng hồ phần cứng qua một chuỗi các truy vấn, ước lượng này được ghi vào một fuke được tham chiếu với thẻ driftfile. Mininal /etc/ntp.conf file server ntp2.somewhere.com driftfile /var/lib/ntp/drift Khi ntpd được bắt đầu nó sẽ tự trở thành một máy chủ NTP cung cấp các dịch vụ tại cổng 123 bằng cách sử dụng UDP. One off queries: Gói ntp cũng hỗ trợ công cụ ntpdate được sử dụng để thiết lập thời gian qua một dòng lệnh: ntpdate ntp2.somewhere.com 197
  63. Quản trị Hệ thống Linux - Cơ bản Bảo mật nhân Có một số lựa chọn trong nhân Linux. Bao gồm cơ chế đồng bộ cookie syn_cookie. Tràn ngăn xếp bộ nhớ (Stack overflow) được kiểm soát bởi một miếng vá bảo mật gọi là tường mở (openwall) hoặc OWL. ● tcp_syncookies Để kích hoạt lựa chọn này bạn chỉ cần thực hiện như sau: [root@nasaspc /proc]#echo "1" > /proc/sys/net/ipv4/tcp_syncookies Dòng lệnh này sẽ chỉ thị cho nhân gửi một cookie tới client trong tín hiệu trả lời SYN+ACK của nó. Trong chế độ này, máy chủ sẽ đóng socket và đợi tín hiệu ACK của client với một cookie tương ứng. Nếu file tcp_syncookies không tồn tại trong thư mục /proc thì bạn cần phải dịch lại nhân với lựa chọn hỗ trợ syncookies. Chú ý: Mặc định, thậm chí nếu syncookies đã được hỗ trợ bởi nhân thì bạn cần phải kích hoạt hỗ trợ bằng cách thêm "1" vào /proc/sys/net/ipv4/tcp_syncookies. Điều này thường được thực hiện trong /etc/rc.d/rc.local. Tuy nhiên có một giải pháp khác hiệu quả hơn là thêm một đầu vào (entry) vào /etc/sysctl.conf ● Miếng vá bảo mật owl (phần này không phải là đối tượng trình bày của tài liệu này) Miếng vá này quan tâm đến hầu hết các vấn đề liên quan đến ngăn xếp bộ nhớ và nó không nằm trong phạm vi của khoá học này. Địa chỉ miếng vá owl và nhân Linux: 198
  64. Quản trị Hệ thống Linux - Cơ bản Miếng vá này chỉ hỗ trợ cho nhân 2.2-19 hoặc phiên bản tiếp theo. Sau khi download linux-2.2.19.tar.gz và linux-2.2.19-ow1.tar.gz vào thư mục /usr/src/, chắc chắn là bạn đã xoá linux symbolic link. [root@nasaspc src]#pwd /usr/src/ [root@nasaspc src]#rm -rf linux Giải nén các gói. [root@nasaspc src]#tar xvzf linux-2.2.19.tar.gz [root@nasaspc src]#tar xvzf linux-2.2.19-owl.tar.gz Để kiểm tra hệ thống, chuyển tới thư mục linux-2.2-19-owl. Có một thư mục được gọi là lựa chọn chứa file có tên là stacktest.c. [root@nasaspc optional]#pwd /usr/src/linux-2.2.19-ow1/optional [root@nasaspc optional]#gcc stacktest.c -o stacktest Nếu bạn chạy stacktest thì sẽ thu được danh sách các lựa chọn. Chạy mô phỏng tràn bộ nhớ. Một tấn công tràn bộ nhớ đệm thành công: [root@nasaspc optional]#stacktest Usage: ./stacktest OPTION Non-executable user stack area tests -t call a GCC trampoline -e simulate a buffer overflow exploit -b simulate an exploit after a trampoline call [root@nasaspc optional]#stacktest -e Attempting to simulate a buffer overflow exploit Succeeded. 199
  65. Quản trị Hệ thống Linux - Cơ bản Để áp dụng miếng vá bạn cần phải di chuyển tới thư mục linux. Sau đây là các câu lệnh. Sử dụng miếng vá openwall: [root@nasaspc linux]#pwd /usr/src/linux [root@nasaspc linux]#patch -p1 < /usr/src/linux-2.2-19-owl/linux-2.2.19-ow1.diff Bây giờ nếu bạn thực hiện make menuconfig bạn sẽ thấy một cửa sổ nhập mới gọi là Security options. Các lựa chọn mặc định đều hợp lý. Từ đây bạn có thể bắt đầu việc dịch hoặc cài đặt nhân như bình thường. 200
  66. Quản trị Hệ thống Linux - Cơ bản QUẢN TRỊ HỆ THỐNG LINUX Tổng quan Chúng ta sẽ xem xét các nhiệm vụ chính của quản trị hệ thống như quản lý các file nhật ký, lập lịch công việc bằng cách sử dụng at và cron Logfiles và các file cấu hình Thư mục /var/log/ Đây là thư mục chứa hầu hết các file nhật ký (log file). Một số ứng dụng sinh ra các file nhật ký của mình (ví dụ như squid hoặc samba). Hầu hết các file nhật ký hệ thống đều được quản lý bởi tiến trình nền syslogd daemon. Các file hệ thống phổ biến là: cron giữ và theo dõi các thông điệp sinh ra khi chạy crons mail các thông điệp liên quan đến mail messages ghi nhật ký tất cả các thông báo những lần thực thành công authpriv, cron, mail và news secure ghi nhật ký tất cả những lần xác thực không thành công, việc thêm / xoá người dùng, File nhật ký quan trọng nhất là messages ghi lại nhật ký hầu hết các hoạt động. File /etc/syslog.conf Khi syslogd được khởi động thì mặc định nó sẽ đọc file cấu hình /etc/syslog.conf. Đầu tiên cũng có thể khởi động syslogd với -f và đường dẫn đến một file cấu hình tương ứng. File này sẽ phải chứa một danh sách các mục, tiếp theo là quyền và cuối cùng là đường dẫn đến file nhật ký: item1.priority1 ; item2.priority2 /path-to-log-file Các mục cho phép là : auth và authpriv người dùng chung và quyền riêng 201
  67. Quản trị Hệ thống Linux - Cơ bản cron các thông điệp tiến trình cron kern các thông điệp nhân mail news user tiến trình người dùng uucp Các quyền cho phép: (từ cao đến thấp) emerg alert crit err warning notice info debug * none Các quyền là tối thiểu! Tất cả các quyền cao hơn sẽ được hệ thống ghi nhật ký. Để gán một quyền info bạn chỉ cần sử dụng dấu '=' để gán như sau: user.=info /var/log/user_activity Danh sách /etc/syslog.conf # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;news.none;authpriv.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure 202
  68. Quản trị Hệ thống Linux - Cơ bản # Log all the mail messages in one place. mail.* /var/log/maillog # Log cron stuff cron.* /var/log/cron # Everybody gets emergency messages, plus log them on another # machine. *.emerg * *.emerg @10.1.1.254 # Save boot messages also to boot.log local7.* /var/log/boot.log # news.=crit /var/log/news/news.crit news.=err /var/log/news/news.err news.notice /var/log/news/news.notice Các tiện ích nhật ký Câu lệnh logger Tiện ích đầu tiên của nhật ký là câu lệnh logger sẽ ghi các thông điệp vào file /var/log/messages : Nếu bạn gõ câu lệnh như sau: logger program myscipt ERR Phía cuối file /var/log/messages sẽ là một thông điệp tương tự như sau: Jul 17 19:31:00 localhost penguin: program myscript ERR Thiết lập địa phương (local settings) 203
  69. Quản trị Hệ thống Linux - Cơ bản Tiện ích logger sẽ mặc định ghi các thông báo vào /var/log/messages. Một số mục địa phương (local items) được định nghĩa trước có thể giúp bạn tạo ra các file nhật ký của mình như local0 tới local7 là các item sử dụng cho người quản trị hệ thống. Các item được định nghĩa này phụ thuộc vào hệ thống (File nhật ký ghi thông tin thời gian khởi động hệ thống RedHat local7 trong /var/log/boot.log). Bạn hãy thêm một dòng sau đây vào file /etc/syslog.conf: local4.* /dev/tty9 Khởi động lại syslogd killall -HUP syslogd Câu lệnh tiếp theo sẽ được ghi nhật ký vào /dev/tty9 logger -p local4.notice "This script is writing to /dev/tty9" Một thiết bị đáng quan tâm khác là /dev/speech được cài đặt với các công cụ Festival. logrotate Các file nhật ký được cập nhật bằng cách sử dụng logrotate. Thông thường logrotate được chạy hàng ngày như là một công việc cron. File cấu hình /etc/logrotate.conf sẽ chứa các câu lệnh tạo hoặc nén file. Danh sách của logrotate.conf # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # send errors to root errors root # create new (empty) log files after rotating old ones create 204
  70. Quản trị Hệ thống Linux - Cơ bản # uncomment this if you want your log files compressed compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own lastlog or wtmp we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp rotate 1 } Tự động hóa công việc (Automatic Tasks) Sử dụng cron Chương trình có trách nhiệm chạy các cron được gọi là crond. Mỗi phút crond sẽ đọc các file có chứa câu lệnh để thực hiện. Các file này được gọi là crontabs. File crontabs người dùng được lưu giữ trong /var/spool/cron/ . Các file này sẽ không cho phép soạn thảo trực tiếp bởi người dùng không phải là người dùng root và cần thiết phải sử dụng công cụ soạn thảo crontab (xem dưới đây). File crontab hệ thống là /etc/crontab. File này sẽ thực hiện định kỳ tất cả các script trong /etc/cron.* bao gồm bất kỳ đường dẫn biểu tượng (symbolic link) trỏ tới các scritp hoặc các tệp nhị phân trong hệ thống. Để thực thi các đầu vào cron , sử dụng công cụ crontab. Các công việc được lập lịch được xem với tham số lựa chọn -l như mô tả dưới đây: crontab –l ➔ # DO NOT EDIT THIS FILE - edit the master and reinstall # (/tmp/crontab.1391 installed on Tue Jul 17 17:56:48 2001) # (Cron version $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) 0 * * 07 2 /usr/bin/find /home/penguin -name core -exec rm {} \; Liệu người dùng root có crontabs nào không? 205
  71. Quản trị Hệ thống Linux - Cơ bản Tương tự như tham số lựa chọn -e sẽ mở trình soạn thảo mặc định của bạn và cho phép nhập đầu vào cron. Người dùng root có thể sử dụng -u để xem và thay đổi bất kỳ đầu vào cron nào của người dùng. Để xoá file crontab của bạn, sử dụng crontab -r. Đây là định dạng của: Minutes(0-59) Hours(0-23) Day of Month(1-31) Month(1-12) Day of Week(0-6) command Quyền: Mặc định, một người dùng bất kỳ nào có thể sử dụngcrontab. Tuy nhiện, bạn có thể kiểm soát khả năng truy cập với /etc/cron.deny và /etc/cron.allow. Lập lịch với “at” Các công việc at được chạy bởi tiến trình nền atd và được đẩy ra trong /var/spool/at/ Câu lệnh at được sử dụng để lập lịch một công việc đang tắt (off task) với cú pháp như sau at [time] Trong đó thời gian có thể được biểu diễn như sau: now 3am + 2days midnight 10:15 Apr 12 teatime Để có danh sách đầy đủ các định dạng thời gian, xem /usr/share/doc/at- xxx/timespec. 206
  72. Quản trị Hệ thống Linux - Cơ bản Bạn có thể liệt kê các câu lệnh đã được lập lịch với atq hoặc at -l. Các công việcat được ghi trong /var/spool/at/: ls /var/spool/at/ ➔ a0000100fd244d spool Khi sử dụng atq bạn sẽ phải có một danh sách các công việc được đánh số. Bạn cũng có thể sử dụng số này để loại bỏ khỏi hàng đợi công việc: atq ➔ 1 2001-07-17 18:21 a root Từ việc liệt kê atq chúng ta thấy rằng số công việc là 1, do đó có thể loại bỏ công việc khỏi hàng đợi như sau: at -d 1 Quyền: Mặc định at sẽ hạn chế người dùng root. Để ghi đè, bạn phải có một /etc/at.deny rỗng hoặc có /etc/at.allow với các tên tương ứng. Sao lưu và nén Chiến lược sao lưu (Backup strategies) Có ba chiến lược để sao lưu một hệ thống là: Đầy đủ: copy tất cả các file 207
  73. Quản trị Hệ thống Linux - Cơ bản Dự phòng: Đầu tiên copy tất cả các file mới được thêm hoặc thay đổi kể từ lần backup cuối cùng và sau đó copy tất cả các file mới được thêm hoặc sửa đổi từ lần backup dự phòng gần nhất Sai lệch: Copy tất cả các file mới được thêm hoặc sửa đổi từ lần backup đầy đủ gần đây nhất Ví dụ: nếu bạn thực hiện một backup đầy đủ và ba lần backup Sai lệch trước khi hệ thống sập đổ, bạn sẽ cần bao nhiêu tape để khôi phục lại? Tạo file nén cần lưu trữ với tar Lựa chọn chính để tạo ra một file nén cần lưu trữ với tar là -c. Bạn cũng có thể xác định tên của archive như là đối số đầu tiên nếu sử dụng cờ -f. tar -cf home.tar /home/ Nếu bạn không xác định file như là một đối số tar -c thì đơn giản hệ thống sẽ cho đầu ra file nén cần lưu trữ như một đầu ra chuẩn: tar -c /home/ > home.tar Giải nén archives với tar Thay cờ -c bằng –x sẽ tạo ra các thư mục nếu cần thiết và copy các file nén cần lưu trữ vào thư mục hiện thời của bạn. Để chuyển tiếp kết quả giải nén vào một thư mục (ví dụ thư mục /usr/share/doc), bạn có thể làm như sau: tar xf backeddocs.tar -C /usr/share/doc Nén Tất cả các archives có thể dược nén bằng nhiều tiện ích khác nhau. Các cờ sau sẽ cho phép khi tạo, thử nghiệm (testing) hoặc giải nén một tệp cân lưu trữ: 208
  74. Quản trị Hệ thống Linux - Cơ bản Tham số lựa Kiểu nén chọn tar Z compress z gzip j bzip2. Tiện ích cpio Tiện ích cpio được sử dụng để copy các file từ hoặc đến các file nén. - Giải nén một file dữ liệu trên tape: cpio -i etc.cpio Tài liệu Trang trợ giúp Manpages và cơ sở dữ liệu whatis Trang trợ giúp được tổ chức theo các phần NAME tên của mục (item) tiếp theo bởi một dòng ghi chú ngắn SYNOPSYS cú pháp của câu lệnh DESCRIPTION giải thích dài OPTIONS Các tham số lựa chọn có thể FILES Các file liên quan đến item hiện tại(ví dụ các file cấu hình) SEE ALSO các trang hướng dẫn khác liên quan đến chủ để hiện tại Các phần trên không thể thiếu trong một trang trợ giúp. 209
  75. Quản trị Hệ thống Linux - Cơ bản Cơ sở dữ liệu whatis lưu trữ phần NAME của tất cả các trang trợ giúp trong hệ thống. Việc lưu trữ này được thực hiện bởi cron hàng ngày. Cơ sở dữ liệuwhatis có hai đầu vào như sau: name(key) – one line description Cú pháp của whatis là: whatis Kết quả đầu ra là phần NAME đầy đủ của các trang trợ giúp trong đó string tương ứng với named(key) Bạn cũng có thể sử dụng câu lệnh man để truy vấn cơ sở dữ liệu whatis. Cú pháp của man là man -k Không giống như whatis, câu lệnh man sẽ truy vấn cả “name” và “one line description” của cơ sở dữ liệu. Nếu string phù hợp với một từ trong bất kỳ một trường nào ở trên, truy vân sẽ trả về một NAME đầy đủ. Ví dụ: (String phù hợp sẽ được bôi đậm) whatis lilo lilo (8) - install boot loader lilo.conf [lilo] (5) - configuration file for lilo man -k lilo grubby (8) - command line tool for configuring grub, lilo, and elilo lilo (8) - install boot loader 210
  76. Quản trị Hệ thống Linux - Cơ bản lilo.conf [lilo] (5) - configuration file for lilo Các trang trợ giúp được lưu giữ trong /usr/share/man Các phấn của trang trợ giúp Phần 1 thông tin trên các bảng executables Phần 2 Các lời gọi hệ thống, ví dụ mkdir(2) Phần 3 Các lời gọi thư viện, ví dụ stdio(3) Phần 4 Các thiết bị (files trong /dev) Phần 5 Các file cấu hình và định dạng Phần 6 Các trò chơi Phần 7 Các gói Macro Phần 8 Các câu lệnh quản trị Phần 9 Các đoạn mã nhân (Kernel routines) Để truy cập vào một phần N xác đinh, bạn gõ: man N command Ví dụ: man mkdir man 2 mkdir man crontab man 5 crontab Các trang thông tin Các trang thông tin (infor page) nằm trong thư mục /usr/share/info. Các trang này là các file nén và có thể đọc với công cụ info. 211
  77. Quản trị Hệ thống Linux - Cơ bản Các công cụ GNU nguyên bản hay sử dụng các trang thông tin hơn các trang trợ giúp (man page). Tuy nhiên thông tin về các dự án GNU như gcc hoặc glibc vẫn có phạm vi rộng hơn trong các trang thông tin so với các trang trợ giúp. Tài liệu trực tuyến Các dự án GNU bao gồm các tài liệu như FAQ, README, CHANGELOG và thỉnh thoảng là hướng dẫn user/admin. Định dạng của các tài lieuẹ này có thể là ASCII text, HTML, LateX hoặc postscript. Các tài liệu này được lưu giữ trong thư mục/usr/share/doc/. HOWTOs và Dự án tài liệu Linux Dự án tài liệu Linux (LDP) cung cấp nhiều tài liệu chi tiết theo các chủ đề khác nhau. Các tài liệu này hướng dẫn cách sử dụng và thực thi trên Linux. Địa chỉ của trang web là www.tldp.org. Các tài liệu The LDP đều miễn phí và có thể được phân phối theo giấy phép CPL. Thực hành Ghi nhật ký 1. Thay đổi file /etc/syslog.conf để in ra một số nhật ký tới /dev/tty9 (đảm bảo rằng bạn khởi động lại syslogd và kết quả đầu ra được chuyển gián tiếp một cách hợp lệ) 2. Thêm một mục (item) local5 với quyền tới /ect/syslog.conf và đặt đầu ra trực tiếp tới /dev/tty10. Khởi động lại syslogd và sử dụng logger để ghi thông tin qua local5. 3. Đọc script /etc/rc.d/init.d/syslog và thay đổi /etc/sysconfig/syslog để cho phép các host từ xa gửi các nhật ký đầu ra. Lập lịch 4. Tạo một đầu vào cron sẽ khởi động xclock theo định kỳ 2 phút một lần. Chú ý rằng cron không biết các biến hệ thống như PATH và DISPLAY. 5. Sử dụng at.để khởi động xclock trong năm phut tiếp theo. 212
  78. Quản trị Hệ thống Linux - Cơ bản Archiving 6. Sử dụng find để liệt kê tất cả các trường đã được sửa đổi trong vòng 24 giờ gấn nhất (gợi ý: Chuyển tiếp đầu ra của find -mtime –1 tới 1 file) 7. Sử dụng cpio để tạo một tệp nén cần lưu trữ có tên là Incremental.cpio. (trả lời: Sử dụng file cừa đợc tạo ra ở trên và thực hiện cat FILE | cpio –ov > Incremental.cpio) 8. Sử dụng xargs và tar để tạo ra một file nén dữ liệu của tất cả các file đã được cập nhật mới hoặc thay đổi trong vòng 5 phút gần đây nhất. 9. Tương tự như trên sử dụng tham số lựa chọn –exec với câu lệnh find. Chú ý, các file được liệt kê bởi find có thể được tham chiếu bởi biểu tượng {}. 10. Giải nén file bạn vừa tạo ra. 213
  79. Quản trị Hệ thống Linux - Cơ bản IN ẤN Có hai mục đích trong chương này đó là giới thiệu các ccông cụ in ấn GNU sẵn có trên Linux và hiểu rõ các file cấu hình đối với máy chủ in ấn. Bộ lọc (Filters) và gs Đối với những định dạng phi văn bản, hệ thống Linux và Unix thường sử dụng các bộ lọc. Những bộ lọc nào sẽ chuyển những định dạng JPEG hoặc troff vào định dạng postscript. Và định dạng này có thể được gửi trực tiếp đến máy in postscript, tuy nhiên không phải tất cả máy in thông thường có khả năng xử lý postscript, một thiết bị trung gian "máy in postscript ảo" có tên là gs (ghostscript) sẽ chuyển đổi postscript vào PCL. Bản thương mại của ghostscript là Aladdin Ghostscript và bản GNU là version cũ hơn. Tiện ích gs có một cơ sở dữ liệu của các thiết bị điều khiển (driver) cho máy in (danh sách các thiết bị điều khiển thường xuyên được cập nhật, ví dụ rất nhiều các máy in USB có thể dùng được), do đó tiện ích này sẽ xử lý và chuyển đổi postscript trực tiếp vào PCL cho những loại máy in đã biết. Tiện ích gs đóng vai trò trung tâm trong quá trình xử lý in ấn của Linux. Máy in và hàng đợi in Như đã đề cập ở trên các dạng văn bản ascii đơn giản không cần xử lý theo cách thức giống như các file hình ảnh hoặc postscript. Nếu chúng ta chỉ có duy nhất một máy in và ví dụ muốn in ra những bức thư, thì chúng ta không cần thiết sử dụng bộ lọc. Chúng ta sẽ định nghĩa một hàng đợi thay thế bộ lọc và giúp quá trình in diễn ra nhanh hơn. Chúng ta cũng có thể định nghĩa một hàng đợi trên cùng một máy in dành cho việc xử lý các file postscript. Tất cả các hàng đợi và máy in được định nghĩa trong /etc/printcap. Dưới đây là cấu hình đầy đủ của một máy in từ xa 192.168.1.20 sử dụng hàng đợi từ xa có tên là 'lp': 214
  80. Quản trị Hệ thống Linux - Cơ bản lp:\ :sd=/var/spool/lpd/lp:\ :mx#0:\ :sh:\ :rm=192.168.1.20:\ :rp=lp: Các lựa chọn cần thiết ở đây là rm dành cho máy chủ từ xa, sd là thư mục đường ống máy in (spool), và rp là tên của hàng đợi từ xa. Chú ý rằng không có bộ lọc nào được xác định ở đây (chúng ta có thể sử dụng lệnh if cho bộ lọc đầu vào). Tất cả các quá trình lọc được thực hiên trên máy chủ từ xa. Các công cụ in ấn lpr: Tiện ích lpr đươc dùng để gửi các công việc liên quan đến in ấn tới máy in. Đây là một phiên bản mới của lp (line print). Đối với người dùng sẽ thuận tiên hơn nếu như một máy in có thể gắn kết với nhiều hơn một hàng đợi. Dưới đây là hai ví dụ để in một file có tên là LETTER. Gửi công việc đến máy in mặc định: lpr LETTER Gửi công việc đến hàng đợi 'ljet': lpr -Pljet LETTER Bảng 1: Các lựa chọn chính cho lpr -#num In num bản copies -Ppq Chỉ định hàng in pq -s Tạo một liên kết tượng trưng trong thư mục đường ống máy in thay cho quá trình copy file vào đó lpq: 215
  81. Quản trị Hệ thống Linux - Cơ bản Người dùng có thể quan sát trạng thái của hàng in bằng tiện ích lpq. Dưới đây là một vài ví dụ. Hiển thị các công việc trong hàng đợi mặc định: lpq Hiển thị các công việc cho tất cả hàng đợi trong hệ thống lpq -a Hiển thị các công việc trong hàng đợi từ xa lpq -Premote lprm: Tuỳ thuôc vào lựa chọn trong /etc/lpd.perms người dùng có thể được phép xoá những công việc đang chờ đợi bằng lệnh lprm. Xoá công việc cuối cùng được gửi đi lprm Xoá các công việc được gửi đi bằng người dùng dhill: lprm dhill Xoá tất cả công việc được gửi đi: lprm -a (or simply lprm -) Chúng ta cũng có thể xoá một công việc cụ thể trong đường ông máy in bằng cách chỉ ra giá trị của công việc, giá trị này được tạo ra bởi lpq. lpc: Tiện ích điều khiển máy in theo dòng (Line Printer Control) được dùng để điều khiển các hàng in và các máy in. Các hàng in có thể bị vô hiệu hoá hoặc làm việc 216
  82. Quản trị Hệ thống Linux - Cơ bản trở lại. Chú ý rằng lệnh lprm chỉ có thể xoá các công việc từ hàng đợi nhưng không có thể dừng lại một hàng đợi. Chúng ta có thể thực hiện tương tác với lpc (lpc có dấu nhắc riêng) hoặc sử dụng dòng lệnh. Dưới đây là kết quả của lệnh lpc – help: CMD: /usr/sbin/lpc help ► Commands may be abbreviated. Commands are: abort enable disable help restart status topq ? clean exit down quit start stop up Các lựa chon enable/disable/topq/up liên quan đến hàng đợi. Các lựa chọn start/stop/down liên quan đến máy in. Các file cấu hình /etc/printcap Như đã đề cập trong phần trước của chương này, file trên sẽ định nghĩa tất cả các máy in và hàng đợi mà hệ thông có thể dùng (từ xa hoặc cục bộ). Máy in mặc định có thể được xác định với các biến LPDEST hoặc PRINTER: PRINTER=lp Nếu không có biến môi trường nào được thiết lập, máy in mặc định là máy in đầu tiên được định nghĩa trong /etc/printcap. Các định nghĩa chính là: lp tên thiết bị, thông thường /dev/lp0 cho cổng song song mx dung lượng file lơn nhất (giá trị 0 có nghĩa là không giới hạn) sd thư mục đường ống máy in if bộ lọc đầu vào rm địa chỉ máy chủ từ xa hoặc IP 217
  83. Quản trị Hệ thống Linux - Cơ bản rp tên hàng đợi từ xa Nếu như file /etc/printcap có thay đổi thì chúng ta cần khởi động lại daemon lpd. /etc/lpd.conf Đây là một file có nội dung rất dài và ngầm định là tất cả các lựa chon đều được ghi chú. File này được dùng khi người quản trị mạng muốn có thêm quyền điều khiển đối với quá trình in ấn (ví dụ: xác thực quyền truy nhập từ xa, các quyền của người dùng ) /etc/lpd.perms File này điều khiển các quyền liên quan đến các tiện ích lpc, lpq, và lprm. Cụ thể chúng ta có thể cung cấp cho người dùng quyền để loại bỏ những công việc hiện thời của họ từ hàng đợi với dòng lệnh sau: ACCEPT SERVICE=M SAMEHOST SAMEUSER LPRng sẽ sử dụng một hệ thông các phím để rút gọn các mục trong lpd.perms. Tuy nhiên quá trình này không dễ dàng có thể hiểu được đối với nhiều trường hợp. Ví dụ dịch vụ 'M' tương ứng với lprm trong dòng lệnh phía trên. Ví dụ về file /etc/lpd.perms: ## Permissions are checked by the use of 'keys' and matches. For each of ## the following LPR activities, the following keys have a value. ## ## Key Match Connect Job Job LPQ LPRM LPC ## Spool Print ## SERVICE S 'X' 'R' 'P' 'Q' 'M' 'C' ## USER S - JUSR JUSR JUSR JUSR JUSR ## HOST S RH JH JH JH JH JH ## GROUP S - JUSR JUSR JUSR JUSR JUSR ## IP IP RIP JIP JIP RIP JIP JIP ## PORT N PORT PORT - PORT PORT PORT ## REMOTEUSER S - JUSR JUSR JUSR CUSR CUSR ## REMOTEHOST S RH RH JH RH RH RH ## REMOTEGROUP S - JUSR JUSR JUSR CUSR CUSR ## REMOTEIP IP RIP RIP JIP RIP RIP RIP ## CONTROLLINE S - CL CL CL CL CL 218
  84. Quản trị Hệ thống Linux - Cơ bản ## PRINTER S - PR PR PR PR PR ## FORWARD V - SA - - SA SA ## SAMEHOST V - SA - SA SA SA ## SAMEUSER V - - - SU SU SU ## SERVER V - SV - SV SV SV ## LPC S - - - - - LPC ## AUTH V - AU AU AU AU AU ## AUTHTYPE S - AU AU AU AU AU ## AUTHUSER S - AU AU AU AU AU ## AUTHFROM S - AU AU AU AU AU ## AUTHSAMEUSER S - AU AU AU AU AU ## ## KEY: ## JH = HOST host in control file ## RH = REMOTEHOST connecting host name ## JUSR = USER user in control file ## AUTH will match (true) if authenticated transfer ## AUTHTYPE will match authentication type ## AUTHUSER will match client authentication type ## AUTHFROM will match server authentication type and is NULL if not from server ## AUTHSAMEUSER will match client authentication to save authentication in job ## ## Example Permissions ## ## # All operations allowed except those specifically forbidden ## DEFAULT ACCEPT ## ## #Reject connections from hosts not on subnet 130.191.0.0 ## # or Engineering pc's ## REJECT SERVICE=X NOT REMOTEIP=130.191.0.0/255.255.0.0 ## REJECT SERVICE=X NOT REMOTEHOST=engpc* ## ## #Do not allow anybody but root or papowell on ## #astart1.astart.com or the server to use control ## #facilities. ## ACCEPT SERVICE=C SERVER REMOTEUSER=root ## ACCEPT SERVICE=C REMOTEHOST=astart1.astart.com REMOTEUSER=papowell ## ## #Allow root on talker.astart.com to control printer hpjet ## ACCEPT SERVICE=C HOST=talker.astart.com PRINTER=hpjet REMOTEUSER=root ## #Reject all others ## REJECT SERVICE=C ## ## #Do not allow forwarded jobs or requests ## REJECT SERVICE=R,C,M FORWARD ## # # allow root on server to control jobs ACCEPT SERVICE=C SERVER REMOTEUSER=root # allow anybody to get server, status, and printcap ACCEPT SERVICE=C LPC=lpd,status,printcap 219
  85. Quản trị Hệ thống Linux - Cơ bản # reject all others REJECT SERVICE=C # # allow same user on originating host to remove a job ACCEPT SERVICE=M SAMEHOST SAMEUSER # allow root on server to remove a job ACCEPT SERVICE=M SERVER REMOTEUSER=root REJECT SERVICE=M # all other operations allowed DEFAULT ACCEPT /etc/host.{lpd,equiv} Những file này được dùng bởi hệ thống các quá trình in ấn LRP và có rủi ro về bảo mật. Khi thực hiện máy dịch vụ in, chúng ta cần xác định những máy chủ nào có thể truy cập vảo máy in ở trong /etc/hosts.lpd. Chúng ta cũng cần bổ sung những máy chủ này vào /etc/hosts.equiv. Những file này ngày nay được thay thế trong LPRng bằng file /etc/lpd.perms Thực hành 1. Sử dụng printtool và tại một hàng đợi cục bộ có tên là lp. 2. Chỉnh sửa thiết bị /dev/tty10 như là thiết bị máy in (nhớ thực hiện chmod 666 /dev/tty10 để cho phép in ấn trên thiết bị này). Bây giờ bạn có một máy in ảo trên hệ thống của bạn! 3. Gửi các công việc đến hàng in sử dụng lpr và pr. 4. Với công cụ in ấn trên hệ thống của bạn, hãy định nghĩa các hàng đợi từ xa khác nhau - một hàng đợi UNIX - một hàng đợi SMB Nếu bạn đang sử dụng máy chủ, chắc chắn các câu lệnh phù hợp trên sẽ được định nghĩa trong /etc/lpd.perms Trong mỗi trường hợp 220
  86. Quản trị Hệ thống Linux - Cơ bản - kiểm tra file /etc/printcap. Bộ lọc nào được sử dụng? Máy chủ từ xa được định nghĩa như thế nào? - kiểm tra thư mục /var/spool/lpd/ 5. Dùng các hàng in khác nhau và các máy in với lpc. 6. Kiểm tra nội dung của mỗi hàng in với lpc. 7. Loại bỏ khỏi hàng đợi những công việc cụ thể với lprm 221