linux環境下samba之Tarball安裝

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

先學習一些基礎.
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 successfully 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 ...... }}





[火星人 ] linux環境下samba之Tarball安裝已經有374次圍觀

http://coctec.com/docs/linux/show-post-51645.html