實戰linux與xp的訪問(原創) 小弟本身經過實踐終於配置成功了samba,寫下配置過程,但願高手多提意見,本文有個遺憾個人rpm安裝samba打印機共享成功,用源碼安裝打印機沒有成功,很是惋惜。(原創)本文只發表於[url]www.xxlinux.com[/url],做者tian1118(大學法律專業的linux愛好者)。特別感謝黑夜不在,燕南天等。 歡迎轉載,並保證本文的完整性,並註明出處。 先學習一些基礎。 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,邊寫教程。 從[url]www.samba.org[/url]下載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 好了如今看看咱們的目標。 1、有一個共享目錄,只能夠讀,不能夠作任何改變。 2、有一個共享目錄,任何人均可以作任何改變,包括添加目錄文件,刪除目錄文件。 3、每一個用戶能夠看到本身的主目錄,其它用戶不能夠看到,固然不能夠做改動。 4、有一個共享目錄,組A中的人能夠作任何改動,組B中的人只能夠讀,組C中的人看不到。 5、每一個用戶登陸後均可以使用打印機。(沒有成功)。 目標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 ...... }}