debian: ติดตั้ง samba

Topic: 
 

เอามาจาก ThaiLinuxCafe - debian : ติดตั้ง samba อย่างง่าย

โครงร่างคือ

ชื่อเซิร์ฟเวอร์
server1 : 192.168.1.5
แชร์ที่อ่านได้อย่างเดียว
//server1/app จะให้อยู่ที่ /samba/app ( เพื่อเร่งความเร็วและป้องกันไวรัส )
แชร์ที่อ่าน/เขียนได้
//server1/data จะให้อยู่ที่ /samba/data
ชื่อ Workgroup
smbdomain
กรุ๊ปที่มีสิทธิ์ใช้งาน
smbgroup ให้มี gid=1001
ผู้ใช้ที่มีสิทธิ์ใช้งาน
user1, user2, user3, ... ให้มี uid=1101, 1102, 1103, ...
ผู้ควบคุมระบบ
smb-admin ให้มี uid=1100
เครื่องลูกข่าย
client01, client02, ... ให้มีไอพีเป็น 192.168.1.101, 192.168.1.102, ...

เริ่มด้วย

ที่เซิร์ฟเวอร์

ติดตั้ง samba
# aptitude install samba

Workgroup/Domain Name:
<<<--- smbdomain

Modify smb.conf to use WINS settings from DHCP?
<<<--- No

เพิ่มกรุ๊ปในการใช้งาน samba
# groupadd -g 1001 smbgroup

สร้างสคริปต์ในการเพิ่มผู้ใช้ ให้มีรหัสผ่านเดียวกัน (passwd กับ smbpasswd) ตั้งชื่อว่า d.addsmb
# vi /usr/local/bin/d.smbadd

#!/bin/bash
if [ ! $3 ]; then
  echo "Usage: $0 USERNAME UID PASSWORD"
  exit 1;
fi
GROUPNAME="smbgroup"
USERNAME=$1
USERID=$2
PASSWORD=$3
/usr/sbin/useradd -g $GROUPNAME -u $USERID -m $USERNAME
echo "$USERNAME:$PASSWORD" | /usr/sbin/chpasswd
(echo "$PASSWORD"; echo "$PASSWORD") | smbpasswd -a -s $USERNAME
echo "User: $USERNAME , uid: $USERID added."

เวลาเพิ่มผู้ใช้ก็สั่ง
# d.smbadd user1 1101 USER1-PASSWORD
...

ทำไปจนครบผู้ใช้

เพิ่มผู้ใช้ของ samba ที่เป็นผู้คุมระบบ ให้ชื่อว่า smb-admin
# d.smbadd smb-admin 1100 SMB-ADMIN-PASSWORD

สร้างไดเรคทอรี่สำหรับแชร์ไฟล์ ตั้งชื่อว่า /samba
# mkdir -p /samba/app
# mkdir -p /samba/data

เปลี่ยนสิทธิ์การใช้งานไดเรคทอรี่ samba
# chown -R smb-admin:smbgroup /samba
# chmod 0750 /samba/app
# chmod 0770 /samba/data

ตั้งค่าการใช้งานให้ samba
# vi /etc/samba/smb.conf
เฉพาะค่าที่เราจะเปลี่ยนแปลง

[global]
    workgroup = smbdomain
    security = user
    unix charset = utf8
    display charset = utf8
    lock spin time = 15        ;; for dbase/foxpro record lock
    lock spin count = 30      ;; for dbase/foxpro record lock
    unix extensions = yes

[app]
    comment = Application Dir
    path = /samba/app
    valid users = @smbgroup
    admin users = smb-admin
    public = no
    create mask = 0750
    directory mask = 0750
    fake oplocks = yes        ;; increase speed
    writable = no

[data]
    comment = Data Dir
    path = /samba/data
    valid users = @smbgroup
    public = no
    create mask = 0770
    directory mask = 0770
    writable = yes

แก้ไขไฟล์ hosts ให้เครื่องลูกข่ายติดต่อได้
# vi /etc/hosts

192.168.1.1      server1.example.com    server1
192.168.1.101    client01.example.com    client01
192.168.1.102    client02.example.com    client02
192.168.1.103    client03.example.com    client03
...

เริ่มการทำงาน samba ใหม่
# /etc/init.d/samba restart


ส่วนของเครื่องลูกข่าย

เรียกใช้งานจากลินุกส์

ติดตั้ง smbclient
# aptitude install smbclient smbfs

สร้างจุดเมาต์
# mkdir -p /mnt/app
# mkdir -p /mnt/data

แก้ไขข้อมูล hosts ให้เหมือนกับที่เครื่อง server1
# vi /etc/hosts

192.168.1.1      server1.example.com    server1
192.168.1.101    client01.example.com    client01
192.168.1.102    client02.example.com    client02
192.168.1.103    client03.example.com    client03
...

ทำการเมาต์
- การเมาต์แบบ cifs จะทำให้การแสดงชื่อไฟล์เป็นภาษาไทยได้อย่างถูกต้อง
$ sudo mount -t cifs -o username=user1,password=PASSWORD,iocharset=utf8 //server1/app /mnt/app
$ sudo mount -t cifs -o username=user1,password=PASSWORD,iocharset=utf8 //server1/data /mnt/data

- หรือเมาต์แบบ smbfs จะทำให้การล๊อกเรคคอร์ดของโปรแกรมฐานข้อมูลบนไฟล์ แบบ access,dbase,foxpro
ทำงานถูกต้อง
$ sudo mkdir -p /mnt/smbfs/app
$ sudo mkdir -p /mnt/smbfs/data
$ sudo mount -t smbfs -o username=user1,password=PASSWORD,uid=1101,gid=1001 //server1/app /mnt/smbfs/app
$ sudo mount -t smbfs -o username=user1,password=PASSWORD,uid=1101,gid=1001 //server1/data /mnt/smbfs/data

เราสามารถใช้งานไฟล์เซิร์ฟเวอร์ server1 ได้จากจุดเมาต์ /mnt/app และ /mnt/data ตามต้องการ
( ถ้าจะเขียนลง /mnt/app ให้ใช้ชื่อเป็น smb-admin จึงจะสามารถเขียนได้ )

update 50-10-20
ตอนที่ทดลองนี้ cifs บนเดเบียน sid (samba-3.0.26a-1) แก้ปัญหาเรื่องแคชไม่ตรง และล๊อกเรคคอร์ดช้าได้แล้ว
โดยการแก้ไขไฟล์ smb.ini ในหมวด share ให้มีพารามิเตอร์คือ

[data]
    ...
    strict locking = yes
    oplocks = yes
    level2 oplocks = no
    ...

และเมานต์ด้วยพารามิเตอร์ directio เช่น
$ sudo mount -t cifs //server1/data /mnt/smbfs/data -o username=USER,password=PASSWORD,iocharset=utf8,directio

จะสามารถล๊อกเรคคอร์ดได้ตรงและแก้ปัญหาแคชไฟล์ได้แล้วครับ
*****

เรียกใช้งานจาก Windows98/Me

ที่เครื่อง client01 ติดตั้งโดย
Start -> Control Panel -> Network

[TAB] Configuration :
    TCP/IP -> การ์ดไดร์ฟเวอร์ : Properties
        [TAB] DNS Configuration :
            Enable DNS
            DNS Server Search Order : 192.168.1.5
            Domain Suffix Search Order : server1.example.com
        [TAB] IP Address
            Specify an IP address : 192.168.1.101
            Subnet Mask : 255.255.255.0
[TAB]Identification : Workgroup = smbdomain

เรียกใช้งานโดย
คลิกขวา Network Neighbourhood
Map Network Drive
Drive : I:
Path : \\server1\app

เกร็ดเพิ่มเติม

พิมพ์จากดอสใน WinXP
  • คำสั่งคือ
    net use lpt1: \\server\share
  • แก้ปัญหาพิมพ์ช้า ต้องแก้ที่ registry
    Start -> run -> regedit
    HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -&gt WOW
    LPT_Timeout = 1

    เอามาจาก Printing delays from DOS apps under Windows