29
Tài liệu này mô tả cách dùng giao thức Server Message Block, còn gọi là giao thức Session Message Block, NetBIOS hay giao thức LanManager, với Linux sử dụng Samba. MỤC LỤC 1. Giới thiệu 2. Cài đặt 3. Cách vận hành Daemons 4. Cấu hình tổng quát (/etc/smb.conf) 5. Chia xẻ Linux Drive với Windows Machines 6. Truy cập SMB Share với Linux Machines 7. Chia xẻ Linux Printer với Windows Machines 8. Chia xẻ Windows Printer với Linux Machines 9. Backing Up Windows Machines vào một máy chủ Linux 10. Sử dụng Samba Across Routed Networks 11. Tài liệu tham khảo

Cai dat samba

Embed Size (px)

Citation preview

Page 1: Cai dat samba

Tài liệu này mô tả cách dùng giao thức Server Message Block, còn gọi là giao thức Session Message Block, NetBIOS hay giao thức LanManager, với Linux sử dụng Samba.

MỤC LỤC

1. Giới thiệu

2. Cài đặt

3. Cách vận hành Daemons

4. Cấu hình tổng quát (/etc/smb.conf)

5. Chia xẻ Linux Drive với Windows Machines

6. Truy cập SMB Share với Linux Machines

7. Chia xẻ Linux Printer với Windows Machines

8. Chia xẻ Windows Printer với Linux Machines

9. Backing Up Windows Machines vào một máy chủ Linux

10. Sử dụng Samba Across Routed Networks

11. Tài liệu tham khảo

Page 2: Cai dat samba

1. Giới thiệu:

Tài liệu này mô tả cách dùng giao thức Server Message Block, còn gọi là giao thức Session Message Block, NetBIOS hay giao thức LanManager, với Linux sử dụng Samba. mặc dù tài liệu có trọng tâm là Linux, nhưng Samba có thể chạy trong hầu hết các hệ điều hành tương tự Unix Samba chỉ làm việc trong mạng cục bộ Ethernet dùng giao thức TCP/IP

Samba có bốn chức năng căn bản như sau :

<!--[if !supportLists]-->1. <!--[endif]-->Chia xẻ drive Linux với Windows machines.

<!--[if !supportLists]-->2. <!--[endif]-->Truy cập SMB share với Linux machines.

<!--[if !supportLists]-->3. <!--[endif]-->Chia xẻ máy in Linux với Windows machines.

<!--[if !supportLists]-->4. <!--[endif]-->Chia xẻ máy in Windows với Linux machines.

2. Cài đặt:

Để cài đặt Windows 95/98 dùng TCP/IP, chọn Control Panel | Network, rồi add and configure Microsoft TCP/IP.

Với Windows NT, chọn Control Panel | Network | Protocols.

Samba package đòi hỏi phải có hai daemons dưới đây. Chúng được cài đặt đầy đủ trong /usr/sbin and run hoặc được boot từ systems startup scripts hay từ inetd.

smbd (The SMB daemon) nmbd (Qui dinh NetBIOS của ten may chu hỗ trợ cho clients)

Tiêu biểu, Samba binaries sau đây được cài trong /usr/bin hay /usr/local/samba/bin, mặc dù vị trí tuỳ chọn.

smbclient ( SMB client cho UNIX machines) smbprint ( script de in toi 1 may in trong may chu SMB ) smbprint.sysv (SBN client cho SVR4 UNIX machines) smbstatus (danh sach ket noi hien hanh SMB cho local host)

Page 3: Cai dat samba

smbrun (Mot 'glue' script tao thuan tien cho viec chay cac ung dung tren may chu SMB) .

Thêm vào đó, một script gọi là ‘print’, đáp ứng như một điểm đầu (front end) hữu ích đến smpprint script.

Cài đặt tiếp theo, đặt daemons vào /usr/sbin và binaries vào /usr/bin. Cài đặt man pages vào /usr/local/man.

Khi bạn thực hiện Samba package, nên chỉ định trong Makefile vị trí cho file cấu hình, smb.conf. Thông thường file này ở /etc, nhưng bạn có thể để nó bất kỳ chỗ nào tuỳ thích. Về phương diện này , chúng tôi cho rằng bạn chỉ định vị trí của file cấu hình như /etc/smb.conf, vị trí log file là log file = /var/log/samba-log.%m và thư mục khóa là lock directory = /var/lock/samba.

Cài đặt file cấu hình, smb.conf. Vào thư mục chứa Samba. Tìm thư mục con examples/simple và đọc file README. Copy file Smb.conf đã tìm thấy ở thư mục này vào to /etc.

Nếu bạn không muốn file cấu hình của bạn ở /etc, hãy đặt nó ở đâu cũng được, rồi cho symlink vào /etc:

ln -s /path/to/smb.conf /etc/smb.conf

3. Cách vận hành Daemons:

Hai SMB daemons là /usr/sbin/smbd and /usr/sbin/nmbd. Dưới phần lớn sự phân phối của Linux , các daemon này là started, stoped và restarted theo startup script đặt trong /etc/rc.d/init.d/smb và symlinked tới một runlevel thích hợp.

Nếu không dùng startup script tiêu chuẩn, có thể chạy Samba daemon từ inetd hay tiến trình stand-alone.Samba sẽ đáp ứng nhanh hơn một chút đối với Stand-alone daemon hơn là inetd

Mặt khác, bạn nên kiểm tra file /etc/services for lines trông giống như:

netbios-ns 137/tcp nbnsnetbios-ns 137/udp nbnsnetbios-dgm 138/tcp nbdgmnetbios-dgm 138/udp nbdgmnetbios-ssn 139/tcp nbssn

Page 4: Cai dat samba

Phải chắc rằng mọi file đều uncommented. Tuỳ thuộc vào sự phân phối của bạn, bạn có lẽ còn phải thêm chúng vào. Samba sẽ không thể nối kết với cổng thích hợp, trừ khi nó có các đầu vào này /etc/services .

Để chạy daemons từ inetd, hãy đặt những dòng theo sau vào inetd configuration file, /etc/inetd.conf:

# SAMBA NetBIOS services (for PC file and print sharing) netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd

Rồi restart inetd daemon bằng lịnh:

kill -HUP `cat /var/run/inetd.pid`

Để chạy daemons từ system startup scripts, hãy để các script sau vào file /etc/rc.d/init.d/smb và symbolically link nó vào files specified bằng lịnh:

#!/bin/sh

# # /etc/rc.d/init.d/smb - starts and stops SMB services. # # The following files should be synbolic links to this file: # symlinks: /etc/rc.d/rc1.d/K35smb (Kills SMB services on shutdown) # /etc/rc.d/rc3.d/S91smb (Starts SMB services in multiuser mode) # /etc/rc.d/rc6.d/K35smb (Kills SMB services on reboot) #

# Source function library. . /etc/rc.d/init.d/functions

# Source networking configuration. . /etc/sysconfig/network

# Check that networking is up.

Page 5: Cai dat samba

[ ${NETWORKING} = "no" ] && exit 0

# See how we were called. case "$1" in start) echo -n "Starting SMB services: " daemon smbd -D daemon nmbd -D echo touch /var/lock/subsys/smb ;; stop) echo -n "Shutting down SMB services: " killproc smbd killproc nmbd rm -f /var/lock/subsys/smb echo "" ;; *) echo "Usage: smb {start|stop}" exit 1 esac

Nếu khi khởi động Samba bạn nhận được báo lỗi rằng says something about the daemon failing to bind to port 139, thì có thể bạn có một Samba process khác đang chạy rồi mà chưa shut down. Kiểm tra process list (với 'ps auxww | grep mbd') để xem lại.

4. Cấu hình tổng quát (/etc/smb.conf)

Cấu hình Samba trong một Linux được điều khiển bởi một file đơn, /etc/smb.conf. File này xác định tài nguyên hệ thống mà bạn muốn chia xẻ với bên ngoài và giới hạn nào mà bạn muốn đưa vào đó.

Phần [global] định nghĩa vài biến mà Samba dùng để vạch rõ việc chia xẻ mọi tài nguyên.

Phần [homes] cho phép những user biệt lập truy cập thư mục home của họ trên local (Linux machine). Nghĩa là, người dùng kết nối vào share này từ Windows machines, sẽ được kết nối với thư mục cá nhân của họ bằng một tài khoản trên Linux box.

Page 6: Cai dat samba

File smb.conf mẫu dưới đây cho phép người dùng đơn lẻ vào home directories của họ trong local machine và để viết vào một thư mục tạm. Đối với một Windows user để thấy được những sự chia xẻ này, Linux box phải hiện hữu trong mạng local. Rồi người dùng kết nối vào một network drive từ Windows File Manager hay Windows Explorer.

; /etc/smb.conf;; Make sure and restart the server after making changes to this file, ex:; /etc/rc.d/init.d/smb stop; /etc/rc.d/init.d/smb start

[global]; Uncomment this if you want a guest account; guest account = nobody log file = /var/log/samba-log.%m lock directory = /var/lock/samba share modes = yes

[homes] comment = Home Directories browseable = no read only = no create mode = 0750

[tmp] comment = Temporary file space path = /tmp read only = no public = yes

Để kiểm tra sự chính xác của smb.conf file , dùng tiện ích 'testparm' .

Nếu Samba server của bạn có nhiều giao diện ethernet, bạn có thể thêm vào phần [global] /etc/smb.conf: như duới đây, để sửa lỗi cho một Samba daemon nào đó.

interfaces = 192.168.1.1/24

5. Chia xẻ một Linux Drive với Windows Machines

Để chia xẻ một directory với public, tạo một dòng ở phần [tmp] nêu trên để thêm vào smb.conf:

Page 7: Cai dat samba

[public] comment = Public Stuff path = /home/public public = yes writable = yes printable = no

Để directory trên có thể readable chung, nhưng chỉ writable đối với nhóm có thẩm quyền, hãy sửa nhu sau:

[public] comment = Public Stuff path = /home/public public = yes writable = yes printable = no write list = @staff

Để sử dụng Samba cho sản phẩm của Microsoft thì hơi khó vì các Window hiên hành dùng password được mã hoá một cách mặc định mà Samba thì không mà hóa. Do đó bạn phải cấu hình Samba dùng password mã hoá hoặc ngược lại.

Làm cho Windows hiểu được encrypted SMB passwords hãy vào registry editor:

Windows 95/98 =============

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP Add a new DWORD value: Value Name: EnablePlainTextPassword Data: 0x01.

Windows NT ==========

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rdr\Parameters Add a new DWORD value: Value Name: EnablePlainTextPassword Data: 0x01

Windows 2000 ============

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkStation\Parameters Add a new DWORD value: Value Name: EnablePlainTextPassword Data: 0x01

Để cấu hình Samba dùng encrypted passwords:

Trong phần [global] của /etc/smb.conf, thêm dòng:

Page 8: Cai dat samba

encrypt passwords = yessmb passwd file = /etc/smbpasswd

Nếu clients và server của bạn dùng encrypted passwords, bạn phải tạo kết nối ban đầu bằng cách, điền tên phần chia vào Windows File Manager hay Explorer dialog box, theo form '\\<hostname>\<sharename>'. rồi Logon.

Nếu bạn nghi ngờ NetBIOS name service không đúng cấu hình, hãy dùng địa chỉ IP address của server: '\\<host ip address>\<sharename>'.

Để filenames thể hiện đúng trong Windows 95/98/NT, bạn còn phải thiết lập vài tuỳ chọn trong phần share tương ứng: ; Mangle case = yes seems to give the correct filenames ; for Win95/98/NT. mangle case = yes

; If samba is case sensitive when looking for files case sensitive = no

; Default case of files that are created default case = lower

; Preserve case for all filenames preserve case = yes

; Preserve case for dos (8.3) filenames short preserve case = no

6. Truy cập một SMB Share với Linux Machines

Linux (UNIX) machines cũng có thể browse và mount SMB shares, bất kể server là Windows machine hay Samba server!

Samba có trong chương trình SMB client của UNIX machines. Nó cung cấp một giao diện ftp-like trong command line. Bạn có thể dùng tiện ích này để chuyển files qua lại giữa Windows 'server' và một Linux client.

Phần lớn Linux distributions hiện nay cũng bao gồm smbfs package, cho phép người ta mount và umount SMB shares.

Để thấy shares nào có hiệu lực trên host mà bạn muốn xem:

Page 9: Cai dat samba

/usr/bin/smbclient -L host

Tùy theo server, có thể đòi password, và lịnh này xuất ra chẳng hạn như:

Server time is Sat Aug 10 15:58:27 1996Timezone is UTC+10.0Password: Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]

Server=[ZIMMERMAN] User=[] Workgroup=[WORKGROUP] Domain=[]

Sharename Type Comment --------- ---- ------- ADMIN$ Disk Remote Admin public Disk Public C$ Disk Default share IPC$ IPC Remote IPC OReilly Printer OReilly print$ Disk Printer Drivers

Machine này có browse list:

Server Comment --------- ------- HOPPER Samba 1.9.15p8 KERNIGAN Samba 1.9.15p8 LOVELACE Samba 1.9.15p8 RITCHIE Samba 1.9.15p8 ZIMMERMAN

Danh sách trình duyệt chỉ ra những SMB servers khác có tài nguyên được chia xẻ trên mạng.

Để sử dụng client, chạy:

/usr/bin/smbclient service <password>Ở đây, 'service' là tên một machine và share. Thí dụ, bạn muốn tìm một thu mục được share như 'public' trên máy zimmerman, hãy làm như sau: /usr/bin/smbclient \\\\zimmerman\\public mypasswd

Page 10: Cai dat samba

bạn sẽ nhận được:

Server time is Sat Aug 10 15:58:44 1996Timezone is UTC+10.0Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]smb: \>

Đánh 'h' để gọi help của smbclient:

smb: \> hls dir lcd cd pwd get mget put mput rename more mask del rm mkdir md rmdir rd prompt recurse translate lowercase print printmode queue cancel stat quit q exit newer archive tar blocksize tarmode setmode help ? ! smb: \>

smbclient chỉ dùng để kiểm tra, nếu bạn muốn làm việc thực sự thì phải dùng đến package với hai tiện ích smbmount và smbumount. Với điều kiện smbfs có hỗ trợ biên dịch vào kernel .

Sau đây là một kiểu mẫu sử dụng smbmount để mount 1 SMB share là "customers" từ máy "samba1":

[root@postel]# smbmount "\\\\samba1\\customers" -U rtg2t -c 'mount /customers -u 500 -g 100'Added interface ip=192.168.35.84 bcast=192.168.255.255 nmask=255.255.0.0Got a positive name query response from 192.168.168.158 ( 192.168.168.158 )Server time is Tue Oct 5 10:27:36 1999

Page 11: Cai dat samba

Timezone is UTC-4.0Password:Domain=[IPM] OS=[Unix] Server=[Samba 2.0.3]security=user

Phát ra một lịnh mount sẽ chỉ ra các share mounted:

[root@postel]# mount /dev/hda2 on / type ext2 (rw)none on /proc type proc (rw)none on /dev/pts type devpts (rw,mode=622)//SAMBA1/CUSTOMERS on /customers type smbfs (0)

7. Chia xẻ một Linux Printer với Windows Machines

Thêm cấu hình printing vào smb.conf:

[global] printing = bsd printcap name = /etc/printcap load printers = yes log file = /var/log/samba-log.%m lock directory = /var/lock/samba

[printers] comment = All Printers security = server path = /var/spool/lpd/lp browseable = no printable = yes public = yes writable = no create mode = 0700

[ljet] security = server path = /var/spool/lpd/lp printer name = lp writable = yes public = yes printable = yes

Page 12: Cai dat samba

print command = lpr -r -h -P %p %s

8. Chia sẽ một Windows Printer với Linux Machines

<!--[if !supportLists]-->1. <!--[endif]-->Phải có cổng váo phù hợp trong /etc/printcap và chúng phải tương xứng với cấu trúc thư mục local.

<!--[if !supportLists]-->2. <!--[endif]-->Phải có script /usr/bin/smbprint trong Samba source, nhưng không phải mọi Samba binary distributions đều có. (có thể bổ sung)

<!--[if !supportLists]-->3. <!--[endif]-->Nếu bạn muốn biến đổi file ASCII sang Postscript, phải có nenscript, hay tương đuơng. nenscript là Postscript converter và thường được cài đặt trong /usr/bin.

<!--[if !supportLists]-->4. <!--[endif]-->Sử dụng easy-to-use front end công việc in ấn của Samba xẻ dễ dàng hơn. Một perl script đơn giản để vận dụng bảng mã ASCII, Postscript hay Postscript được tạo ra như dưới đây.

<!--[if !supportLists]-->5. <!--[endif]-->Bạn cũng có thể dùng MagicFilter để làm như trên. Nó có thể convert tự động nhiều dạng format của file. Chi tiết thiết lập MagicFilter được cho ở dưới perl script.

Cổng vào /etc/printcap dưới đây của máy in HP 5MP trên máy chủ Windows NT :

cm - comment lp - device name to open for output sd - the printer's spool directory (on the local machine) af - the accounting file mx - the maximum file size (zero is unlimited) if - name of the input filter (script)

# /etc/printcap## //zimmerman/oreilly via smbprint#lp:\ :cm=HP 5MP Postscript OReilly on zimmerman:\ :lp=/dev/lp1:\ :sd=/var/spool/lpd/lp:\ :af=/var/spool/lpd/lp/acct:\

Page 13: Cai dat samba

:mx#0:\ :if=/usr/bin/smbprint:

Phải chắc rằng thư mục spool và accounting hiện hữu và writable; 'if' line có đường dẫn phù hợp với smbprint script; và chỉ đến một thiết bị thích hợp.

Kế đó là công việc của smbprint . Nó thường được đặt vào /usr/bin . Nó có ở Samba source distribution, nhưng đối với một vài binary distributions thì lại không có, vì vật phải tạo ra nó như sau:

#!/bin/sh -x

# This script is an input filter for printcap printing on a unix machine. It# uses the smbclient program to print the file to the specified smb-based # server and service.# For example you could have a printcap entry like this## smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint## which would create a unix printer called "smb" that will print via this # script. You will need to create the spool directory /usr/spool/smb with# appropriate permissions and ownerships for your system.

# Set these to the server and service you wish to print to # In this example I have a WfWg PC called "lapland" that has a printer # exported called "printer" with no password.

## Script further altered by [email protected] (Michael Hamilton)# so that the server, service, and password can be read from # a /usr/var/spool/lpd/PRINTNAME/.config file.#

Page 14: Cai dat samba

# In order for this to work the /etc/printcap entry must include an # accounting file (af=...):## cdcolour:\# :cm=CD IBM Colorjet on 6th:\# :sd=/var/spool/lpd/cdcolour:\# :af=/var/spool/lpd/cdcolour/acct:\# :if=/usr/local/etc/smbprint:\# :mx=0:\# :lp=/dev/null:## The /usr/var/spool/lpd/PRINTNAME/.config file should contain:# server=PC_SERVER# service=PR_SHARENAME# password="password"## E.g.# server=PAULS_PC# service=CJET_371# password=""

## Debugging log file, change to /dev/null if you like.#logfile=/tmp/smb-print.log# logfile=/dev/null

## The last parameter to the filter is the accounting file name.#spool_dir=/var/spool/lpd/lpconfig_file=$spool_dir/.config

# Should read the following variables set in the config file:# server# service# password# user

Page 15: Cai dat samba

eval `cat $config_file`

## Some debugging help, change the >> to > if you want to same space.#echo "server $server, service $service" >> $logfile

(# NOTE You may wish to add the line `echo translate' if you want automatic# CR/LF translation when printing. echo translate echo "print -" cat) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user -N -P >> $logfile

Hầu hết các Linux distributions dùng nenscript để chuyển đổi từ văn bản ASCII sang Postscript. Perl script makes sau đây cung cấp một giao diện đơn giản công việc in của Linux qua smbprint.

Usage: print [-a|c|p] <filename> -a prints <filename> as ASCII -c prints <filename> formatted as source code -p prints <filename> as Postscript If no switch is given, print attempts to guess the file type and print appropriately.

Dùng smbprint để in ASCII files nhằm rút ngắn những hàng dài. Script này ngắt dòng bằng khoảng trắng.

Việc định dạng source code được thực hiện bởi nenscript. Nó lấy một file ASCII và foramts file này thành 2 cột có gán tiêu đề (date, filename, etc), nó cũng đánh số trang.

Những văn bản viết bằng Postscript thì luôn luôn được dịnh dang hoàn chỉnh, nên không cần phải làm gì cả.

#!/usr/bin/perl

# Script: print# Authors: Brad Marshall, David Wood

Page 16: Cai dat samba

# Plugged In Communications# Date: 960808## Script de in toi mot may in Postscript theo Samba.# Purpose: Takes files of various types as arguments and # processes them appropriately for piping to a Samba print script.## Currently supported file types:# # ASCII - ensures that lines longer than $line_length characters wrap on# whitespace.# Postscript - Takes no action.# Code - Formats in Postscript (using nenscript) to display# properly (landscape, font, etc).#

# Set the maximum allowable length for each line of ASCII text.$line_length = 76;

# Set the path and name of the Samba print script$print_prog = "/usr/bin/smbprint";

# Set the path and name to nenscript (the ASCII-->Postscript converter)$nenscript = "/usr/bin/nenscript";

unless ( -f $print_prog ) { die "Can't find $print_prog!";}unless ( -f $nenscript ) { die "Can't find $nenscript!";}

&ParseCmdLine(@ARGV);

# DBGprint "filetype is $filetype\n";

Page 17: Cai dat samba

if ($filetype eq "ASCII") { &wrap($line_length);} elsif ($filetype eq "code") { &codeformat;} elsif ($filetype eq "ps") { &createarray;} else { print "Sorry..no known file type.\n"; exit 0;}# Pipe the array to smbprintopen(PRINTER, "|$print_prog") || die "Can't open $print_prog: $!\n";foreach $line (@newlines) { print PRINTER $line;}# Send an extra linefeed in case a file has an incomplete last line.print PRINTER "\n";close(PRINTER);print "Completed\n";exit 0;

# --------------------------------------------------- ## Dưới đây là một subroutine # ---------------------------------------------------

sub ParseCmdLine { # Parses the command line, finding out what file type the file is

# Gets $arg and $file to be the arguments (if the exists) # and the filename if ($#_ < 0) { &usage; } # DBG# foreach $element (@_) {# print "*$element* \n";# }

$arg = shift(@_);

Page 18: Cai dat samba

if ($arg =~ /\-./) { $cmd = $arg; # DBG# print "\$cmd found.\n";

$file = shift(@_); } else { $file = $arg; } # Defining the file type unless ($cmd) { # We have no arguments

if ($file =~ /\.ps$/) { $filetype = "ps"; } elsif ($file =~ /\.java$|\.c$|\.h$|\.pl$|\.sh$|\.csh$|\.m4$|\.inc$|\.html$|\.htm$/) { $filetype = "code"; } else { $filetype = "ASCII"; }

# Process $file for what type is it and return $filetype } else { # We have what type it is in $arg if ($cmd =~ /^-p$/) { $filetype = "ps"; } elsif ($cmd =~ /^-c$/) { $filetype = "code"; } elsif ($cmd =~ /^-a$/) { $filetype = "ASCII" } }}

sub usage { print "Usage: print [-a|c|p] <filename> -a prints <filename> as ASCII -c prints <filename> formatted as source code -p prints <filename> as Postscript

Page 19: Cai dat samba

If no switch is given, print attempts to guess the file type and print appropriately.\n"; exit(0);}

sub wrap { # Create an array of file lines, where each line is < the # number of characters specified, and wrapped only on whitespace

# Get the number of characters to limit the line to. $limit = pop(@_);

# DBG #print "Entering subroutine wrap\n"; #print "The line length limit is $limit\n";

# Read in the file, parse and put into an array. open(FILE, "<$file") || die "Can't open $file: $!\n"; while(<FILE>) { $line = $_; # DBG #print "The line is:\n$line\n";

# Wrap the line if it is over the limit. while ( length($line) > $limit ) { # DBG #print "Wrapping...";

# Get the first $limit +1 characters. $part = substr($line,0,$limit +1);

# DBG

Page 20: Cai dat samba

#print "The partial line is:\n$part\n";

# Check to see if the last character is a space. $last_char = substr($part,-1, 1); if ( " " eq $last_char ) { # If it is, print the rest.

# DBG #print "The last character was a space\n";

substr($line,0,$limit + 1) = ""; substr($part,-1,1) = ""; push(@newlines,"$part\n"); } else { # If it is not, find the last space in the # sub-line and print up to there.

# DBG #print "The last character was not a space\n";

# Remove the character past $limit substr($part,-1,1) = ""; # Reverse the line to make it easy to find # the last space. $revpart = reverse($part); $index = index($revpart," "); if ( $index > 0 ) { substr($line,0,$limit-$index) = ""; push(@newlines,substr($part,0,$limit-$index) . "\n");

Page 21: Cai dat samba

} else { # There was no space in the line, so # print it up to $limit. substr($line,0,$limit) = ""; push(@newlines,substr($part,0,$limit) . "\n"); } } } push(@newlines,$line); } close(FILE);}

sub codeformat { # Call subroutine wrap then filter through nenscript &wrap($line_length); # Pipe the results through nenscript to create a Postscript # file that adheres to some decent format for printing # source code (landscape, Courier font, line numbers). # Print this to a temporary file first. $tmpfile = "/tmp/nenscript$$"; open(FILE, "|$nenscript -2G -i$file -N -p$tmpfile -r") || die "Can't open nenscript: $!\n"; foreach $line (@newlines) { print FILE $line; } close(FILE); # Read the temporary file back into an array so it can be # passed to the Samba print script. @newlines = ("");

Page 22: Cai dat samba

open(FILE, "<$tmpfile") || die "Can't open $file: $!\n"; while(<FILE>) { push(@newlines,$_); } close(FILE); system("rm $tmpfile");}

sub createarray { # Create the array for postscript open(FILE, "<$file") || die "Can't open $file: $!\n"; while(<FILE>) { push(@newlines,$_); } close(FILE);}

Cò bây giờ là cách dùng MagicFilter.

1) Cài đặt MagicFilter với filter cho máy in trong /usr/bin/local .

2) Viết /etc/printcap như sau: (máy in LaserJet 4L):

lp|ljet4l:\ :cm=HP LaserJet 4L:\ :lp=/dev/null:\ # or /dev/lp1 :sd=/var/spool/lpd/ljet4l:\ :af=/var/spool/lpd/ljet4l/acct:\ :sh:mx#0:\ :if=/usr/local/bin/main-filter:

3) Viết bộ lọc /usr/local/bin/main-filter giống như bạn đề nghị dùng bộ lọc ljet4l-filter thay vì dùng cat.

Here's mine.

#! /bin/sh logfile=/var/log/smb-print.log spool_dir=/var/spool/lpd/ljet4l ( echo "print -" /usr/local/bin/ljet4l-filter ) | /usr/bin/smbclient "\\\\SHIR\\HPLJ4" -N -P >> $logfile

P.S. : đây là đọan trích từ Print2Win mini-Howto về việc locking và tạo máy in ảo.

---Bắt đầu từ đây

Hướng dẫn của Rick Bressler :

Page 23: Cai dat samba

:lp=/dev/null:\

lpr làm một 'exclusive' mở trên file mà bạn chỉ định như lp=. Nó làm điều này để ngăn chặn nhiều quá trình in tới máy in chính trong cùng một lúc.

tác động thứ yếu của việc này là , eng và colour không thể in cùng lúc, ngược lại mọi tiến trình ghi khác vào /dev/null sẽ bị ngắt!

Đối với hệ thống đơn người dùng đây có lẽ không phải là vấn đề lớn, nhưng với hệ thống chừng 50 may in, nó sẽ trở thành vấn đề

Để giải quyết, ta dùng máy in gỉa cho mỗi máy như: touch /dev/eng.

Sửa đầu vào của lp trong printcap file ở trên như sau:

#touch /dev/eng #touch /dev/colour

---Kết thúc

9. Backing Up Windows Machines vào Linux Host

Script sau đây dùng tiện ích smbclient để backup Windows 3.x và NT machines vào Linux based DAT SCSI Drive do Adam Neat

Và sau đó là Windows backup script, của Dan Tager ( [email protected]), back up Unix machines qua rsh.

Chuỗi 'agnea1' là username trên Linux machine thực hiện việc backups.

#!/bin/bash

clearecho Initialising ...checkdate=`date | awk '{print $1}'`

Page 24: Cai dat samba

if [ -f "~agnea1/backup-dir/backup-data" ]; then

echo "ERROR: No config file for today!" echo "FATAL!" exit 1fi

if [ -d "~agnea1/backup-dir/temp" ]; then

echo "ERROR: No tempoary directory found!" echo echo "Attempting to create" cd ~agnea1 cd backup-dir mkdir temp echo "Directory Made - temp"fi

if [ "$1" = "" ]; then

echo "ERROR: enter in a machine name (ie: cdwriter)" exit 1fi

if [ "$2" = "" ]; then

echo "ERROR: enter in a SMB (Lan Manager) Resource (ie: work)" exit 1fi

if [ "$3" = "" ]; then

echo "ERROR: enter in an IP address for $1 (ie: 130.xxx.xxx.52)" exit 1fi

########################################################## Main Section##########################################################

cd ~agnea1/backup-dir/temprm -r ~agnea1/backup-dir/temp/*cd ~agnea1/backup-dir/

Page 25: Cai dat samba

case "$checkdate"in Mon) echo "Backuping for Monday" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Complete"

if [ -d "~agnea1/backup-dir/Monday" ]; then echo "Directory Monday Not found ... making" mkdir ~agnea1/backup-dir/Monday fi

echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf monday.tar * echo "done ..." rm ~agnea1/backup-dir/Monday/monday.tar mv monday.tar ~agnea1/backup-dir/Monday ;;

Tue) echo "Backuping for Tuesday" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Complete"

if [ -d "~agnea1/backup-dir/Tuesday" ]; then echo "Directory Tuesday Not found ... making" mkdir ~agnea1/backup-dir/Tuesday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf tuesday.tar * echo "done ..." rm ~agnea1/backup-dir/Tuesday/tuesday.tar mv tuesday.tar ~agnea1/backup-dir/Tuesday ;;

Wed)

Page 26: Cai dat samba

echo "Backuping for Wednesday" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Complete"

if [ -d "~agnea1/backup-dir/Wednesday" ]; then echo "Directory Wednesday Not found ... making" mkdir ~agnea1/backup-dir/Wednesday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf wednesday.tar * echo "done ..." rm ~agnea1/backup-dir/Wednesday/wednesday.tar mv wednesday.tar ~agnea1/backup-dir/Wednesday ;;

Thu) echo "Backuping for Thrusday" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Complete"

if [ -d "~agnea1/backup-dir/Thursday" ]; then echo "Directory Thrusday Not found ... making" mkdir ~agnea1/backup-dir/Thursday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf thursday.tar * echo "done ..." rm ~agnea1/backup-dir/Thursday/thursday.tar mv thursday.tar ~agnea1/backup-dir/Thursday ;;

Fri) echo "Backuping for Friday" cat backup-data | /usr/local/samba/bin/smbclient

Page 27: Cai dat samba

\\\\$1\\$2 -I$3 -N echo "Complete"

if [ -d "~agnea1/backup-dir/Friday" ]; then echo "Directory Friday Not found ... making" mkdir ~agnea1/backup-dir/Friday fi echo "Archiving ..." cd ~agnea1/backup-dir/temp tar -cf friday.tar * echo "done ..." rm ~agnea1/backup-dir/Friday/friday.tar mv friday.tar ~agnea1/backup-dir/Friday ;;

*) echo "FATAL ERROR: Unknown variable passed for day" exit 1;;

esac

backup script của Dan

#!/bin/bash

BACKDIR=3D/backupWINCMD=3D/usr/bin/smbclient

function CopyWinHost(){

# tars and gzips "windows shares" to a local directory using samba's# smbclient# argument 1 is the remote host window's host name# argument 2 is the share name to be backed up

echo $1,$2,$3 REMOTE=3D$1 SHARE=3D$2 DEST=3D$3

# create a tarred gzip file using samba to copy direct from a # windows pc

Page 28: Cai dat samba

# 12345 is a password. Needs some password even if not defined on # remote system $WINCMD \\\\$REMOTE\\$SHARE 12345 -Tc -|gzip > $DEST echo `date`": Done backing up "$REMOTE" to "$DEST echo}

function CopyUnixHost(){

# tars and gzips a directory using rsh# argument 1 is the name of the remote source host# argument 2 is the full path to the remote source directory# argument 3 is the name of the local tar-gzip file. day of week# plus .tgz will be appended to argument 3

REMOTE=3D$1 SRC=3D$2 DEST=3D$3

if rsh $REMOTE tar -cf - $SRC |gzip > $DEST; then echo `date`": Done backing up "$REMOTE":"$SRC" to "$DEST else echo `date`": Error backing up "$REMOTE":"$SRC" to "$DEST fi

}

# $1: win=3Dbackup windows machine, unix=3Dbackup unix machinecase $1 in win) # $2=3D remote windows name, $3=3Dremote share name, # $4=3Dlocal destination directory CopyWinHost $2 $3 $4;; unix) # $2 =3D remote host, $3 =3D remote directory, # $4 =3D destination name CopyUnixHost $2 $3 $4;;esac

10. Sử dụng Samba Across Routed Networks

Page 29: Cai dat samba

Andrew Tridgell cảnh báo rằng việc duyệt máy chủ SMB qua routers là vấn đề nan giải. Ông ta đề nghị như sau:

1) Mọi computers mà bạn có thể xem được phải được cài đặt chung một WINS server (Samba hay NT )

2) Bộ duyệt chính cho mỗi subnet phải là NT hay Samba. (không phải là Win9X)

3) Phải sử dụng cùng một tên workgroup cho mọi subnets. Điều này không thực sự cần thiết nhưng là cách đơn giản nhất để bảo đảm thành công. Nếu bạn không thể sắp đặt như vậy thì bạn phải tổ chức cách thức thông tin cho trình duyệt để propogate giữa các subnets. (Nó không propogate qua WINS). Nó propogates qua hai cơ cấu:

i) mỗi một bộ duyệt chính nhận biết các thông báo của workgroup từ các bộ duyệt chính khác trên một broadcast domain giống nhau

ii ) mỗi browse master giao tiếp với global DMB cho workgroup (tiêu biểu domain controller hay một Samba box được đánh dấu như là domain master) và trao đổi đầy đủ thông tin tình duyệt một cách định kỳ

Cũng như vậy, Rakesh Bharania chỉ ra rằng Cisco routers có thể được cấu hình để chuyển tiếp SMB traffic bằng cách cho phép trình duyệt. Đề nghị của ông ta là cấu hình giao diện đường truyền hosts SMB clients bằng lịnh:

ip helper-address x.x.x.x

x.x.x.x là địa chỉ IP của SMB server.