samba的核心是兩個守護進程smbd和nmbd程序,在服務器啟動到停止期間持續運行。Smbd和nmbd使用的全
部配置信息全都保存在smb.conf文件中。Smb.conf向smbd和nmbd兩個守護進程說明輸出什麼以便共享,
共享輸出給誰及如何進行輸出。Smbd進程的作用是處理到來的SMB軟件包,為使用該軟件包的資源與
Linux進行協商,nmbd進程使其它主機(或工作站)能浏覽Linux服務器。
如果安裝時用rpm安裝,那麼啟動samba不用service smb start,用service nmbd start,service smbd start也可以的。
在smb.conf文件中,注釋行以“#”開頭,同時每項中英文字母不區分大小寫,在一行最後字符尾加
“\”,可將一行分成多行。用“;”開頭的行,是可改變的配置,將“;”去掉時,該配置將取作用。
[global](全局參數的設置,它對samba的功能具有很大的影響,主要用來設置整個系統規則。
workgroup= 這是你在windows中的域。
server string= 這是在windows中看到你的samba的解釋。
netbios name =最好是你的機器名,如果把改句注消,默認的是你LINUX機器名,不過,最好還是自己填上
dos charset=cp936
unix charset=cp936 加上這二句就可以正確顯示中文了。
hosts allow 允許登錄的linux-samba的主機名單,用IP地址給出,多個IP地址用空格分開,不在名單中的主機將不能得到samba提供的服務,這也是網絡安全的一個方面。
printcap name 指定printcap文件地址,通常為/etc/printcap,包含了linux打印機的配置信息。
load printers 允許使用共享打印機時,默認值為yes。
printing 如果使用的打印機是非標准的,那麼應該指出打印機系統類型。
log file = /usr/local/samba/var/log.%m
max log size = 0
上面這兩行則是Samba日志的相關定義。其記錄文件的位置是放在/var/log/samba/%m.log,安裝目錄不一樣,日志可不一樣,後面的一條是定義日志記錄文件的大小,單位是KB,如果是0的話就不限大小。
guest acount 來賓帳戶,表示用哪一個Linux用戶作為所要的客戶連接,定義Samba缺省的用戶賬號,這個賬號必須在/etc/passwd中。
security 指定安全模式。大多數用戶使用user級的安全模式,samba用本地linux口令文件驗證。
security = security_level
定義Samba的安全級別,按從低到高分為四級:share,user,server,domain。它們對應的驗證方式如下:
share:沒有安全性的級別,任何用戶都可以不要用戶名和口令訪問服務器上的資源。
user:samba的默認配置,要求用戶在訪問共享資源之前資源必須先提供用戶名和密碼進行驗證。
server:和user安全級別類似,但用戶名和密碼是遞交到另外一個服務器去驗證,比如遞交給一台NT服務器。如果遞交失敗,就退到user安全級。
domain:這個安全級別要求網絡上存在一台Windows的主域控制器,samba把用戶名和密碼遞交給它去驗證。
後面三種安全級都要求用戶在本linux機器上也要系統帳戶。否則是不能訪問的
smb passwd file=/etc/samba/smbpasswd (設置smb密碼文件的位置)
username map =/etc/smbusers
encrypt passwords =no 采用的時明文密碼驗證,如果是加密的,就改為yes
記得某月的某一天,我下定決定安裝任何軟件包只用源碼,不用rpm。雖然很麻煩,但是對於了解linux內部有些幫助。
首先我們創建一個文檔,邊安裝配置samba,邊寫教程。
從www.samba.org下載samba最新源碼包,我下載的是samba-3.0.7.tar.gz,把它放在我的目錄的中/root/lova/samba下。
tar -zxvf samba-3.0.7.tar.gz 解壓得到samba-3.0-7
cd samba-3.0.7
cat README 先看說明,可惜E文太差,不太懂,直接安裝吧。
find . -name configure
./source/configure 原來藏在這
cd source/
mkdir /usr/local/samba 創建安裝目錄
./configure --prefix=/usr/local/samba/ 安裝到/usr/loca/samba
make && make install
cd /usr/local/samba/ 到安裝目錄看看
ls
bin include lib man private sbin swat var 安裝成功,怎麼沒有etc目錄和smb.conf文件呀,那我自己創建一個
[root--/usr/local/samba]mkdir etc
[root--/usr/local/samba]cp ~/love/samba/samba-3.0.7/examples/smb.conf.default ./etc/smb.conf
好了現在看看我們的目標。
一、有一個共享目錄,只可以讀,不可以做任何改變。
二、有一個共享目錄,任何人都可以做任何改變,包括添加目錄文件,刪除目錄文件。
三、每個用戶可以看到自己的主目錄,其它用戶不可以看到,當然不可以作改動。
四、有一個共享目錄,組A中的人可以做任何改動,組B中的人只可以讀,組C中的人看不到。
五、每個用戶登錄後都可以使用打印機。(沒有成功)。
目標1方法1
[root--~]cd /usr/local/samba/etc/
[root--/usr/local/samba/etc]cp smb.conf beifen 備份一下免得改錯了。
修改smb.conf,
workgroup = MSHOME 改為你linux所在的工作組
security = share 開放共享
在smb.conf最後加上
[read1]
comment = read1
path = /home/read1
public = yes
guest ok = yes
writable = yes
創建共享目錄
whoami
root
umask
0022
mkdir /home/read1
cd !$
cat > linux
hi linux
ll /home/read1/
總用量 4
-rw-r--r-- 1 root root 9 10月 24 11:20 linux
644嘛
adduser nxgz ; passwd !$ ; 創建系統用戶
[root--~]/usr/local/samba/bin/smbpasswd -a nxgz 再把這個用戶添加為samba用戶
Can't load /usr/local/samba//lib/smb.conf - run testparm to debug it 怎麼出錯了,好像沒有在lib下沒有smb.conf,那我就加上吧
[root--~]cp /usr/local/samba/etc/smb.conf /usr/local/samba/lib/
[root--~]/usr/local/samba/bin/smbpasswd -a nxgz 添加samba用戶成功
New SMB password:
Retype new SMB password:
startsmbfilepwent_internal: file /usr/local/samba//private/smbpasswd did not exist. File suclearcase/" target="_blank" >ccessfully created.
Added user nxgz.
[root--~]service iptables stop
清除所有鏈: [ 確定 ]
刪除用戶定義的鏈: [ 確定 ]
將內建鏈重設為默認的“ACCEPT”策略: [ 確定 ]
[root--~]service network restart
正在關閉接口 eth0: [ 確定 ]
關閉環回接口: [ 確定 ]
設置網絡參數: [ 確定 ]
彈出環回接口: [ 確定 ]
彈出界面 eth0: [ 確定 ]
[root--~]/usr/local/samba/sbin/smbd -D 啟動samba的二個進程
[root--~]/usr/local/samba/sbin/nmbd -D
到win-xp下,打開的的電腦,找到地址,輸入\linux主機名,可以找到共享的目錄read,成功。
方法2
在smb.conf最後加上如下
[read2]
comment = read2
path = /home/read2
public = yes
read only = yes
mkdir /home/read2 ; cd !$ ; cat > linux ; chmod -R 777 /home/read2 ; 創建共享目錄及修改權限
然後
service iptables stop
service network restart
/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/nmbd -D
在win-xp下是看不到我們共享的read2。
可能是smb.conf有問題,我們用testparm工具檢查一下。
[root--~]testparm
bash: testparm: command not found 沒有輸入完整路徑。
[root--~]/usr/local/samba/bin/testparm
Load smb config files from /usr/local/samba//lib/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[read]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
就是沒有read2,我們仔細看看第一行,Load smb config files from /usr/local/samba//lib/smb.conf,好像testpart工具是根據lib/smb.conf得到的,lib下的 smb.conf和etc下的smb.conf完全不一樣嘛,因為我們增加了read2,我們可以復制覆蓋了它
cp -f /usr/local/samba/etc/smb.conf /usr/local/samba/lib/
然後
service iptables stop
service network restart
/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/nmbd -D
回到win-xp下可以找到,哈哈,好了,雖然它的權限為777,但是由read only控制,不可以刪除,添加。
目標1成功
由於每次修改完/usr/loca/samba/etc/smb.conf,我們都要
cp -f /usr/local/samba/etc/smb.conf /usr/local/samba/lib/
然後
service iptables stop
service network restart
/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/nmbd -D
我們可以寫個shell
emacs samba.sh
cp -f /usr/local/samba/etc/smb.conf /usr/local/samba/lib/
service iptables stop
service network restart
/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/nmbd -D
修改完,啟動時可以
1, sh samba.sh
2, sh < samba.sh
3, chmod 777 samba.sh
mv samba.sh ~/bin
samba.sh
這三種方法都可以。
目標2,
以上保持不變,在smb.conf最後加上
[write]
comment = write
path = /home/write
public = yes
guest ok = yes
writable = yes
mkdir /home/write ; cd /home/write ; cat >linux ; chmod -R 777 /home/write/ ;sh < samba.sh創建共享目錄文件,開放權限,重啟服務
到win-xp下read目錄下可以讀,在write中可以刪除,添加,改變原文件,目標2完全正確。我們再試一下中文問題,在win-xp下打開linux的write目錄,找編輯linux,增加中文,並在write目錄下建立中文目錄,我們再回到linux下看結果是否可以正常顯示中文。結果編輯linux的中文可以正常顯示,中文目錄是亂碼,想想如何解決。
在smb.confr的[global]中添加
dos charset=cp936
unix charset=cp936 我是加到 security = share的下面了
在win-xp打開write添加中文目錄,回到linux下,一看可以正確識別中文
目標3,
多建立幾個samba用戶。
adduser sambau001 ; passwd !$ ; /usr/local/samba/bin/smbpasswd -a sambau001
用以上方法增加sambau002,sambau003用戶
分別su到這些用戶,增加文件linux,然後修改smb.conf,把security = 改為user,這次請重新啟動一下win,因為添加用戶了,這時輸入用戶和口令就可以進去了,並可以看到自己的目錄
我的home如下
[homes]
comment = home
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
用一個用戶進入,win-xp下建立一個文件,一個目錄,在目錄中另外建立一個文件,在linux用該用戶進入自己的目標,可以看到剛才建立的文件目錄,文件權限符合664,目錄權限符合775。
目標3成功。
目標4,
建立3個組
groupadd sambag001 ; groupadd sambag002 ; groupadd sambag003
usermod -g sambag001 sambau001 ; usermod -g sambag002 sambau002 ; usermod -g sambag003 sambau003 把剛才3個用戶分別添加到3個組中。
mkdir share ;cd share/ ;cat > linux ; chmod -R 777 /home/share/ 開放權限,在smb.conf中控制它
要求sambag001組中的用戶r,sambag002組中的用戶rw,sambag003組中的用戶no
在smb.conf中添加以下
[share]
comment = share
path = /home/share
public = no
valid users = @sambag001,@sambag002
invalid users = @sambag003
write list = @sambag002
再加到win-xp下試,成功
沒列出的也不可以進入。
其中用valid userd列出的只有r權限,如果在write list前加個;號,那麼sambag001中的用戶和sambag002中的用戶只可以看。
其中[]裡面的是指定的共享名,一般就是網絡鄰居裡面可以看見的文件夾的名字。
comment指的是對改共享的備注。
path指定共享的路徑
allow hosts和deny hosts和前面的全局設置的方法一樣這裡不再提及。
writeable指定了這個目錄缺省是否可寫。
user設置所有可能使用該共享資源的用戶,也可以用@group代表group這個組的所有成員,不同的項目之間用空格或者逗號隔開。
valid users指定能夠看到該共享資源的用戶和組。
invalid users指定不能夠看到該共享資源的用戶和組。
read list 指定只能讀取該共享資源的用戶和組。
write list指定能讀取和寫該共享資源的用戶和組。
admin list指定能管理該共享資源(包括讀寫和權限賦予等)的用戶和組。
public指明該共享資源是否能給游客帳號訪問,這個開關有時候也叫guest ok,所以有的配置文件中出現guest ok = yes其實和public = yes是一樣的。
create mode指明新建立的文件的屬性,一般是0755。
directory mode指明新建立的目錄的屬性,一般是0755。
force user強制把建立文件的屬主是誰。如果我有一個目錄,讓guest可以寫,那麼guest就可以刪除,如果我用force user= grind強制建立文件的屬主是grind,同時限制create mask = 0755,這樣guest就不能刪除了。
browseable 指定其它用戶能否浏覽該用戶主目錄,當然不允許,所以置為no。
writable 使用戶訪問該目錄時具有讀取和寫入主目錄中的文件時,取值為yes,只有讀取權限時應置為no。
xp訪問linux成功,再試一下linux訪問xp
用 #smbclinet "\\nxgz\共享目錄名"
可以像telnet或ftp一樣登錄windows主機nxgz,要求你輸入密碼時,輸入密碼。
然後出現 smb:\>
由於是源碼安裝以下工具命令不成功。{{
smbmount //test/share /pub linux掛接windows目錄
mount -t smbfs -o username=WINDOWS主機登錄名,password=對應密碼 //PC-NAME/SHARE-DIR /mnt/tmp
smbmount //testsamba/pub pub linux與linux共享
添加相應目錄和用戶
1,一個一個添加用戶
以root用戶身份登錄,添加Linux用戶,並設定密碼:
adduser smbuser
passwd smbuser
把用戶smbuser加入到Samba 服務器用戶中並設定密碼:
smbpasswd -a smbuser
2,加入系統中的所有用戶
#vi /etc/passwd (把一些你不用或者你不知道的用戶全刪了)
# cat /etc/passwd │ mksmbpasswd.sh > /etc/samba/smbpasswd (把linux本機用戶加到smb用戶裡去)
#smbpasswd test (設置test用戶的smb訪問口令)
#/etc/rc.d/init.d/smb restart (重啟samba)
3,加入一部分
#smbadduser linuxname:2000name #增加用戶
用smbpasswd為每個用戶指定password,格式如下:(必須是Root)
smbpasswd userid:passwd userid2:passwd2 ...... }}