使用samba實現linux,windows間文件共享

經常在linux下需要用到windows下的文件,但是將文件通過ftp上傳到linux上又很浪費時間,而且很浪費磁盤的空間,也很難保證兩臺機器上文件的同步,要是能夠像windows之間那樣直接進行共享就好了,下面我就們就來看看如何在linux和windows下面共享文件呢。

本文是一臺windows7和兩臺RedHat5.3機器上進行測試,windows7IP地址爲192.168.31.226,機器名爲WANGHAIFENG-PC,Linux的IP分別是192.168.31.145和192.168.31.167。

(一)檢查和安裝samba是否安裝

(1)分別檢查兩臺機器samba的安裝情況,

# uname -r
2.6.18-53.el5                               //192.168.31.145
[root@dhcp_host mnt]# rpm -qa | grep samba
samba-client-3.0.25b-0.el5.4
system-config-samba-1.2.39-1.el5
samba-3.0.25b-0.el5.4
samba-common-3.0.25b-0.el5.4

# uname -r
2.6.18-53.el5                              //192.168.31.167
#rpm -qa | grep samba
samba-common-3.0.25b-0.el5.4
samba-client-3.0.25b-0.el5.4

從上面可以看出,145安裝了samba的服務端和客戶端,而在167上只安裝了samba的客戶端,因此在145能夠查看和共享文件,而在167上只能查看文件,假如需要共享文件,可以在RedHat的安裝光盤中獲得samba-3.0.25b-0.el5.4.rpm進行安裝,system-config-samba-1.2.39-1.el5是samba圖形化的配置程序。

(2)安裝samba Server端,在192.168.31.167上進行安裝

#rpm -Uvh samba-3.0.33-3.7.el5.i386.rpm
warning: samba-3.0.33-3.7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        perl(Convert::ASN1) is needed by samba-3.0.33-3.7.el5.i386
        samba-common = 0:3.0.33-3.7.el5 is needed by samba-3.0.33-3.7.el5.i386

這是由於原先的Samba版本比現有的版本低,因此需要進行升級,否則無法安裝。

# rpm -Uvh samba-common-3.0.33-3.7.el5.i386.rpm
warning: samba-common-3.0.33-3.7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        samba-common = 0:3.0.25b-0.el5.4 is needed by (installed) samba-client-3.0.25b-0.el5.4.i386

由於samba-client依賴於現在的samba-common,因此先刪除samba-client,然後再升級安裝samba-common

# rpm -e samba-client-3.0.25b-0.el5.4.i386
# rpm -Uvh samba-common-3.0.33-3.7.el5.i386.rpm

warning: samba-common-3.0.33-3.7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:samba-common           ########################################### [100%]

繼續安裝samba-3.0.33-3.7.el5.i386.rpm

#rpm -Uvh samba-3.0.33-3.7.el5.i386.rpm
warning: samba-3.0.33-3.7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        perl(Convert::ASN1) is needed by samba-3.0.33-3.7.el5.i386

從上圖可以看出來還缺少perl(Convert::ASN1) 這個模塊,在安裝光盤中找到perl-Convert-ASN1-0.20-1.1.noarch.rpm這個文件

# rpm -Uvh perl-Convert-ASN1-0.20-1.1.noarch.rpm
warning: perl-Convert-ASN1-0.20-1.1.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:perl-Convert-ASN1      ########################################### [100%]
#rpm -Uvh samba-3.0.33-3.7.el5.i386.rpm
warning: samba-3.0.33-3.7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:samba                  ########################################### [100%]
# rpm -Uvh samba-client-3.0.33-3.7.el5.i386.rpm
warning: samba-client-3.0.33-3.7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:samba-client           ########################################### [100%]
# rpm -qa | grep samba
samba-common-3.0.33-3.7.el5
samba-3.0.33-3.7.el5
samba-client-3.0.33-3.7.el5

samba就已經安裝完成了,上面這些安裝文件都能夠在RedHat的安裝CD中找到。

(3)添加samba用戶

使用smbpasswd添加samba用戶,用戶必須是linux系統中已有的用戶,密碼則不必和系統用戶相同。

# smbpasswd root
New SMB password:
Retype new SMB password:
Failed to find entry for user root.
Failed to modify password entry for user root

出現上面這個錯的原因是因爲需要爲root用戶創建一個用戶,使用smbpasswd –a root就可以創建一個entry了,再次調用smbpasswd就不需要使用-a選項了, -x上刪除用戶。

# smbpasswd -a root
New SMB password:
Retype new SMB password:
Added user root.
#smbpasswd root
New SMB password:
Retype new SMB password:

# smbpasswd -a wanghaifeng
New SMB password:
Retype new SMB password:
Failed to modify password entry for user wanghaifeng

出現上述錯誤的原因是因爲在這臺系統中不存在wanghaifeng這個用戶,假如需要可以使用adduser添加用戶。

(4)samba配置文件

smaba的配置文件都/etc/samba/下面,smb.conf是主配置文件。

(二)在windows下面開啓共享

在D盤中新建文件夾samba_test,右擊->屬性->共享,點擊共享按鈕,根據需要添加對應的用戶,可以選擇不同的權限,位置是\\WANGHAIFENG-PC\samba_test ,WANGHAIFENG-PC是機器名。

(三)在linux下查看共享文件

(1)查看所有共享內容

smbclient 是Samba 的Linux 客戶端,在Linux機器上用來查看服務器上的共享資源,也可以象FTP一樣,用戶可以登錄Samba服務器,也可以上傳put和下載get文件[3]。使用下面的命令,其中用戶名是指windows系統的用戶名,然後輸入該用戶的密碼。

#smbclient -L //IP或機器名  [-U 用戶名]

# smbclient -L //WANGHAIFENG-PC -U wanghaifeng
Password:
Domain=[WANGHAIFENG-PC] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      遠程管理
        C$              Disk      默認共享
        D$              Disk      默認共享
        E$              Disk      默認共享
        IPC$            IPC       遠程 IPC
        print$          Disk      打印機驅動程序
        samba_test      Disk     
        Users           Disk     
Domain=[WANGHAIFENG-PC] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
[root@lcmsp_test samba]# smbclient -L //192.168.31.226 -U wanghaifeng
Password:
Domain=[WANGHAIFENG-PC] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      遠程管理
        C$              Disk      默認共享
        D$              Disk      默認共享
        E$              Disk      默認共享
        IPC$            IPC       遠程 IPC
        print$          Disk      打印機驅動程序
        samba_test      Disk     
        Users           Disk     
session request to 192.168.31.226 failed (Called name not present)
session request to 192 failed (Called name not present)
session request to *SMBSERVER failed (Called name not present)
NetBIOS over TCP disabled -- no workgroup available

分別使用IP和主機名進行測試,發現使用主機名進行訪問的時候一切正常,使用IP進行訪問就會出現上面的那些問題,尚待解決…,已經可以在共享內容中看到我們的共享文件samba_test。

# smbclient -L //WANGHAIFENG-PC/
Password:
Anonymous login successful
Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Sharename       Type      Comment
        ---------       ----      -------
cli_rpc_pipe_open: cli_nt_create failed on pipe \srvsvc to machine WANGHAIFENG-PC.  Error was NT_STATUS_ACCESS_DENIED
Error returning browse list: NT_STATUS_ACCESS_DENIED
Anonymous login successful
Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
#smbclient -L //WANGHAIFENG-PC/ -U Guest
Password:
Anonymous login successful
Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Sharename       Type      Comment
        ---------       ----      -------
cli_rpc_pipe_open: cli_nt_create failed on pipe \srvsvc to machine WANGHAIFENG-PC.  Error was NT_STATUS_ACCESS_DENIED
Error returning browse list: NT_STATUS_ACCESS_DENIED
Anonymous login successful
Domain=[WORKGROUP] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------

嘗試着匿名登錄,但是失敗了,Windows上開啓了Guest用戶後,也是不行,不知道有什麼好的方法。

(2)登錄獲取共享內容

使用下面的命令能夠登錄samba上傳和下載文件

#smbclient  //IP地址或者主機名/共享文件夾    -U 用戶

# smbclient  //WANGHAIFENG-PC/samba_test -U wanghaifeng
Password:
Domain=[WANGHAIFENG-PC] OS=[Windows 7 Ultimate 7600] Server=[Windows 7 Ultimate 6.1]
smb: \> ?                           //登錄成功,進入samba的shell,輸入?查看所有命令
?              altname        archive        blocksize      cancel        
case_sensitive cd             chmod          chown          close         
del            dir            du             exit           get           
getfacl        hardlink       help           history        lcd           
link           lock           lowercase      ls             mask          
md             mget           mkdir          more           mput          
newer          open           posix          posix_open     posix_mkdir   
posix_rmdir    posix_unlink   print          prompt         put           
pwd            q              queue          quit           rd            
recurse        reget          rename         reput          rm            
rmdir          showacls       setmode        stat           symlink       
tar            tarmode        translate      unlock         volume        
vuid           wdel           logon          listconnect    showconnect   
!             
smb: \> ls                        //ls可以查看有哪些文件
  .                                   D        0  Fri Mar 12 11:37:15 2010
  ..                                  D        0  Fri Mar 12 11:37:15 2010
  test.txt                            A       11  Fri Mar 12 11:37:44 2010

                51199 blocks of size 1048576. 24705 blocks available
smb: \> ? du                 //? 命令        可以查看命令的使用方法
HELP du:
        <mask> computes the total size of the current directory

smb: \> get test.txt         //使用get進行下載
getting file \test.txt of size 11 as test.txt (3.6 kb/s) (average 3.6 kb/s)
smb: \> put install.log     //使用put進行上傳操作
putting file install.log as \install.log (326.4 kb/s) (average 326.4 kb/s)

上述的命令和ftp的命令非常的類似,可以使用put上傳,get進行下載操作。

(3)掛載共享文件夾到Linux目錄

我們也可以使用mount命令將共享的Windows文件掛載到Linux目錄下面,命令格式如下面所示,username和password都是指,windows系統的用戶名和密碼,與samba用戶名和密碼無關

# mount -t cifs -o username=xxx,password=xxx //hostname/dir /mnt/tmp

# mount -t cifs -o username=wanghaifeng //192.168.31.226/samba_test /mnt
Password:
#cd /mnt/
[root@lcmsp_test mnt]# ls
install.log  test.txt
#ls -l
總計 37
-rwxrwSrwt 1 root root 36099 03-12 11:46 install.log
-rwxrwSrwt 1 root root    11 03-12 11:37 test.txt
#df -k
文件系統               1K-塊        已用     可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
                      36216640  25681808   8665420  75% /
/dev/hdc1               101086     22173     73694  24% /boot
tmpfs                   517308         0    517308   0% /dev/shm
//192.168.31.226/samba_test
                      52428796  27130460  25298336  52% /mnt

假如用下面這種方式掛載,便會報錯,由於在RedHat5上已經默認不知道smbfs了

# mount -t smbfs -o username=wanghaifeng //192.168.31.226/samba_test /mnt
mount: unknown filesystem type 'smbfs'

(四)在linux下共享文件

那如何在linux下共享文件呢,這都是在samba的配置文件smb.conf裏面設置的,默認是訪問samba用戶的的HOME目錄。

可以根據需求將配置共享目錄,是否匿名,具體的配置可以查看參考資料【3】和【4】

(五)在windows下查看linux共享文件

在windows查看linux下的共享文件就很方便了,在文件瀏覽器裏直接輸入\\IP就可以直接查看文件內容了,比如\\192.168.31.145,輸入用戶名和密碼,這裏用戶名和密碼就是在開始設置的samba用戶名和密碼

參考資料:

[1] mount: unknown filesystem type "smbfs" http://hi.baidu.com/joe266/blog/item/a2ddfdef94729211fdfa3ce8.html

[2]http://lists.samba.org/archive/samba/2005-April/103326.html

[3]http://www.linuxsir.org/main/node/158

[4]http://gchuyun.iteye.com/blog/171436

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章