如何在 Linux 上安裝Samba
本文轉載自微信公眾號「Linux開發那些事兒」,作者LinuxThings。轉載本文請聯系Linux開發那些事兒公眾號。
Linux 開發,通常是在 Windows 上編碼,再把文件傳到 Linux 上進行編譯,當項目稍微有點兒規模或者多個人同時開發時,整個過程會變得非常的繁瑣了,如果有一種工具能實現,編寫的代碼實時的同步到 Linux 上就好了。
samba 就能很好的解決這個問題,它 是一個免費的開源軟件,由澳大利亞國立大學的一名學生開發的,它允許在 Windows 和 Linux 系統之間簡單輕松地共享文件。它能為選定的 Linux 目錄(包括所有子目錄)創建網絡共享,使得 Windows 用戶可以像訪問普通 Windows 下的文件夾那樣來通過網絡訪問這些 Linux 目錄,下面將詳細介紹 samba 服務器的安裝以及配置過程
安裝
使用下面的命令進行安裝
- yum install samba samba-common samba-client
安裝完成之后, 執行 smbd -V 命令,輸出 samba 服務器的版本信息,表示安裝成功
- [root@cghost21 ~]# smbd -V
- Version 4.10.16
服務器配置
samba 服務器安裝完成之后,需要調整服務器的一些配置參數,配置文件默認位于 /etc/samba/smb.conf,在修改之前,可以先把原始的配置文件備份下
- [root@cghost21 ~]# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
如果 smb.conf 的一行以 "#" 或 ";" 開頭, 表示這一行是注釋
- 新建 Linux 用戶
添加新用戶,并設置密碼
- [root@cghost21 ~]# useradd smbusr1 -s /sbin/nologin
- [root@cghost21 ~]# passwd smbusr1
注意:此處添加的用戶 smbusr1 只用作 創建 samba 登錄用戶的用途,因為 新建 samba 用戶的時候,需要保證相同名字的 Linux 用戶是存在并且設置了密碼,否則,新建 samba 用戶時會失敗
由于用戶 smbusr1 只是用于新建 samba 用戶,所以,新建時加上了 -s /sbin/nologin ,表示禁止此用戶登錄 Linux 系統,這么做也是為了安全性考慮
- 新建 samba 用戶
執行下面的命令,新建 samba 用戶 smbusr1 ,并設置密碼
- [root@cghost21 home]# smbpasswd -a smbusr1
- New SMB password:
- Retype new SMB password:
- Added user smbusr1.
- 添加用戶共享目錄
為 samba 用戶 smbusr1 新建共享目錄,并賦予目錄權限
- [root@cghost21 home]# mkdir -p /samba/smbusr1
- [root@cghost21 home]# chown -R smbusr1:smbusr1 /samba/smbusr1
- 配置 smb.conf
samba 服務器可配置項非常多,這里只介紹一些常用的配置項,更多的配置項請參考 smb.conf.org
- #全局配置
- [global]
- # samba 工作組
- workgroup = mygroup
- # 服務器的說明字符串,%V 表示服務器的版本號
- server string=smb server %V
- # 安全模式,user 表示需要身份驗證
- security = user
- # samba 服務器名, 最長15個字符
- netbios name = myserver
- #拒絕非法用戶登錄
- map to guest = bad user
- # samba 服務器日志
- log file = /var/log/samba/smblog
- # 服務器日志最大大小,單位:KB
- # 服務器 會定期檢查大小,如果超過,它將重命名文件,添加 .old 擴展名
- # 為 0 表示沒有限制
- max log size = 10000
- [smbusr1]
- # smbusr1 用戶的共享的目錄
- path=/samba/smbusr1
- # 禁止匿名訪問
- public=no
- # 是否可寫
- writable=yes
- # 目錄可寫的用戶組
- write list=@smbusr1
- # 訪問目錄的用戶
- valid users=smbusr1
修改完配置后,執行 testparm 命令來檢查 smb.conf 的語法錯誤
- [root@cghost21 home]# testparm
- Load smb config files from /etc/samba/smb.conf
- Loaded services file OK.
- Server role: ROLE_STANDALONE
- Press enter to see a dump of your service definitions
從上面的結果可以看出,smb.conf 沒有語法錯誤
- 設置防火墻
samba 服務器啟動會后,默認會監聽 139 和 445 端口,可以通過下面的命令查看 samba 服務器偵聽的端口
- [root@cghost21 home]# netstat -an4p | grep smbd | grep LISTEN
- tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 23370/smbd
- tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 23370/smbd
如果 samba 服務器所在的機器上開啟了防火墻服務,則需要開放 139 和 445 端口,然后重啟防火墻服務
- [root@localhost ~]# firewall-cmd --zone=public --add-port=139/tcp --permanent
- success
- [root@localhost ~]# firewall-cmd --zone=public --add-port=445/tcp --permanent
- success
- [root@localhost ~]# systemctl restart firewalld
- 啟動 samba 服務器
經過上面的步驟,最后啟動 samba 服務器
[root@cghost21 home]# systemctl start smb
客戶端配置
samba 客戶端配置起來也很簡單,從 Linux 映射一個網絡驅動器 到 Windows,外表看起來 Windows 中多了一塊磁盤,只不過這塊磁盤是對應網絡中 Linux 機器中的一個目錄,往這塊磁盤中寫入數據,相當于往 Linux 目錄中寫入數據
1、打開我的電腦,點擊映射網絡驅動器,然后輸入Linux上共享文件夾的地址,點擊完成,具體如下圖所示
2、輸入前面 samba 用戶名和密碼 ( 前面的步驟有添加過 samba 用戶名和密碼 ),點擊確定,具體如下圖
3、samba 服務器驗證用戶名和密碼成功之后,Windows 會進入共享文件夾,它在 Windows 上看起來像一個硬盤的盤符一樣,請看下圖
至此,Windows 映射 Linux 機器上共享目錄就完成了,接下來,就能以 Windows 操作的方式向網絡驅動器中寫入數據了,所寫入的數據會實時同步到 Linux 機器的共享目錄 /samba/smbusr1 中
常見問題
在配置 samba 服務器以及客戶端的過程中,或多或少會出現一些問題,下面列出了幾種常見的錯誤
- 錯誤1
檢查下 smb.conf 中是否沒有配置對應用戶的訪問配置,或者是對應的 samba 用戶不存在
- 錯誤2
Windows 本地在同一個遠程機器上已經映射了網絡驅動器,需要先斷開之前的,才能映射新的
- 錯誤3
共享目錄權限設置問題,需修改共享目錄 /samba/smbusr2 的權限
小結
Linux 服務器通常沒有圖形界面,使用起來不如 Windows 簡單直觀,samba 服務器實現了 將 Linux 命令行轉化成 Windows 圖形界面的操作,大大方便了 Linux 的開發,提高了開發效率,搭配上版本管理工具 SVN ,samba 還非常適合個人學習以及小的開發團隊之間的協作