設定可透過 Windows 7 和 XBMC 存取的匿名公共 Samba 共用

設定可透過 Windows 7 和 XBMC 存取的匿名公共 Samba 共用

因此,我首先應該說,我在不到一周前成功完成了此操作,並且沒有遇到任何問題,但此後我重新格式化並重新配置了我的伺服器,現在我最難記住我是如何做到的。

這是我以前所擁有的以及我想要再次完成的。我在 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 UserB 和 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 伺服器時不會提示輸入使用者名稱和密碼所需的條件:

  1. 加到guest account = <owner-of-your-shares>一個[global]部分下。重要的是,您的股票的所有者帳戶有權存取它們。如果您不這樣做,Samba 將假定來賓帳戶是nobody不太可能存取您共享中的資料的使用者。

    或者,您可以force user = <owner-of-your-share>在您的[shareXYZ]區塊下方指定。

  2. 確保你[shareXYZ]guest ok = yes.

    設定browsable = yes但它通常繼承自併[global]預設為。yes

然後,可能security = user還應該進行設定(當您的環境中沒有設定 Active Directory 時,這是預設值)。不過,我不確定是否需要此標誌,因為我的環境中沒有 AD。

當然,如果你想讓用戶nobody工作,那麼你可以chown -Rh 65534:65534 /yourshare,之後你只需要guest ok = yes在你的[shareXYZ].

請注意,設定rwxothers( 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

相關內容