
因此,我首先應該說,我在不到一周前成功完成了此操作,並且沒有遇到任何問題,但此後我重新格式化並重新配置了我的伺服器,現在我最難記住我是如何做到的。
這是我以前所擁有的以及我想要再次完成的。我在 Ubuntu 伺服器上有一個公共 samba 共享。我的網路上的任何人都可以透過鍵入 \Hostname 來存取共享及其內容。無需密碼。不在共用工作群組中的使用者俱有讀取存取權限,但在工作群組中的使用者俱有讀取/寫入存取權限。 (Windows 7的)
現在,如果我嘗試連線到 \Hostname,系統會提示我輸入使用者名稱和密碼。如果我輸入 un pw,我將獲得完全訪問權限,但我不應該這樣做;我目前的設定是...
security = user
map to guest = bad user
[Shares]
path = /home/shares
available = yes
read only = no
browsable = yes
public = yes
writable = yes
guest ok = yes
我正為這件事揪心呢。有什麼建議麼?
編輯:
呃,這讓我很難過。我如此接近。
這就是我所擁有的。
我可以透過啟動並鍵入 \Hostname\Sharename 從 Windows 7 存取共用,但係統會提示我輸入使用者名稱和密碼。但我不能將其留空,因為它將使用我的工作群組作為網域;所以我輸入 \ 作為用戶名以將其清除並使用空白用戶名和密碼登入。太好了,現在我可以存取共享中的文件了。
一旦我進入,工作組配置就可以正常工作。如果我在一台具有預設工作組的電腦上,我可以讀取和執行;我的家庭工作組中的電腦可以讀寫和執行。這樣就可以了。
問題是,它根本不應該要求輸入密碼。它應該對網路上的任何人完全公開。我正在嘗試與 XBMC 共享它,但它甚至沒有顯示在檔案管理器中的 smb 下。我也無法從 XBMC 手動存取它。我收到連線拒絕錯誤。
還在為這件事揪心。最糟糕的是大約一周前我第一次這樣做,我花了大約 30 分鐘,效果非常好。現在我可能已經花了至少 4 個小時了,但它仍然不起作用。
Testparm:
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[printers]"
Processing section "[print$]"
Processing section "[Shares]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
[global]
workgroup = FELLOWSHIP
server string = %h server (Samba, Ubuntu)
map to guest = Bad User
obey pam restrictions = Yes
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
unix password sync = Yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = No
wins support = Yes
usershare allow guests = Yes
panic action = /usr/share/samba/panic-action %d
idmap config * : backend = tdb
[printers]
comment = All Printers
path = /var/spool/samba
create mask = 0700
printable = Yes
print ok = Yes
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
[Shares]
path = /home/shares
read only = No
guest ok = Yes
更新:因此,無論工作組如何,該共享現在都可以透過我的網路使用。任何連接到我的網路的 Windows 用戶都可以在網路下看到 NAS 並存取它。關鍵是將安全性設定為安全=共享。我知道,它已被棄用,但它有效,並且 security = user 和 map to user = bad user 對我不起作用。
無論如何,現在看來連接到共享的任何人都會獲得該目錄的 unix 全域權限,這是可以管理的,但我希望加入 smb.conf 中指定的工作組的用戶獲得 unix 群組權限。
這樣,我可以將目錄設為 775,並且我將能夠寫入,因為我加入了工作群組,但其他使用者只能讀取和執行。
答案1
恰巧偶然發現Ubuntu 論壇上的這個帖子,並認為這可能有幫助。它解釋了幕後發生的步驟:
在 Windows 中,當用戶端瀏覽共用時,會自動發送用戶端的使用者名稱和密碼 - 這是在使用者不知情的情況下完成的。這會強制 Samba 處理發送的憑證,即使它是不需要身份驗證的來賓共用。
當該用戶名被傳遞時,Samba 將在其密碼資料庫中搜尋該用戶:
如果使用者名稱不匹配,則用戶端使用者將標記為“不良使用者”,並轉換(對應)為訪客帳戶,預設為“nobody”。
如果它找到與用戶名相符的內容,並且有一個與Windows 用戶端發送的密碼相符的samba 密碼,那麼Windows 用戶會自動獲得訪問權限,儘管不是作為匿名用戶,這就是為什麼您需要添加「force user =nobody”您的共享定義。
如果它找到與使用者名稱匹配的內容,但 samba 密碼與 Windows 用戶端自動發送的密碼不完全匹配,那麼系統將提示您輸入密碼 - 即使對於來賓共享也是如此。
嘗試新增force user = nobody
到您的共享定義中,看看是否有效。
2013 年 2 月 20 日編輯:
傳回testparm
的退出代碼是否不是零?儘管如此,我還是會繼續仔細觀察該配置區域。另外,我不確定 smb.conf 的大小寫敏感度如何,但我看到的每個範例(例如)的map to guest = Bad User
B 和 U 都是大寫的。簽出Samba 手冊頁了解您正在使用的選項,並仔細檢查所有內容。
答案2
這就是 OpenElec 的配置方式。應該做你所要求的。 (即使是一年後......也許會對下一個有所幫助)只需根據需要調整共享設定即可。
[global]
server string = YOURSERVERNAME
workgroup = WORKGROUP
netbios name = %h
security = share
guest account = root
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
smb ports = 445
max protocol = SMB2
min receivefile size = 16384
deadtime = 30
os level = 20
mangled names = no
syslog only = yes
syslog = 2
name resolve order = lmhosts wins bcast host
preferred master = auto
domain master = auto
local master = yes
printcap name = /dev/null
load printers = no
browseable = yes
writeable = yes
printable = no
encrypt passwords = true
enable core files = no
passdb backend = smbpasswd
smb encrypt = disabled
use sendfile = yes
[share]
comment = Share
path = /share
available = yes
browsable = yes
writable = yes
public = yes
答案3
由於谷歌搜尋將我們帶到這裡並且沒有明確的答案,所以我總結了一下。
以下是確保 SMB 用戶端在存取 Samba 伺服器時不會提示輸入使用者名稱和密碼所需的條件:
加到
guest account = <owner-of-your-shares>
一個[global]
部分下。重要的是,您的股票的所有者帳戶有權存取它們。如果您不這樣做,Samba 將假定來賓帳戶是nobody
不太可能存取您共享中的資料的使用者。或者,您可以
force user = <owner-of-your-share>
在您的[shareXYZ]
區塊下方指定。確保你
[shareXYZ]
有guest ok = yes
.設定
browsable = yes
但它通常繼承自併[global]
預設為。yes
然後,可能security = user
還應該進行設定(當您的環境中沒有設定 Active Directory 時,這是預設值)。不過,我不確定是否需要此標誌,因為我的環境中沒有 AD。
當然,如果你想讓用戶nobody
工作,那麼你可以chown -Rh 65534:65534 /yourshare
,之後你只需要guest ok = yes
在你的[shareXYZ]
.
請注意,設定rwx
為others
( chmod o+rwx /yourshare
) 不會讓 Samba 及其nobody
使用者進入共用。我已經用 核實過這一點strace -f -e chdir,geteuid,getegid -p <pid-of-the-parent-smbd-process>
。也許 Samba 只是忽略了為others
?設定的權限。沒有把握。
答案4
這可能不是每個有此類問題的解決方案,但我的問題是由於共享目錄所在的父目錄的權限引起的。 一旦我啟用了“由其他人讀取”,我就可以匿名訪問股份。這讓我有點驚訝,因為在 Windows 伺服器中,父目錄的權限對於共用目錄並不重要。
所以我的路徑看起來像這樣:
/data1/Downloads
我必須在data1
目錄上啟用“由其他人讀取”。
我不需要做任何特別的事情smb.conf
,我的分享條目看起來像這樣...
[Downloads]
path = /data1/Downloads
browseable = yes
read only = yes
guest ok = yes
public = yes