返回文章列表

Linux Samba伺服器安裝設定與故障排除

本文介紹在 Linux 系統上安裝、設定 Samba 伺服器,並分享如何組態分享目錄以及從 macOS、Windows 和 Linux 客戶端存取這些分享資源,同時也涵蓋了 Samba 服務的故障排除技巧,例如使用 dmesg 和系統日誌來診斷問題。

系統管理 網路管理

在 Linux 環境下,Samba 常被用來建立與 Windows 和 macOS 系統相容的檔案和印表機分享服務。正確設定 Samba 伺服器,包含設定分享目錄許可權、網路設定,以及使用者帳號管理,是確保跨平台檔案存取的關鍵。本篇除了 Samba 的基本安裝與設定外,更進一步說明如何透過 dmesg 指令以及系統日誌分析,快速找出並解決 Samba 服務可能發生的問題,讓系統管理員能更有效率地維護網路環境的穩定性。

在Linux系統上安裝與設定Samba伺服器

在設定Samba之前,必須先安裝Samba及其相關軟體。以下是在Linux系統上安裝Samba的步驟:

安裝Samba及其相依軟體

使用以下指令安裝Samba:

$ sudo yum install samba

內容解密:

  • sudo yum install samba:使用yum套件管理器安裝Samba。
  • yum會自動解析Samba的相依性並安裝所需的軟體包。

輸出範例如下:

Last metadata expiration check: 2:55:52 ago on Sat 08 Oct 2022 11:42:12 AM EDT.
Dependencies resolved.
=================================================================================
Package Architecture Version Repository Size
=================================================================================
Installing:
samba x86_64 4.14.5-7.el8_5 baseos 848 k
Installing dependencies:
libwbclient x86_64 4.14.5-7.el8_5 baseos 121 k
Samba-client-libs x86_64 4.14.5-7.el8_5 baseos 5.4 M
samba-common noarch 4.14.5-7.el8_5 baseos 221 k
Samba-common-libs x86_64 4.14.5-7.el8_5 baseos 173 k
samba-common-tools x86_64 4.14.5-7.el8_5 baseos 500 k
samba-libs x86_64 4.14.5-7.el8_5 baseos
Transaction Summary
=================================================================================
Install 7 Packages
Total download size: 7.4 M
Installed size: 25 M
Is this ok [y/N]: y

內容解密:

  • 上述輸出顯示了將要安裝的軟體包及其大小。
  • Transaction Summary總結了將要安裝的軟體包數量、下載大小及安裝後的大小。
  • 輸入y確認安裝。

啟動Samba服務

安裝完成後,需要啟動Samba服務(smbnmb):

$ sudo systemctl enable smb
$ sudo systemctl enable nmb
$ sudo systemctl start smb
$ sudo systemctl start nmb

內容解密:

  • sudo systemctl enable smbsudo systemctl enable nmb:設定smbnmb服務在系統啟動時自動啟動。
  • sudo systemctl start smbsudo systemctl start nmb:立即啟動smbnmb服務。

新增Samba使用者

由於Samba管理自己的使用者列表,因此需要將使用者新增至Samba使用者資料函式庫:

$ sudo smbpasswd -a 使用者名稱
New SMB password:
Retype new SMB password:
Added user 使用者名稱.

內容解密:

  • sudo smbpasswd -a 使用者名稱:新增一個Samba使用者。
  • 需要輸入並確認該使用者的Samba密碼。

管理Samba使用者群組

使用群組可以簡化大量使用者的管理。可以建立新的Linux群組或使用現有的群組,並授權群組存取分享目錄。

假設有一個名為facilities的Linux群組,包含多名成員,可以在Samba設定檔中新增以下設定,以允許該群組存取分享目錄:

valid users = @facilities

內容解密:

  • @facilities指涉的是名為facilities的Linux群組。
  • 該群組的成員將被視為該分享目錄的有效使用者。

為Mac和Windows客戶端提供服務

作為Linux系統管理員,需要提供與Windows和Mac客戶端相容的服務。透過Samba,可以實作Linux伺服器與Windows及Mac桌面環境之間的互操作性。

探索全域Samba設定

/etc/samba/smb.conf檔案的[global]部分,可以設定多個指令。以下是一些重要的指令:

[global]
load printers = yes
passdb backend = tdbsam
security = user
cups options = raw
workgroup = YOUR_DOMAIN_NAME
printcap name = cups
printing = cups
os level = 20

內容解密:

  • load printers = yes:載入印表機。
  • passdb backend = tdbsam:指定使用tdbsam作為密碼資料函式庫後端。
  • security = user:設定安全性層級為使用者級別。
  • workgroup = YOUR_DOMAIN_NAME:指定工作群組名稱,應替換為實際的網域名稱。

Samba 伺服器設定與分享目錄組態

Samba 是一種允許 Linux 系統與 Windows 系統之間進行檔案和列印分享的軟體。本文將介紹如何設定 Samba 伺服器、組態分享目錄以及從不同客戶端存取這些分享資源。

Samba 設定檔解析

Samba 的主要設定檔是 /etc/samba/smb.conf。這個檔案包含了 Samba 伺服器的基本設定、分享目錄的定義等重要資訊。

netbios name = SERVER1
browseable = yes
interfaces = lo eth0 192.168.1.0/24
hosts allow = 127. 192.168.1.

設定解說:

  • netbios name:定義 Samba 伺服器的 NetBIOS 名稱,在網路鄰居中可見。
  • browseable:設定是否允許在網路鄰居中瀏覽此分享。
  • interfaces:指定 Samba 服務監聽的網路介面。
  • hosts allow:限制可以存取 Samba 伺服器的主機 IP 範圍。

列印分享組態

雖然大多數系統直接透過 IP 位址列印,但 Samba 仍支援列印分享。範例組態如下:

[printers]
comment = All Printers
path = /var/tmp
printable = yes
create mask = 0600
browseable = no

[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775

列印分享解說:

  • [printers][print$] 分別用於分享列印機和列印機驅動程式。
  • printable = yes 表示允許列印。
  • write listforce group 用於控制哪些使用者可以寫入列印機驅動程式目錄。

lmhosts 檔案的使用

lmhosts 檔案用於解析 NetBIOS 名稱與 IP 位址的對應關係,類別似於 /etc/hosts 檔案。

127.0.0.1 localhost
192.168.1.50 testserv1 #PRE
192.168.1.100 DC1 #PRE #DOM:WEST

lmhosts 解說:

  • #PRE 表示預先載入快取。
  • #DOM:domain 指定網域名稱,用於網域控制站。

組態分享目錄

/etc/samba/smb.conf 中定義分享目錄,例如:

[Facilities]
create mode = 0660
writeable = yes
path = /opt/facilities
comment = Facilities Group Share
directory mode = 0770
valid users = @facilities
browseable = yes

分享目錄解說:

  • [Facilities] 是分享名稱。
  • valid users = @facilities 限制只有 facilities 群組的使用者可以存取。
  • create modedirectory mode 設定檔案和目錄的預設許可權。

從不同客戶端存取 Samba 分享

macOS 客戶端

macOS 使用者可以在 Finder 中瀏覽並掛載 Samba 分享。

Windows 客戶端

Windows 使用者可以透過網路鄰居瀏覽並對映 Samba 分享為本地磁碟機。

Linux 客戶端

Linux 使用者可以使用 smbclient 命令瀏覽 Samba 分享,並使用 mount -t cifs 命令掛載遠端分享。

$ smbclient -U "Ken Hess" -L WIN10
$ sudo mount -t cifs \\\\WIN10\\Files /mnt

解決Linux系統問題的基礎

Linux系統管理員經常面臨各種挑戰,從核心恐慌到檔案系統錯誤。與其急於重新安裝系統,不如花時間調查問題的根源。本章將介紹基本的故障排除概念和工具,幫助您應對常見的Linux系統問題。

核心恐慌的處理

核心恐慌通常是由於initramfs檔案損壞或不正確建立引起的。遇到核心恐慌時,請按照以下步驟進行故障排除:

  1. 重新啟動系統:首先,嘗試重新啟動系統。如果問題仍然存在,請進入下一步。
  2. 進入救援模式:使用可啟動的ISO映像或從Grub選單進入救援模式。
  3. 檢查核心版本:使用uname -r命令檢查目前的核心版本。
    # uname -r
    3.10.0-327.el7.x86_64
    
  4. 重新建立initramfs檔案:使用dracutmkinitrd命令重新建立initramfs檔案。
    # dracut -f /boot/initramfs-3.10.0-327.el7.x86_64.img 3.10.0-327.el7.x86_64
    
    如果出現錯誤訊息,請使用--force選項強制覆寫現有的initramfs檔案。
    # mkinitrd --force /boot/initramfs-3.10.0-327.el7.x86_64.img 3.10.0-327.el7.x86_64
    
  5. 重新啟動系統:完成上述步驟後,重新啟動系統以檢查問題是否已解決。

內容解密:

  • uname -r命令用於顯示目前執行的核心版本,這有助於確定要重新建立的initramfs檔案版本。
  • dracutmkinitrd命令用於重新建立initramfs檔案,這是解決核心恐慌的關鍵步驟。
    • dracut是一個用於建立initramfs映像的工具,它會根據目前系統組態和核心版本生成合適的initramfs檔案。
    • mkinitrd是另一個類別似的工具,用於建立初始RAM磁碟映像。某些系統可能使用此命令代替dracut

安裝新核心

如果重新建立initramfs檔案無法解決問題,您可能需要安裝新的核心。請按照以下步驟進行:

  1. 掛載ISO映像:將ISO映像掛載到適當的目錄,例如/opt/mnt
  2. 安裝新核心:使用rpm命令安裝ISO映像中的新核心套件。
    # cd /opt/mnt/install/repo/Packages
    # rpm -Uvh --root=/mnt/sysimage kernel-3.10.0-1127.10.1.el7.x86_64.rpm
    
  3. 重新啟動系統:完成安裝後,重新啟動系統以檢查新核心是否正常運作。

內容解密:

  • rpm -Uvh命令用於升級或安裝新的RPM套件。在此情況下,它用於安裝新的核心套件。
    • --root=/mnt/sysimage選項指定了安裝目標系統的根目錄,這在救援模式下非常有用。

檢視系統日誌

當遇到系統問題時,檢視系統日誌是故障排除的重要步驟。系統日誌通常位於/var/log目錄下,包含了各種錯誤訊息和事件記錄。

使用Plantuml圖表說明日誌分析流程

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Linux Samba伺服器安裝設定與故障排除

package "Linux Shell 操作" {
    package "檔案操作" {
        component [ls/cd/pwd] as nav
        component [cp/mv/rm] as file
        component [chmod/chown] as perm
    }

    package "文字處理" {
        component [grep] as grep
        component [sed] as sed
        component [awk] as awk
        component [cut/sort/uniq] as text
    }

    package "系統管理" {
        component [ps/top/htop] as process
        component [systemctl] as service
        component [cron] as cron
    }

    package "管線與重導向" {
        component [| 管線] as pipe
        component [> >> 輸出] as redirect
        component [$() 命令替換] as subst
    }
}

nav --> file : 檔案管理
file --> perm : 權限設定
grep --> sed : 過濾處理
sed --> awk : 欄位處理
pipe --> redirect : 串接命令
process --> service : 服務管理

note right of pipe
  命令1 | 命令2
  前者輸出作為後者輸入
end note

@enduml

此圖示說明瞭基本的故障排除流程,從檢查系統日誌開始,到根據錯誤訊息進行修復,最終測試修復結果。

內容解密:

  • 此Plantuml圖表展示了故障排除的基本流程,強調了檢查和分析系統日誌的重要性。
  • 從開始故障排除到最終解決問題,每一步驟都與前一步驟緊密相關,形成了一個迴圈直到問題得到解決。

總之,Linux系統故障排除需要耐心和細致的調查。透過瞭解和應用上述步驟,您可以有效地解決許多常見的系統問題,從而提高系統的穩定性和可靠性。

Linux 故障排除

透過 dmesg 指令排除系統錯誤

在 Linux 系統中,dmesg 指令是一個非常有用的工具,可以用來檢查系統啟動過程中的錯誤訊息。首先,我們可以使用以下指令來篩選出包含 “error” 的訊息:

$ dmesg | grep -i error
[ 2.229324] RAS: Correctable Errors collector initialized.
[ 3.820963] [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
[ 3.829724] [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.

內容解密:

  • dmesg 指令用於顯示系統啟動過程中的訊息。
  • grep -i error 用於篩選出包含 “error” 的訊息,-i 選項表示忽略大小寫。
  • 上述輸出結果顯示了系統啟動過程中出現的錯誤訊息,包括 “Failed to send host log message”。

如果沒有發現相關的錯誤訊息,可以使用其他關鍵字,如 “fault”、“failed”、“undefined” 或 “unknown” 來進行搜尋:

$ dmesg | grep -i failed
[ 3.820963] [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.
[ 3.829724] [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.

內容解密:

  • 使用 grep -i failed 來搜尋包含 “failed” 的訊息。
  • 上述輸出結果顯示了系統啟動過程中出現的失敗訊息。

檢查系統日誌

系統日誌是另一個重要的故障排除工具。我們可以透過以下指令來檢查系統日誌:

$ cd /var/log
$ sudo grep -ir error *

內容解密:

  • /var/log 目錄存放了系統日誌檔案。
  • sudo grep -ir error * 用於搜尋所有日誌檔案中包含 “error” 的訊息,-i 選項表示忽略大小寫,-r 選項表示遞迴搜尋。

如果輸出結果過多,可以將結果重定向到一個檔案中:

$ sudo grep -ir error * > ~/errors.txt

內容解密:

  • 將搜尋結果重定向到 ~/errors.txt 檔案中,以便進一步分析。

軟體故障排除

軟體故障排除可能比較複雜,因為軟體問題的根本原因可能不在軟體本身,而是在硬體、其他軟體、檔案損壞或組態問題等方面。因此,我們需要檢查應用程式日誌和系統日誌,以找出錯誤訊息和錯誤程式碼。

檢查應用程式日誌

應用程式日誌通常位於 /var/log 目錄下,或是應用程式的主目錄下的 loglogs 子目錄中。例如,Apache 的日誌檔案通常位於 /var/log/httpd 目錄下。

利用內部應用程式檢查工具

一些開發者會提供內部檢查工具,以幫助使用者識別和排除問題。例如,Apache HTTP Server 提供了一個 configtest 工具,可以用來檢查組態語法:

$ apachectl configtest
Syntax OK

內容解密:

  • apachectl configtest 用於檢查 Apache HTTP Server 的組態語法。
  • 如果組態正確,會輸出 “Syntax OK”。

如果組態有誤,會輸出錯誤訊息:

$ apachectl configtest
AH00526: Syntax error on line 34 of /etc/httpd/conf/httpd.conf:
Invalid command 'ServerBoot', perhaps misspelled or defined by a module not included in the server configuration

內容解密:

  • 上述輸出結果顯示了組態檔案中的錯誤訊息,包括錯誤的行號和錯誤的原因。