Kết nối, chia sẻ mạng LAN với với Windows bằng Samba trên Arch Linux

Samba cho phép người dùng Linux có thể kết nối và chia sẻ với các máy tính sử dụng hệ điều hành Windows (gọi tắt là máy tính Windows) thông qua giao thức SMB/CIFS, nó cũng là giải pháp thay thế cho giao thức NFS trong việc in, chia sẻ máy in qua mạng giữa hai hệ điều hành Linux và Windows. Samba rất dễ dàng cài đặt và cấu hình, có thể sử dụng ngay sau khi cài đặt.

Máy chủ tập tin Samba
Máy chủ tập tin Samba

Cài đặt các gói cần thiết

[sourcecode language=”bash”]sudo pacman -S samba smbclien[/sourcecode]

Cấu hình cho Samba

Samba sử dụng cấu hình trong tập tin /etc/samba/smb.conf để khởi tạo dịch vụ. Thông thường Samba hoạt động với các thiết lập mặc định ngay mà gần như không cần thay đổi
[sourcecode language=”bash”]sudo cp /etc/samba/smb.conf.default /etc/samba/smb.conf[/sourcecode]
Để chia sẻ một thư mục, chúng ta sửa các nội dung tại phần Share Definitions trong /etc/samba/smb.conf, chẳng hạn:
[sourcecode language=”xml”][shared_folder"]
comment = This folder shared
path = /home/user/shared_folder
guest ok = yes
writable = yes
read only = no
public = yes
[/sourcecode]
Samba hoạt động dưới dạng một dịch vụ của hệ điều hành, để nó tự khởi tạo cùng với hệ thống thì ta cần khai báo nó trong /etc/rc.conf
[sourcecode language=”xml”]DAEMONS=(… … samba … …)[/sourcecode]

Quản lý dịch vụ Samba

[sourcecode language=”bash”]sudo rc.d {start|stop|restart} samba[/sourcecode]
Để kết nối tới Samba từ một máy khác, chúng ta cần tài khoản để đăng nhập vào dịch vụ này. Thông thường, tài khoản đăng nhập vào Samba nên trùng với tài khoản người dùng trên máy khách.
[sourcecode language=”bash”]sudo pdbedit -a -u user[/sourcecode]
Samba cũng cung cấp phương thức quản trị qua giao diện web gọi là SWAT dựa trên dịch vụ xinetd. Trước tiên, chúng ta cài đặt xinetd
[sourcecode language=”bash”]sudo pacman -S xinetd[/sourcecode]
Sửa tập tin cấu hình /etc/xinetd.d/swat để kích hoạt SWAT
[sourcecode language=”xml”]service swat
{
type = UNLISTED
protocol = tcp
port = 901
socket_type = stream
wait = no
user = root
server = /usr/sbin/swat
log_on_success += HOST DURATION
log_on_failure += HOST
disable = no
}[/sourcecode]
Địa chỉ truy cập SWAP là http://localhost:901/, tất nhiên để SWAP hoạt động thì dịch vụ xinetd phải được khởi động trước.
[sourcecode language=”xml”]sudo rc.d {start|stop|restart} xinetd[/sourcecode]

Kết nối với máy tính Windows

Để kết nối tới máy tính Windows, bạn cần biết được các thông số cơ bản là: IP, Nhóm mạng, Tên đăng nhập, Mật khẩu trong đó Nhóm mạng thường là WORKGROUP hoặc MSHOME
Có nhiều phương thức kết nối với máy tính Windows, cả thủ công, cả tự động. Đối với phương pháp tự động tôi sẽ không đề cập trong bài viết này, bởi vì sau khi bạn kết nối thủ công được với máy tính Windows thì có rất nhiều phương pháp hỗ trợ cho phép nó tự động kết nối.
Tôi sử dụng smbclient để truy cập vào máy tính Windows.
Liệt kê các thành phần được chia sẻ trên máy tính Windows
[sourcecode language=”bash”]smbclient -L <hostname> -U%[/sourcecode]
cần lưu ý là trong nhiều trường hợp bạn sẽ gặp lỗi

Error returning browse list: NT_STATUS_ACCESS_DENIED

có nhiều nguyên nhân khác nhau đối với lỗi này, nhưng phổ biến nhất là nó không cho phép kết nối vô danh hay còn gọi là kết nối khách tới hệ thống Windows. Các giải quyết vấn đề này là bạn khai báo thêm tên đăng nhập và mật khẩu của tài khoản chia sẻ trên máy tính Windows
[sourcecode language=”bash”]smbclient -L hostname -U user
Enter user’s password:[/sourcecode]
Kết quả nhận được:
[sourcecode language=”bash”] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

Sharename Type Comment
——— —- ——-
E$ Disk Default share
IPC$ IPC Remote IPC
D$ Disk Default share
print$ Disk Printer Drivers
HPLaserJ Printer HP LaserJet 1160
New Folder Disk
ADMIN$ Disk Remote Admin
C$ Disk Default share

Domain=[VO2] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

Server Comment
——— ——-

Workgroup Master
[/sourcecode]
Như ta thấy, smbclient đã liệt kê các thành phần của máy tính Windows được chia sẻ, để kết nối và truy cập vào nội dung thì chúng ta sẽ gắn (mount) nó tới một vị trí được chỉ định trên máy tính Linux.
[sourcecode language=”bash”]sudo mkdir /mnt/MOUNTPOINT[/sourcecode]
Gắn thành phần được chia sẻ với thư mục được chỉ định bằng mount.cifs
[sourcecode language=”bash”]sudo mount -t cifs //SERVER/SHARENAME /mnt/MOUNTPOINT -o user=USERNAME,password=PASSWORD,workgroup=WORKGROUP,ip=SERVERIP[/sourcecode]
Gỡ bỏ điểm truy cập vào máy tính Windows
[sourcecode language=”bash”]sudo umount /mnt/MOUNTPOINT[/sourcecode]

Kết nối tới Samba

Cài đặt các gói hỗ trợ các kết nối từ các Môi trường đồ họa khác nhau
[sourcecode language=”bash”]sudo pacman -S gvfs-smb gnome-vfs[/sourcecode]
Cần khởi động lại dịch vụ samba nếu nó đang hoạt động.
Kết nối tới Samba bằng địa chỉ
[sourcecode language=”bash”]smb://servername/shares[/sourcecode]
Nếu hệ thống có sử dụng iptables thì cần nạp thêm thành phần nf_conntrack_netbios_ns
[sourcecode language=”xml”]modprobe nf_conntrack_netbios_ns[/sourcecode]
Như vậy, bạn đã biết cách dùng máy chủ Samba để chia sẻ và kết nối từ hệ điều hành Linux với các hệ thống sử dụng hệ điều hành Windows và ngược lại. Có rất nhiều công cụ hỗ trợ tác vụ này một cách tự động, bạn có thể dùng thử Autofs.