samba服務器配置
組態檔
- /etc/samba/smb.conf
samba的主要組態檔,可設定全域引數和共享目錄的引數 - /etc/samba/lmhosts
通過hostname來訪問samba: - /etc/samba/smbusers
由于windows和linux里的管理員和訪客賬號名稱不一致,可使用此組態檔來設定一個映射,比如administrator映射成root: - /etc/sysconfig/samba
配置smbd,nmbd啟動時帶的引數 - /var/lib/samba/private/{passdb.tdb, secrets.tdb}
管理samba的用戶賬號/密碼時,會用到的資料庫檔案
可用命令
smbd, nmbd:smbd提供檔案和列印共享服務器,nmbd提供NetBIOS名稱服務和瀏覽支持,幫助客戶端定位服務器,處理所有基于UDP的協議
tdbdump, tdbtool:samba使用了tdb資料庫,可以使用tdb工具來查看資料庫內容
smbstatus:查看samba的狀態
smbpasswd, pdbedit:服務器功能,用于管理samba的用戶賬號和密碼,早期是使用smbpasswd命令,后來因為使用了tdb資料庫,所以推薦使用pdbedit命令來管理用戶資料
mount.cifs:用來掛載分享目錄
smbclient:samba客戶端
nmblookup:查找NetBIOS name
smbtree:未知,可能是用來查找網路鄰居的吧
testparm:驗證smb.conf檔案的內容是否合法
作業模式
samba服務器有5種作業模式,分別為:
- share,用戶對samba服務器的訪問不需要身份驗證,允許匿名訪問,用戶的訪問權限僅由相應用戶對共享檔案的訪問權限決定
- user,使用用戶名和密碼訪問samba服務器,
- server,使用另外一臺服務器專門用來做身份驗證,samba服務只提供檔案和列印機共享服務
- domain,域模式,不常用
- ads,最新的一種作業模式,也不太常用
通過設定security選項即可設定samba的作業模式:security = share
配置項
全域
全域必須的配置項有:workgroup,netbios name,serverstirng,log file,max log size,security,passdb backend,load printer
workgroup = rhel_6.3
server string = Samba Server Version %v
netbios name = rhel
# logs split per machine
log file = /var/log/samba/log.%m
# max 500KB per log file, then rotate
max log size = 500
security = user
passdb backend = tdbsam
load printers = no
共享目錄
不需要密碼的共享
需要將全域引數中的security設定成share(暫不清楚,在user作業模式下通過設定guest ok好像也可以,需要驗證)
最小化配置:
[test]
comment = test
path = /tmp
read only = no
guest ok = yes
create mask = 644
其中:
read only默認為yes,表示只允許讀,不允許寫,所以需要修改
guest ok默認是no,表示不允許匿名訪問
create mask默認是744,導致客戶端創建的檔案都是可執行檔案,所以需要修改
注意:
writable和writeable是同義詞
writeable和read only是反義同義詞
writeable默認為no
read only默認為yes
完整配置需要配置available和browseable,不過這兩個默認都是yes
用戶名/密碼方式的共享
需要將全域引數中的security設定成user
[win]
comment = win
path = /home/win
read only = yes
create mask = 644
valid users = win
這種方式首先需要使用root權限添加一個賬戶,然后使用smbpasswd -a xxx在samba資料庫添加此用戶的samba密碼
輸入smbpasswd -a xxx 時會直接讓用戶設定這個賬戶的samba密碼
這個用戶資訊保存在tdb資料庫里
修改密碼:root權限下輸入smbpasswd user_name即可修改user_name的samba密碼
組態檔驗證
使用testparm可以驗證smb.conf檔案的內容是否合法
[RHEL@localhost ~]$ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[test]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
[global]
workgroup = TEST
netbios name = TESTNET
server string = Samba Server Version %v
security = SHARE
log file = /var/log/samba/log.%m
max log size = 50
load printers = No
[test]
comment = test
path = /tmp
read only = No
guest ok = Yes
客戶端本地驗證samba服務器共享的內容
smbclient -L //127.0.0.1
當samba服務器的作業模式被設定成share模式時,需要在上面的命令后面加-N選項表示不請求密碼
[RHEL@localhost ~]$ smbclient -L //127.0.0.1 -N
Domain=[TEST] OS=[Unix] Server=[Samba 3.5.10-125.el6]
Sharename Type Comment
--------- ---- -------
test Disk test
IPC$ IPC IPC Service (Samba Server Version 3.5.10-125.el6)
Domain=[TEST] OS=[Unix] Server=[Samba 3.5.10-125.el6]
Server Comment
--------- -------
TESTNET Samba Server Version 3.5.10-125.el6
Workgroup Master
--------- -------
TEST TESTNET
查看samba資料庫里的用戶資訊
pdbedit -L
防火墻和SELinux
關閉防火墻:/etc/init.d/iptables stop
設定SELinux為寬容模式:setenforce 0
獲取SELinux的狀態: getenforce
排障
排障總共4種方式,
- nmap掃描是否有139和445埠被監聽
- 映射網路驅動器
- net use命令查看當前有哪些連接
- 重啟(對于修改了密碼后登錄不上非常有效)
常見問題場景:
1、windows訪問時提示找不到網路路徑,并帶有錯誤碼0x80070035,表示samba服務器未監聽139和445埠(通過nmap可以看到)


2、直接在windows的檔案管理器里輸入網路路徑后提示"找不到xxxx,請檢查拼寫并重試",且無錯誤碼,

通過映射網路驅動器發現windows給出了詳細的資訊:SMB1協議不安全,需要使用SMB2以上的安全的協議,

這種情況一般出現在win 10上,解決辦法有兩個,一是升級samba服務器,二是給win 10添加SMB1支持(在程式與功能里面可以啟用)
3、windows訪問時提示無權限

一般來說應該是和SELinux有關
解決辦法也有兩個:
- 如果共享的是家目錄,使用setsebool -P samba_enable_home_dirs on命令即可,
如果是添加的目錄,使用命令chcon -t samba_share_t /path給這個目錄添加samba_share_t標簽即可 - 關閉SELinux
原文:
#---------------
# SELINUX NOTES:
#
# If you want to use the useradd/groupadd family of binaries please run:
# setsebool -P samba_domain_controller on
#
# If you want to share home directories via samba please run:
# setsebool -P samba_enable_home_dirs on
#
# If you create a new directory you want to share you should mark it as
# "samba_share_t" so that selinux will let you write into it.
# Make sure not to do that on system directories as they may already have
# been marked with othe SELinux labels.
#
# Use ls -ldZ /path to see which context a directory has
#
# Set labels only on directories you created!
# To set a label use the following: chcon -t samba_share_t /path
#
# If you need to share a system created directory you can use one of the
# following (read-only/read-write):
# setsebool -P samba_export_all_ro on
# or
# setsebool -P samba_export_all_rw on
#
# If you want to run scripts (preexec/root prexec/print command/...) please
# put them into the /var/lib/samba/scripts directory so that smbd will be
# allowed to run them.
# Make sure you COPY them and not MOVE them so that the right SELinux context
# is applied, to check all is ok use restorecon -R -v /var/lib/samba/scripts
#
#--------------
版本
3.5.10里使用的是SMB1協議,被證明有漏洞,不推薦使用,
windows客戶端訪問符號鏈接失敗
在/etc/samba/smb.conf里添加如下的內容即可正常
[global]
unix extensions = no
[share]
follow symlinks = yes
wide links = yes
其中:
- unix extensions是為了在samba里支持符號鏈接,硬鏈接等特性,主要給UNIX下的samba客戶端使用,對windows客戶端沒有任何用處,所以在windows客戶端訪問時需要關掉這個選項,這個是選項是默認啟用的,
- follow symlinks,這個引數控制samba服務器是否會跟隨特定samba共享目錄(非global選項)里的符號鏈接,默認是啟用的,
- wide links,這個引數控制是否能夠創建一個鏈接指向samba服務器未共享的目錄(samba服務器默認允許創建指向已共享的目錄的鏈接),可能會導致一個安全問題,所以這個引數默認不啟用
man 5 smb.conf中的解釋如下
unix extensions (G)
This boolean parameter controls whether Samba implements the CIFS UNIX
extensions, as defined by HP. These extensions enable Samba to better
serve UNIX CIFS clients by supporting features such as symbolic links,
hard links, etc... These extensions require a similarly enabled client,
and are of no current use to Windows clients.
Note if this parameter is turned on, the wide links parameter will
automatically be disabled.
Default: unix extensions = yes
follow symlinks (S)
This parameter allows the Samba administrator to stop smbd(8) from
following symbolic links in a particular share. Setting this parameter to
no prevents any file or directory that is a symbolic link from being
followed (the user will get an error). This option is very useful to stop
users from adding a symbolic link to /etc/passwd in their home directory
for instance. However it will slow filename lookups down slightly.
This option is enabled (i.e. smbd will follow symbolic links) by default.
Default: follow symlinks = yes
wide links (S)
This parameter controls whether or not links in the UNIX file system may
be followed by the server. Links that point to areas within the directory
tree exported by the server are always allowed; this parameter controls
access only to areas that are outside the directory tree being exported.
Note: Turning this parameter on when UNIX extensions are enabled will
allow UNIX clients to create symbolic links on the share that can point to
files or directories outside restricted path exported by the share
definition. This can cause access to areas outside of the share. Due to
this problem, this parameter will be automatically disabled (with a
message in the log file) if the unix extensions option is on.
Default: wide links = no
如何判斷smb.conf里的某些欄位的默認選項
比如follow symlinks欄位默認是yes, 則當在smb.conf里配置了這個欄位等于yes時在testparm里不會顯示這個欄位,如果配置成no則會顯示
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/161495.html
標籤:Linux
