當前位置:首頁 > linux教程 > 列表

linux中Samba服務器的搭建理論篇

發布:smiling 來源: PHP粉絲網  添加日期:2016-08-22 09:29:39 瀏覽: 評論:0 

Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協,下面我們來看Samba服務器的搭建理論篇

一、Samba與NFS、ftp

在了解Samba服務之前,需要先了解一下cifs協議(Common Internet File System),該協議最早是微軟搞出來的一個協議。cifs 協議最早實現的是window主機之間的文件共享與打印共享,并不支持在linux上運行,samba是由Andrew Tridgell工程師通過逆向工程實現的一個cifs協議軟件。通過該包可以實現windows和linux之間的文件共享。這和NFS的走的路剛好相反,NFS最初只支持在類unix系統上運行,后被windows也學了去,所以OS并不能簡單的說誰好誰壞,很多東西都是互相借鑒的。

Samba與NFS較ftp的一個好處就是可以將遠程盤或掛載點映射到本機上,每次可以像本地編輯一樣編輯文件。而ftp需要先下載到本地修改后再上傳。

二、samba相關包與程序

1、samba程序包

目前samba 在源里默認的是samba 4.x版本,主要使用的相關軟件包有:

  1. # yum list|grep samba 
  2.  
  3. samba.x86_64                           4.1.12-21.el7_1                 @base 
  4.  
  5. samba-common.x86_64                    4.1.12-21.el7_1                 @base 
  6.  
  7. samba-libs.x86_64                      4.1.12-21.el7_1                 @base 
  8.  
  9. samba-client.x86_64                    4.1.12-21.el7_1                 base 
  10.  
  11. samba-python.x86_64                    4.1.12-21.el7_1                 base 
  12.  
  13. samba-winbind.x86_64                   4.1.12-21.el7_1                 base 
  14.  
  15. samba-winbind-modules.x86_64           4.1.12-21.el7_1                 base 

samba服務相關的配置主要是samba、samba-common、samba-client三個包和cifs-utils包,具體三個包的作用如下:

samba:主要提供了smb服務所需的格項服務程序如smbd和nmbd及與samba相關的eventlogadm程序;

samba-client:該包主要提供了samba client掛載使用的相關程序,如smbpasswd、smbtree等;

cifs-utils:mount掛載時需要該包來支持cifs協議,不安裝該包就沒有mount.cifs命令。使用mount掛載時也會有報錯;

smba-common: 該包提供了samba服務的主配置文件smb.conf、lmhosts文件、 pdbedit用戶相關和testparm語法檢查指令等。

2、samba相關文件與程序

/etc/samba/smb.conf:samba服務的主配置文件;

/etc/samba/lmhosts:NetBIOS Name與IP的對應關系,做用類似于/etc/hosts,一般無需配置;

/etc/sysconfig/samba: smbd, nmbd服務自定義參數配置文件;

/etc/samba/smbusers:windows與linux的用戶不一致,可以通過該文件進行對應映射,在新版本中默認不存在,代替的是username map參數,通過該參數可以指定具體的映射文件;

/var/lib/samba/private/{passdb.tdb,secrets.tdb}:samba用戶和密碼數據庫文件;

/usr/bin/{tdbdump,tdbtool}: Samba 3.0以后,默認使用tdb庫(Trivial DataBase),這兩個命令用于查看和操作tdb庫,不過查看出的結果有點類似于16進制的數據,一般不使用,需安裝 tdb-tools 包;

/usr/bin/{smbpasswd,pdbedit}:smbpasswd命令用于創建samba用戶和修改密碼,類型于passwd命令的功能。Samba 3.0后使用pdb庫,pdbedit命令為新版本中的samba用戶信息管理命令;

/usr/bin/testparm:用于測試smb.conf語法的正確性。

/usr/bin/smbclient:可以交互式管理samba共享的資源,有點類似于ftp命令;

/usr/bin/nmblookup:Netblos查詢工具,類似于nslookup的功能;

/usr/bin/smbtree:查看網絡中的工作組與主機名等,有點類似于windows中的網上鄰居。

使用示例:

1、tdbdump

  1. # tdbdump passdb.tdb 
  2.  
  3.  
  4. key(13) = "RID_000003e8\00" 
  5.  
  6. data(6) = "usera\00" 
  7.  
  8.  
  9.  
  10. key(11) = "USER_usera\00" 
  11.  
  12. data(182) = "\00\00\00\00\7F\A9T|\7F\A9T|\00\00\00\00bd\F5U\00\00\00\00\7F\A9T|\06\00\00\00usera\00\04\00\00\00WWW\00\01\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\E8\03\00\00\01\02\00\00\00\00\00\00\10\00\00\00\E5\81\0F<\99\AE*\BB\222\ED\84X\A6\13\09\00\00\00\00\10\00\00\00\A8\00\15\00\00\00 \00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EC\04\00\00" 
  13.  
  14.  
  15.  
  16. key(19) = "INFO/minor_version\00" 
  17.  
  18. data(4) = "\00\00\00\00" 
  19.  
  20.  
  21.  
  22. key(9) = "NEXT_RID\00" 
  23.  
  24. data(4) = "\E9\03\00\00" 
  25.  
  26.  
  27.  
  28. key(13) = "INFO/version\00" 
  29.  
  30. data(4) = "\04\00\00\00" 
  31.  

2、tdbtool

  1. # tdbtool passdb.tdb 
  2.  
  3. tdb> list 
  4.  
  5. hash=23 
  6.  
  7.  rec: hash=23 offset=0x00001e38 next=0x00000000 rec_len=28 key_len=13 data_len=6 full_hash=0xc6948dbc magic=0x26011999 
  8.  
  9. hash=33 
  10.  
  11.  rec: hash=33 offset=0x00001e6c next=0x00000000 rec_len=228 key_len=11 data_len=182 full_hash=0x41061b85 magic=0x26011999 
  12.  
  13. hash=52 
  14.  
  15.  rec: hash=52 offset=0x00001f68 next=0x00000000 rec_len=32 key_len=19 data_len=4 full_hash=0x538a9285 magic=0x26011999 
  16.  
  17. hash=65 
  18.  
  19.  rec: hash=65 offset=0x00001fd4 next=0x00000000 rec_len=20 key_len=9 data_len=4 full_hash=0x70a13a4c magic=0x26011999 
  20.  
  21. hash=103 
  22.  
  23.  rec: hash=103 offset=0x00001fa0 next=0x00000000 rec_len=28 key_len=13 data_len=4 full_hash=0xf2394cd5 magic=0x26011999 
  24.  
  25. freelist: 

3、smbpasswd與pdbedit

創建samba用戶前,需要用戶先在本地中存在

# useradd -G users smb1

# useradd -G users smb2

# echo 361way.com | passwd --stdin smb1

# echo 361way.com | passwd --stdin smb2

使用smbapsswd創建:

smbapsswd常用項:

-a:創建新用戶,不加-a 參數直接跟用戶為修改用戶密碼;

-c:指定密碼文件生成的位置;

-x:刪除用戶;

-d:臨時禁用一個用戶;

-e:enable一個用戶;

-D:指定debug級別;

-n:設置一個用戶的密碼為空,用戶使用空密碼需在smb.conf的global 項配置中null passwords = yes ;

# smbpasswd -a smb1

New SMB password:

Retype new SMB password:

Added user smb1.

使用pdbedit命令創建:

pdbedit常用選項:

-L :列出samba用戶與信息;

-v :需要搭配 -L 執行,可列出更多的信息;

-w :需要搭配 -L 執行,使用舊版的 smbpasswd 格式來顯示信息;

-a :新增samba用戶;

-r :修改一個用戶的信息,需搭配很多特殊參數,請man pdbedit;

-x :刪除一個可使用 用戶,可先用 -L 找到用戶后再?h除;

  1. # pdbedit -a -u smb2 
  2.  
  3. new password: 
  4.  
  5. retype new password: 
  6.  
  7. Unix username:        smb2 
  8.  
  9. NT username: 
  10.  
  11. Account Flags:        [U          ] 
  12.  
  13. User SID:             S-1-5-21-1462619673-710706269-1943266961-1002 
  14.  
  15. Primary Group SID:    S-1-5-21-1462619673-710706269-1943266961-513 
  16.  
  17. Full Name: 
  18.  
  19. Home Directory:        
  20. \\www\smb2 
  21.  
  22. HomeDir Drive: 
  23.  
  24. Logon Script: 
  25.  
  26. Profile Path:          
  27. \\www\smb2\profile 
  28.  
  29. Domain:               WWW 
  30.  
  31. Account desc: 
  32.  
  33. Workstations: 
  34.  
  35. Munged dial: 
  36.  
  37. Logon time:           0 
  38.  
  39. Logoff time:          Wed, 06 Feb 2036 23:06:39 CST 
  40.  
  41. Kickoff time:         Wed, 06 Feb 2036 23:06:39 CST 
  42.  
  43. Password last set:    Sun, 13 Sep 2015 21:09:45 CST 
  44.  
  45. Password can change:  Sun, 13 Sep 2015 21:09:45 CST 
  46. //phpfensi.com 
  47. Password must change: never 
  48.  
  49. Last bad password   : 0 
  50.  
  51. Bad password count  : 0 
  52.  
  53. Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 

pdbedit 是一個新的指令,但無法修改用戶密碼,所以還是無法完全替代smbpasswd的作用.

4、testparm

testparm是一個語法測試命令,具體用法如下:

  1. # testparm 
  2. Load smb config files from /etc/samba/smb.conf 
  3. rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) 
  4. Processing section "[homes]" 
  5. Processing section "[printers]" 
  6. Processing section "[public]" 
  7. Loaded services file OK. 
  8. Server role: ROLE_STANDALONE 
  9. Press enter to see a dump of your service definitions 
  10. [global
  11.         workgroup = MYGROUP 
  12.         server string = Samba Server Version %v 
  13.         map to guest = Bad User 
  14.         log file = /var/log/samba/log.%m 
  15.         max log size = 50 
  16.         load printers = No 
  17.         idmap config * : backend = tdb 
  18.         cups options = raw 
  19. [homes] 
  20. ……………………略 

5、smbclient

smbclient有兩個功能,一個是查詢功能,一個是類似于ftp交互式管理功能,如下:

smbclient查詢當前的共享信息

  1. # smbclient -L 192.168.0.109 
  2.  
  3. Enter root's password: 
  4.  
  5. Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.12] 
  6.  
  7.         Sharename       Type      Comment 
  8.  
  9.         ---------       ----      ------- 
  10.  
  11.         public          Disk      Public dir 
  12.  
  13.         IPC$            IPC       IPC Service (Samba Server Version 4.1.12) 
  14.  
  15. Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.12] 
  16.  
  17.         Server               Comment 
  18.  
  19.         ---------            ------- 

類ftp交互管理的用法

  1. # smbclient '//192.168.0.109/public' -U smb1 
  2.  
  3. Enter smb1's password: 
  4.  
  5. Anonymous login successful 
  6.  
  7. Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.12] 
  8.  
  9. smb: \> dir 

# 我可以使用 dir, get, put 等常用的 ftp 指令來進行文件傳輸

  1. ?   :列出所有可以用的指令,常用! 
  2. cd  :切換目錄 
  3. del : 刪除文件 
  4. lcd : 改變本機目錄 
  5. ls   : 查看samba共享目錄下的文件信息 
  6. dir : 與s 相同 
  7. get : 下載文件 
  8. mget: 多個文件下載 
  9. mput: 多個文件上傳 
  10. put :單個文件上傳 
  11. rm  : 刪除文件 
  12. exit: 退出 

# 內部更多指令可以?號查看,也可以 man smbclient 獲取.

6、smbtree

  1. # smbtree 
  2. Enter root's password: 
  3. WORKGROUP 
  4.         \\YNNYCSK9X26EZUE         //我的win7主機在這里也查看到了 
  5. MYGROUP 
  6.         \\WWW                           Samba Server Version 4.1.12 

7、客戶端mount

mount.cifs或mount -t cifs常用參數有(-o后面帶的部分):

username=登陸用戶名,例如 username=smb1 ;

password=登陸密碼:與上面 username 對應;

iocharset=本機的默認編碼,如utf8  或 gb2312等;

codepage=提供samba服務的遠程主機的編碼方式,例如windows下繁體中文為cp950、簡體中文為cp936 。

linux客戶端下的掛載

# mount -t cifs //192.168.1.109/smb1 /mnt/samba \

-o username=smb1,password=361way.com,codepage=cp936

windows客戶端下的掛載,也可以在開始--運行中輸入\\ip

NET USE Q: \\192.168.0.109\public

net use H: \\192.168.0.109\shareFile "password" /user:"username"

注:需要注意的是linux與win下掛載時,使用的斜扛方向是有區別的。

8、smbstatus

用于查看當前連接到服務端的客戶端主機信息:

  1. # smbstatus 
  2.  
  3. Samba version 4.1.12 
  4.  
  5. PID     Username      Group         Machine 
  6.  
  7. ------------------------------------------------------------------- 
  8.  
  9. 2894      nobody        nobody        192.168.0.104 (ipv4:192.168.0.104:50709) 
  10.  
  11. Service      pid     machine       Connected at 
  12.  
  13. ------------------------------------------------------- 
  14.  
  15. public       2894   192.168.0.104  Sun Sep 13 21:40:04 2015 
  16.  
  17. No locked files 

三、samba服務配置

/etc/samba/smb.conf配置文件:

  1. [global
  2.  
  3.         workgroup = MYGROUP        //工作組 
  4.  
  5.         netbios name    = 361way     //netbios名 
  6.  
  7.         server string = Samba Server Version %v   //服務器字符串,可任意寫 
  8.  
  9.         unix charset    = utf8                    //linux下使用的編碼 
  10.  
  11.         display charset = utf8                    //本機顯示的編碼 
  12.  
  13.         dos charset     = cp936                  //win下使用的編碼 
  14.  
  15.         log file = /var/log/samba/log.%m     //日志文件位置 
  16.  
  17.         # maximum size of 50KB per log file, then rotate: 
  18.  
  19.         max log size = 50 
  20.  
  21.         security = user 
  22.  
  23.         passdb backend = tdbsam           //指定用戶名密碼存儲的數據格式 
  24.  
  25.         passdb backend = tdbsam:/etc/samba/private/passdb.tdb  //指定密碼文件的位置 
  26.  
  27.         passdb backend = ldapsam:" 
  28. ldap://ldap-1.example.com 
  29.  
  30. ldap://ldap-2.example.com 
  31. //使用ldap認證,后面的是備用節點 
  32.  
  33.         map to guest = Bad User             //開啟匿名訪問 
  34.  
  35.         interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24   //監聽的本機端口和使用IP,默認監聽所有 
  36.  
  37.         hosts allow = 192.168.12.  192.168.13. EXCEPT 192.168.12.100  //允許連接的IP網段,默認允許所有 
  38.  
  39.         cluster addresses = 10.0.0.1 10.0.0.2 10.0.0.3   集群設置 
  40.  
  41.         username map = /usr/local/samba/lib/users.map   //用戶名對應關系映射 
  42.  
  43.         logon drive   = K:              //windows自動掛載時映射的本地盤符名 
  44.  
  45.         logon script  = startup.bat     //客戶端訪問后自動執行的腳本程序 
  46.  
  47.         time server   = yes             //自動讓 Windows主機 與 Samba 服務器時間同步 
  48.  
  49.         admin users   = root            //預設的管理用戶 
  50.  
  51.         logon path    =  
  52. \\%N\%U\profile 
  53.  //使用者的個人化設定 
  54.  
  55.         logon home    =  
  56. \\%N\%U 
  57.          //使用者的家目錄位置! 
  58.  
  59.         set quota command = /usr/local/sbin/set_quota   //磁盤配額相關 
  60.  
  61.         load printers = yes                     //開啟打印機共享 
  62.  
  63.         cups options = raw 
  64.  
  65.         # obtain a list of printers automatically on UNIX System V systems: 

具體共享項的常用選項

[共享名稱]

comment=提示性信息

path=具體共享的目錄路徑

browseable=是否讓所用使用者查看,yes或no

writable=是否有寫入權限,yes或no

create mode 與 directory mode,默認權限設置,如:force create mode = 0755,默認是000

writelist = 使用者,@群?  除了@,還有+、&兩個符號

上面的選項中大部分我都進行了注解,這里再選取幾個典型的部分細說下.

security = user :在老的版本中,可選項中有security = share、user、domain,share即開啟匿名防問,在新的版本中該項由于安全考慮被取消掉了。默認是user,想開啟匿名防問加后面的map to guest行。新版本中的security 后面可以跟的有AUTO、USER、DOMAIN、ADS(windows AD域);

logon script = startup.bat :自動執行腳本,多用于windows客戶端訪問后,自動將訪問目錄映射為本地盤,如這里使用腳本內容為:

net time \\192.168.0.109  /set /yes

net use K: /samba   或

NET USE Q: \\192.168.0.109\public

需要注意的是上面的內容需要在windows下編輯,如果使用linux下編輯,需要使用unix2dos命令進行轉換。

更多配置部分請使用man smb.conf查看。

四、防火墻與selinux

防火墻上需要放行的端口有UDP 137、138--nmbd服務占用、TCP的139、445 --smbd服務使用:

  1. # netstat -ntlup|grep mb 
  2.  
  3. tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      2483/smbd 
  4.  
  5. tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      2483/smbd 
  6.  
  7. tcp6       0      0 :::139                  :::*                    LISTEN      2483/smbd 
  8.  
  9. tcp6       0      0 :::445                  :::*                    LISTEN      2483/smbd 
  10.  
  11. udp        0      0 192.168.0.255:137       0.0.0.0:*                           2489/nmbd 
  12.  
  13. udp        0      0 192.168.0.109:137       0.0.0.0:*                           2489/nmbd 
  14.  
  15. udp        0      0 0.0.0.0:137             0.0.0.0:*                           2489/nmbd 
  16.  
  17. udp        0      0 192.168.0.255:138       0.0.0.0:*                           2489/nmbd 
  18.  
  19. udp        0      0 192.168.0.109:138       0.0.0.0:*                           2489/nmbd 
  20.  
  21. udp        0      0 0.0.0.0:138             0.0.0.0:*                           2489/nmbd 

使用用下面的命令放行:

firewall-cmd --permanent --add-port=137-138/udp

firewall-cmd --permanent --add-port=139/tcp --add-port=445/tcp

firewall-cmd --reload

selinux相關項在/etc/samba/smb.conf的注釋部分都有說明,如下:

修改共享目錄的上下文件為samba_share模式

#chcon -t samba_share_t  /test

系統目錄需要讀寫時需要開啟:

# setsebool -P samba_export_all_ro on

# setsebool -P samba_export_all_rw on

home目錄共享時需要

#setsebool -P samba_enable_home_dirs on

域控制時需要使用(一般用不到)

# setsebool -P samba_domain_controller on

Tags: linux理論 Samba服務器

分享到:

天气网首页彩吧