samba服務器可以實現windows與linux的文件共享,SMB協議是建立在NetBIOS協議之上的應用協議,是基於TCP138、139兩個 端口的服務,NetBIOS出現之後,Microsoft就使用 NetBIOS實現了一個網絡文件/打印服務系統。這個系統基於NetBIOS設定了一套文件共享協議,Microsoft稱之爲SMB(Server Message Block) 協議,這個協議被用於Lan Manager和Windows服務器系統中,實現不同計算機之間共享打印機和文件等。
Fedora Samba使SMB協議運行在NetBIOS協議上,並且使用Windows的NetBEUI協議讓Unix/Linux服務器可以在Windows的網絡鄰居上被訪問到。
在做嵌入式linux開發的時候,難免需要在linux宿主機開發環境與windows操作系統之間共享文件和打印等,實現的方法當然是多種多樣的,這裏我通過在Fedora14下建立Samba 服務器實現fedora與windows之間的文件共享。
一、安裝samba服務器
?安裝samba服務器的方法是通過 yum 來在線安裝 Samba 。
yum -y install samba (注意:此時你的計算機必須可以上網,或你的VM虛擬機可以上網,這個命令纔可以正確運行)
也可以通過系統-管理-添加/刪除程序菜單來安裝,在窗口中搜索smaba,選擇合適的程序版本安裝即可。
(安裝過程中需要確保yum可用,網絡配置正確。)
?然後安裝 個 samba 的 圖形界面管理軟件
yum -y install system-config-samba
二、配置smaba服務器(建議用方法2)
方法1:
配置主要通過編輯/etc/samba/smb.conf來實現。(要有讀寫權限,su到root)
修改權限
[root@localhost ~]#chmod 777 smb.conf
[root@localhost ~]#gedit /etc/Samba/smb.conf ← 編輯Fedora Samba 的配置文件
workgroup = WORKGROUP //設置工作組
server string = %U's Samba %v //描述信息%U代表當前登陸用戶
netbios name = fedora //netbios名字,fedora9 默認沒有啓用
log file = /var/log/Samba/log.%m //日誌文件保存路徑%m你的windows主機名
max log size = 50 //日誌最大容量
security = user //安全級別,user需要用戶名和密碼,share級別則不要
[Fedora Samba] //建立一個共享名爲Fedora Samba的共享
comment = Samba//描述信息
path = /home /samba//共享路徑
public = no //是否允許guest用戶訪問(相當於guest ok = yes/no)
writable = yes //是否可寫
write list = bsc //可以寫入的用戶列表(@代表用戶組)
方法2:
注意:也可以不用打開smb.conf進行配置
打開smb 的 管理軟件
# system-config-samba
Preference(首選項)->Samba User (用戶配置)
上面是我配置的兩個用戶,如(點擊Add User)增加mysystem這個用戶:
在這裏要記得用戶名和密碼,在後面的XP登錄時要用到。
點擊 增加共享的路徑和可以使用共享的用戶(在這裏設置爲: )
單擊OK,就會自動配置好smb.conf文件。
三、建立共享目錄(若用第二種方法配置,則只需執行這部分下面的紅色部分)
[root@localhost ~]# mkdir /home /samba ← 建立共享文件專用目錄
[root@localhost ~]# chown -R nobody /home /samba ← 設置專用目錄歸屬爲 nobody
[root@localhost ~]# chmod 777 /home/samba/ ← 將專用目錄屬性設置爲 777,否則不能將文件放在共享文件夾中
[root@localhost ~]# smbpasswd -a root ← 將系統用戶 bsc(此用戶必須未已存在的,如果不存在,useradd name添加吧)加入到 Fedora Samba 用戶數據庫
New SMB password: ← 輸入該用戶用於登錄 Samba 的密碼
Retype new SMB password: ← 再次確認輸入該密碼
[root@localhost ~]#
第四步 啓動 samba服務
關閉防火牆
[root@localhost ~]#service iptables stop
或者配置防火牆:
[root@localhost ~]#gedit /etc/sysconfig/iptables ← 編輯 iptables 配置文件
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT ← 找到此行,在下面添加如下行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A INPUT -p udp -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m udp --dport 138 -j ACCEPT
下面重新啓動iptables是修改生效
[root@localhost ~]# /etc/rc.d/init.d/iptables restart。顯示ok就行了
第五步 啓動 Fedora Samba 服務(含兩個守護進程:smb,nmb)
[root@localhost ~]# chkconfig smb on ← 設置 Fedora Samba 自啓動
[root@localhost ~]# chkconfig --list smb ← 確認 Fedora Samba 啓動標籤,確認 2-5 爲 on 的狀態
[root@localhost ~]#chkconfig nmb on ← 設置 nmb 自啓動
[root@localhost ~]## chkconfig --list nmb ← 確認 nmb 啓動標籤,確認 2-5 爲 on 的狀態
nmb 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@localhost ~]#/etc/rc.d/init.d/smb start(或者service smb start) ← 啓動 Fedora Samba 服務
Starting SMB services: [ OK ]
[root@localhost ~]# /etc/rc.d/init.d/nmb start ← 啓動 nmb 服務
Starting NMB services: [ OK ]
通過以上配置samba服務器建立成功了,那就測試下吧:
打開xp開始 -> 運行―>\\你的linux的ip地址([root@localhost ~]# ifconfig查看ip),輸入用戶名和密碼,就可看到共享的文件夾了,好了,samba完全配置好了,但是真的行了嗎?當你試圖打開文件夾的時候發現,沒有權限。
解決方法如下:
在其它版本的linux中(AS5,AS4,Centos)中做如上設置後就可以正常訪問共享了,但是在fedora中卻不行,我們只能看到共享,但是訪問的時候會出現拒絕訪問的情況,這是爲什麼呢?因爲selinux對samba共享做了限制,我們只用把selinux中對samba的限制給解決了就行了,我們做如下設置就OK了:
如下所示:
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
將其全部解限:
#setsebool samba_enable_home_dirs on
#setsebool samba_export_all_ro on
#setsebool samba_export_all_rw on
我們可以用命令getsebool -a查看:
查看上面三項是否爲on,打開的話你的共享應該就正常了。
或者關閉selinux
注意:如果使用service iptables stop 這種的方式關閉防火牆,則在下次使用samba時,要再次關閉防火牆。
出現的問題:
1、在連接時出現:
fedora 9.0 的防火牆未關
2、可以連接上目標機,但是進入文件夾時,出錯,如下圖:
這是你的selinux對samba進行了限制,解決方法:
#setsebool samba_enable_home_dirs on
#setsebool samba_export_all_ro on
#setsebool samba_export_all_rw on
對於上面的兩個問題,因爲是每次開機都是要輸入上面的命令。你可以寫個shell,這樣每次只需運行這個shell 就得。
個人寫個shell如下,供大家參考:
samba-shell:
#samba start shell
#!/bin/bash
service iptables stop
setsebool samba_enable_home_dirs on
setsebool samba_export_all_ro on
setsebool samba_export_all_rw on
echo
echo
service iptables status
getsebool -a |grep samba
service smb status
service nmb status