CentOS7下Samba服務器搭建

供自己複習使用。大部分摘自網絡,侵權立刪。
https://blog.csdn.net/qq_38410730/article/details/80500920?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://blog.csdn.net/weixin_40806910/article/details/81917077

http://www.apelearn.com/study_v2/chapter24.html

對於本人來說,知道Samba是什麼,用來幹什麼,怎麼用就夠了。。。

samba是什麼

samba 是基於SMB協議(ServerMessage Block,信息服務塊)的開源軟件,samba也可以是SMB協議的商標。SMB是一種Linux、UNIX系統上可用於共享文件和打印機等資源的協議,這種協議是基於Client\Server型的協議,Client端可以通過SMB訪問到Server(服務器)上的共享資源。當Windows是 Client,CentOS是服務器時,通過Samba就可以實現window訪問Linux的資源,實現兩個系統間的數據交互。

安裝Samba
通過yum 安裝

yum -y install samba

Samba服務器相關的配置文件

  • /etc/samba/smb.conf
    這是samba的主要配置文件,基本上僅有這個文件,而且這個配置文件本身的說明非常詳細。主要的設置包括服務器全局設置,如工作組、NetBIOS名稱和密碼等級,以及共享目錄的相關設置,如實際目錄、共享資源名稱和權限等兩大部分。
  • /etc/samba/lmhosts
    早期的 NetBIOS name 需額外設定,因此需要這個 lmhosts 的 NetBIOS name 對應的 IP 檔。 事實上它有點像是 /etc/hosts 的功能!只不過這個 lmhosts 對應的主機名是 NetBIOS name 喔!不要跟 /etc/hosts 搞混了!目前 Samba 預設會去使用你的本機名稱 (hostname) 作爲你的 NetBIOS name,因此這個檔案不設定也無所謂。
  • /etc/sysconfig/samba
    提供啓動 smbd, nmbd 時,你還想要加入的相關服務參數。
    /etc/samba/smbusers
    由於 Windows 與 Linux 在管理員與訪客的賬號名稱不一致,例如: administrator (windows) 及 root(linux), 爲了對應這兩者之間的賬號關係,可使用這個檔案來設定
  • /var/lib/samba/private/{passdb.tdb,secrets.tdb}
    管理 Samba 的用戶賬號/密碼時,會用到的數據庫檔案;
  • /usr/share/doc/samba-<版本>
    這個目錄包含了 SAMBA 的所有相關的技術手冊

至於常用的腳本文件案方面,若分爲服務器與客戶端功能,則主要有底下這幾個數據:

  • /usr/sbin/{smbd,nmbd}:服務器功能,就是最重要的權限管理 (smbd) 以及 NetBIOS name 查詢 (nmbd) 兩個重要的服務程序;

  • /usr/bin/{tdbdump,tdbtool}:服務器功能,在 Samba 3.0
    以後的版本中,用戶的賬號與密碼參數已經轉爲使用數據庫了!Samba 使用的數據庫名稱爲 TDB (Trivial DataBase)。
    既然是使用數據庫,當然要使用數據庫的控制指令來處理囉。tdbdump 可以察看數據庫的內容,tdbtool 則可以進入數據庫操作接口直接手動修改帳密參數。不過,你得要安裝 tdb-tools 這個軟件才行;

  • /usr/bin/smbstatus:服務器功能,可以列出目前 Samba 的聯機狀況, 包括每一條 Samba 聯機的 PID, 分享的資源,使用的用戶來源等等,讓你輕鬆管理 Samba 啦;

  • /usr/bin/{smbpasswd,pdbedit}:服務器功能,在管理 Samba 的用戶賬號密碼時, 早期是使用 smbpasswd 這個指令,不過因爲後來使用 TDB 數據庫了,因此建議使用新的 pdbedit 指令來管理用戶數據;

  • /usr/bin/testparm:服務器功能,這個指令主要在檢驗配置文件 smb.conf 的語法正確與否,當你編輯過 smb.conf
    時,請務必使用這個指令來檢查一次,避免因爲打字錯誤引起的困擾啊!

  • /sbin/mount.cifs:客戶端功能,在 Windows 上面我們可以設定『網絡驅動器機』來連接到自己的主機上面。在 Linux 上面,我們則是透過 mount (mount.cifs) 來將遠程主機分享的檔案與目錄掛載到自己的 Linux 主機上面哪!

  • /usr/bin/smbclient:客戶端功能,當你的 Linux主機想要藉由『網絡上的芳鄰』的功能來查看別臺計算機所分享出來的目錄與裝置時,就可以使用 smbclient來查看啦!這個指令也可以使用在自己的 SAMBA 主機上面,用來查看是否設定成功哩!

  • /usr/bin/nmblookup:客戶端功能,有點類似 nslookup 啦!重點在查出 NetBIOS name 就是了

  • /usr/bin/smbtree:客戶端功能,這玩意就有點像 Windows
    系統的網絡上的芳鄰顯示的結果,可以顯示類似『靠近我的計算機』之類的數據, 能夠查到工作組與計算機名稱的樹狀目錄分佈圖!

配置文件說明

Samba的主配置文件爲/etc/samba/smb.conf

主配置文件由兩部分構成

    Global Settings

  該設置都是與Samba服務整體運行環境有關的選項,它的設置項目是針對所有共享資源的。

    Share Definitions 

  該設置針對的是共享目錄個別的設置,只對當前的共享資源起作用。

全局參數:

#==================Global Settings ===================
[global]

config file = /usr/local/samba/lib/smb.conf.%m
說明:config file可以讓你使用另一個配置文件來覆蓋缺省的配置文件。如果文件不存在,則該項無效。這個參數很有用,可以使得samba配置更靈活,可以讓一臺 samba服務器模擬多臺不同配置的服務器。比如,你想讓PC1(主機名)這臺電腦在訪問Samba Server時使用它自己的配置文件,那麼先在/etc/samba/host/下爲PC1配置一個名爲smb.conf.pc1的文件,然後在 smb.conf中加入:config file = /etc/samba/host/smb.conf.%m。這樣當PC1請求連接Samba Server時,smb.conf.%m就被替換成smb.conf.pc1。這樣,對於PC1來說,它所使用的Samba服務就是由 smb.conf.pc1定義的,而其他機器訪問Samba Server則還是應用smb.conf。

workgroup = WORKGROUP
說明:設定 Samba Server 所要加入的工作組或者域。

server string = Samba Server Version %v
說明:設定 Samba Server 的註釋,可以是任何字符串,也可以不填。宏%v表示顯示Samba的版本號。

netbios name = smbserver
說明:設置Samba Server的NetBIOS名稱。如果不填,則默認會使用該服務器的DNS名稱的第一部分。netbios name和workgroup名字不要設置成一樣了。

interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
說明:設置Samba Server監聽哪些網卡,可以寫網卡名,也可以寫該網卡的IP地址。

hosts allow = 127. 192.168.1. 192.168.10.1
說明:表示允許連接到Samba Server的客戶端,多個參數以空格隔開。可以用一個IP表示,也可以用一個網段表示。hosts deny 與hosts allow 剛好相反。
例如:hosts allow=172.17.2.EXCEPT172.17.2.50
表示容許來自172.17.2.*的主機連接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容許來自172.17.2.0/255.255.0.0子網中的所有主機連接
hosts allow=M1,M2
表示容許來自M1和M2兩臺計算機連接
hosts allow=@pega
表示容許來自pega網域的所有計算機連接

max connections = 0
說明:max connections用來指定連接Samba Server的最大連接數目。如果超出連接數目,則新的連接請求將被拒絕。0表示不限制。

deadtime = 0
說明:deadtime用來設置斷掉一個沒有打開任何文件的連接的時間。單位是分鐘,0代表Samba Server不自動切斷任何連接。

time server = yes/no
說明:time server用來設置讓nmdb成爲windows客戶端的時間服務器。

log file = /var/log/samba/log.%m
說明:設置Samba Server日誌文件的存儲位置以及日誌文件名稱。在文件名後加個宏%m(主機名),表示對每臺訪問Samba Server的機器都單獨記錄一個日誌文件。如果pc1、pc2訪問過Samba Server,就會在/var/log/samba目錄下留下log.pc1和log.pc2兩個日誌文件。

max log size = 50
說明:設置Samba Server日誌文件的最大容量,單位爲kB,0代表不限制。

security = user
說明:設置用戶訪問Samba Server的驗證方式,一共有四種驗證方式。
1. share:用戶訪問Samba Server不需要提供用戶名和口令, 安全性能較低。
2. user:Samba Server共享目錄只能被授權的用戶訪問,由Samba Server負責檢查賬號和密碼的正確性。賬號和密碼要在本Samba Server中建立。
3. server:依靠其他Windows NT/2000或Samba Server來驗證用戶的賬號和密碼,是一種代理驗證。此種安全模式下,系統管理員可以把所有的Windows用戶和口令集中到一個NT系統上,使用 Windows NT進行Samba認證, 遠程服務器可以自動認證全部用戶和口令,如果認證失敗,Samba將使用用戶級安全模式作爲替代的方式。
4. domain:域安全級別,使用主域控制器(PDC)來完成認證。

passdb backend = tdbsam
說明:passdb backend就是用戶後臺的意思。目前有三種後臺:smbpasswd、tdbsam和ldapsam。sam應該是security account manager(安全賬戶管理)的簡寫。	這裏和上文說明的配置目錄有衝突,上面的是對的。這個應該是低版本位置
1.smbpasswd:該方式是使用smb自己的工具smbpasswd來給系統用戶(真實用戶或者虛擬用戶)設置一個Samba密碼,客戶端就用這個密碼來訪問Samba的資源。smbpasswd文件默認在/etc/samba目錄下,不過有時候要手工建立該文件。
2.tdbsam: 該方式則是使用一個數據庫文件來建立用戶數據庫。數據庫文件叫passdb.tdb,默認在/etc/samba目錄下。passdb.tdb用戶數據庫 可以使用smbpasswd –a來建立Samba用戶,不過要建立的Samba用戶必須先是系統用戶。我們也可以使用pdbedit命令來建立Samba賬戶。pdbedit命令的 參數很多,我們列出幾個主要的。
  pdbedit –a username:新建Samba賬戶。
  pdbedit –x username:刪除Samba賬戶。
  pdbedit –L:列出Samba用戶列表,讀取passdb.tdb數據庫文件。
  pdbedit –Lv:列出Samba用戶列表的詳細信息。
  pdbedit –c “[D]” –u username:暫停該Samba用戶的賬號。
  pdbedit –c “[]” –u username:恢復該Samba用戶的賬號。
3.ldapsam:該方式則是基於LDAP的賬戶管理方式來驗證用戶。首先要建立LDAP服務,然後設置“passdb backend = ldapsam:ldap://LDAP Server”

encrypt passwords = yes/no
說明:是否將認證密碼加密。因爲現在windows操作系統都是使用加密密碼,所以一般要開啓此項。不過配置文件默認已開啓。

smb passwd file = /etc/samba/smbpasswd
說明:用來定義samba用戶的密碼文件。smbpasswd文件如果沒有那就要手工新建。

username map = /etc/samba/smbusers
說明:用來定義用戶名映射,比如可以將root換成administrator、admin等。不過要事先在smbusers文件中定義好。比如:root = administrator admin,這樣就可以用administrator或admin這兩個用戶來代替root登陸Samba Server,更貼近windows用戶的習慣。

guest account = nobody
說明:用來設置guest用戶名。

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
說明:用來設置服務器和客戶端之間會話的Socket選項,可以優化傳輸速度。

domain master = yes/no
說明:設置Samba服務器是否要成爲網域主瀏覽器,網域主瀏覽器可以管理跨子網域的瀏覽服務。

local master = yes/no
說明:local master用來指定Samba Server是否試圖成爲本地網域主瀏覽器。如果設爲no,則永遠不會成爲本地網域主瀏覽器。但是即使設置爲yes,也不等於該Samba Server就能成爲主瀏覽器,還需要參加選舉。

preferred master = yes/no
說明:設置Samba Server一開機就強迫進行主瀏覽器選舉,可以提高Samba Server成爲本地網域主瀏覽器的機會。如果該參數指定爲yes時,最好把domain master也指定爲yes。使用該參數時要注意:如果在本Samba Server所在的子網有其他的機器(不論是windows NT還是其他Samba Server)也指定爲首要主瀏覽器時,那麼這些機器將會因爲爭奪主瀏覽器而在網絡上大發廣播,影響網絡性能。
如果同一個區域內有多臺Samba Server,將上面三個參數設定在一臺即可。

os level = 200
說明:設置samba服務器的os level。該參數決定Samba Server是否有機會成爲本地網域的主瀏覽器。os level從0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果設置爲0,則意味着Samba Server將失去瀏覽選擇。如果想讓Samba Server成爲PDC,那麼將它的os level值設大些。

domain logons = yes/no
說明:設置Samba Server是否要做爲本地域控制器。主域控制器和備份域控制器都需要開啓此項。

logon script = %u.bat
說明:當使用者用windows客戶端登陸,那麼Samba將提供一個登陸檔。如果設置成%u.bat,那麼就要爲每個用戶提供一個登陸檔。如果人比較多, 那就比較麻煩。可以設置成一個具體的文件名,比如start.bat,那麼用戶登陸後都會去執行start.bat,而不用爲每個用戶設定一個登陸檔了。 這個文件要放置在[netlogon]的path設置的目錄路徑下。

wins support = yes/no
說明:設置samba服務器是否提供wins服務。

wins server = wins服務器IP地址
說明:設置Samba Server是否使用別的wins服務器提供wins服務。

wins proxy = yes/no
說明:設置Samba Server是否開啓wins代理服務。

dns proxy = yes/no
說明:設置Samba Server是否開啓dns代理服務。

load printers = yes/no
說明:設置是否在啓動Samba時就共享打印機。

printcap name = cups
說明:設置共享打印機的配置文件。

printing = cups
說明:設置Samba共享打印機的類型。現在支持的打印系統有:bsd, sysv, plp, lprng, aix, hpux, qnx

共享參數:
#================== Share Definitions ==================
[共享名]

comment = 任意字符串
說明:comment是對該共享的描述,可以是任意字符串。

path = 共享目錄路徑
說 明:path用來指定共享目錄的路徑。可以用%u、%m這樣的宏來代替路徑裏的unix用戶和客戶機的Netbios名,用宏表示主要用於[homes] 共享域。例如:如果我們不打算用home段做爲客戶的共享,而是在/home/share/下爲每個Linux用戶以他的用戶名建個目錄,作爲他的共享目 錄,這樣path就可以寫成:path = /home/share/%u; 。用戶在連接到這共享時具體的路徑會被他的用戶名代替,要注意這個用戶名路徑一定要存在,否則,客戶機在訪問時會找不到網絡路徑。同樣,如果我們不是以用 戶來劃分目錄,而是以客戶機來劃分目錄,爲網絡上每臺可以訪問samba的機器都各自建個以它的netbios名的路徑,作爲不同機器的共享資源,就可以 這樣寫:path = /home/share/%m 。

browseable = yes/no
說明:browseable用來指定該共享是否可以瀏覽。

writable = yes/no
說明:writable用來指定該共享路徑是否可寫。

available = yes/no
說明:available用來指定該共享資源是否可用。

admin users = 該共享的管理者
說明:admin users用來指定該共享的管理員(對該共享具有完全控制權限)。在samba 3.0中,如果用戶驗證方式設置成“security=share”時,此項無效。
例如:admin users =david,sandy(多個用戶中間用逗號隔開)。

valid users = 允許訪問該共享的用戶
說明:valid users用來指定允許訪問該共享資源的用戶。
例如:valid users = david,@dave,@tech(多個用戶或者組中間用逗號隔開,如果要加入一個組就用“@組名”表示。)

invalid users = 禁止訪問該共享的用戶
說明:invalid users用來指定不允許訪問該共享資源的用戶。
例如:invalid users = root,@bob(多個用戶或者組中間用逗號隔開。)

write list = 允許寫入該共享的用戶
說明:write list用來指定可以在該共享下寫入文件的用戶。
例如:write list = david,@dave

public = yes/no
說明:public用來指定該共享是否允許guest賬戶訪問。

guest ok = yes/no
說明:意義同“public”。

幾個特殊共享:
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
; valid users = MYDOMAIN\%S

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes

[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no

[Profiles]
path = /var/lib/samba/profiles
browseable = no
guest ok = yes

Samba安裝好後,使用testparm命令可以測試smb.conf配置是否正確。使用testparm –v命令可以詳細的列出smb.conf支持的配置參數。

以上參數說明均是複製粘貼。
https://blog.csdn.net/weixin_40806910/article/details/81917077

學習使用 Samba,對自己來說這纔是重點
主要可以藉此理解一下配置文件的具體參數意義

配置環境, 一般測試時關閉防火牆將Selinux設置爲permissive即可
關閉防火牆

	systemctl stop firewalld
	systemctl disable firewalld

	vi /etcselinux/config

設置SELINUX=permissive
重啓後生效。立即生效

setenforce permissive

我Samba安裝的版本是4.9。
測試一:共享一個目錄,任何人都可以訪問,不需輸入密碼。要求只讀。

設置smb.conf配置文件

global模塊

[global]
	workgroup = SAMBA
	security = user

	passdb backend = tdbsam

	printing = cups
	printcap name = cups
	load printers = yes
	cups options = raw

修改爲

[global]
        workgroup = MYGROUP

        security = user
        map to guest = Bad User 

        passdb backend = tdbsam

        log file = /var/log/samba/log.%m

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

只是加了兩行 第二行不是必須的,只是聲明一下連接的日誌文件。

 map to guest = Bad User 
 log file = /var/log/samba/log.%m

低版本中設置不需密碼,只需設置

 security = share

不用加 map to guest = Bad User ,至多4.9版本後 security參數就不能設置爲share了,被棄用了。

在文件末尾新增共享參數設置

[share]
        comment = share all
        path = /tmp/share
        browseable = yes
        writable = no
        public = yes

編輯完成保存。

開始創建測試目錄

mkdir /tmp/share
chmod 777 /tmp/share
touch /tmp/share/sharefile1
echo "秦時明月漢時關" > /tmp/share/sharefile1

可以使用 testparm 命令測試配置文件是否有誤。
無誤後然後啓動smb服務

systemctl restart smb

可以在window機器的瀏覽器輸入file://IP/share 即可看到該目錄下文件
共享成功
附: public 的意思是設置 guest 是否可以訪問。來賓 就是沒有經過登錄校驗的用戶。

測試二:共享一個目錄,使用用戶名密碼登錄後才能訪問。要求可讀寫。

在配置文件中新加入一個共享配置
[global]中的

[myshare]
        comment = share users
        path = /tmp/share2
        browseable = yes
        writable = yes
		public = no

browseable = yes/no
說明:browseable用來指定該共享是否可以瀏覽。
writable = yes/no
說明:writable用來指定該共享路徑是否可寫。
available = yes/no
說明:available用來指定該共享資源是否可用。

public = no 表示禁止來賓訪問。這樣就必須登錄後才能訪問了。
創建測試目錄

mkdir /tmp/share2
chmod 777 /tmp/share2

首先要先創建用戶
Linux的用戶密碼和samba的用戶密碼並不是一碼子事,只是samba的用戶必須是Linux的用戶,因此需要將heijunma這個賬戶添加到samba的用戶數據庫,執行如下命令:
首先創建 Linux 用戶,設置用戶密碼。(其實不用設置密碼,只是用來測試使用一下Samba)

useradd user1
useradd user2
passwd user1
passwd user2

刪除用戶指令

userdel -r user1

添加爲Samba賬號。可以使用smbpasswd命令添加,smbpasswd -h可查看幫助,不過閒雜常用的是pdbedit

pdbedit -a username:新建Samba賬戶。
pdbedit -x username:刪除Samba賬戶。
pdbedit -L:列出Samba用戶列表,讀取passdb.tdb數據庫文件。
pdbedit -Lv:列出Samba用戶列表詳細信息。
pdbedit -c “[D]” -u username:暫停該Samba用戶賬號。
pdbedit -c “[]” -u username:恢復該Samba用戶賬號。

添加user1, user2爲Samba賬號

pdbedit -a user1
pdbedit -a user2

查看所有賬號信息

pdbedit -L

重啓服務

systemctl restart smb

在windows上打開瀏覽器或者在文件系統上方輸入欄輸入file://IP/myshare/ 需要輸入用戶名密碼纔可訪問。

測試三 使用linux訪問samba服務器

Samba服務在linux下同樣可以訪問。前提是你的linux安裝了samba-client軟件包。安裝完後就可以使用smbclient命令了。具體語法爲:

smbclient //IP/共享名 -U 用戶名
如:

[root@localhost]# smbclient //10.0.4.67/myshare/ -U user1
Password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: >
出現如上所示的界面。可以打一個 ”?” 列出所有可以使用的命令。常用的有cd, ls, rm, pwd, tar, mkdir, chown, get, put等等,使用 help + 命令可以打印該命令如何使用,其中get是下載,put是上傳。

另外的方式就是通過mount掛載了,如:

mount -t cifs //10.0.4.67/myshare /mnt -o username=user1,password=123456
格式就是這樣,要指定 -t cifs //IP/共享名 本地掛載點 -o後面跟username 和 password 掛載完後就可以像使用本地的目錄一樣使用共享的目錄了,注意共享名後面不能有斜槓。

其它的 指定用戶訪問,指定用戶禁止訪問。用戶創建文件權限等配置看上面的配置就可以。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章