2014年5月22日 星期四

SAMBA 伺服器

在 Unix Like 分享檔案資料的 file system 是 NFS,在 Windows 『網路上的芳鄰』所使用的檔案系統為 Common Internet File System, CIFS 。SMBServer (Server Message Block 的簡寫),透過兩支服務來控制,如:
nmbd :管理工作群組、NetBIOS name 等。利用 UDP 協定開啟 port 137, 138 負責名稱解析。

smbd :管理 SAMBA 主機分享的目錄、檔案與印表機。 利用 TCP 協定來傳輸資料,開放的埠口為 139 及 445(不一定存在) 。
需軟體:
samba
: 提供 SMB 伺服器所需的各項服務程式 (smbd 及 nmbd)、 文件檔、以及其他與 SAMBA 相關的 logrotate 設定檔及開機預設選項檔案等。

samba-client
: 提供 Linux 做為 SAMBA Client 所需的工具指令,如掛載 SAMBA 檔案格式的 mount.cifs、 取得類似網芳相關樹狀圖的 smbtree。
samba-common
: 提供伺服器與用戶端都會使用到的資料,包括 SAMBA 的主要設定檔 (smb.conf)、語法檢驗指令 (testparm)。
網芳的預設限制:
  • 伺服器與用戶端之間必須要在同一個網域當中 (否則需要修改 Windows 預設防火牆);
  • 最好設定為同一工作群組;
  • 主機的名稱不可相同 (NetBIOS name);
  • 專業版 Windows XP 最多僅能提供同時 10 個用戶連線到同一台網芳伺服器上。
設定 smb.conf 設定檔
查看語系:   cat /etc/sysconfig/i18n   
cd /etc/samba 
cp smb.conf smb.conf.raw
 

vim smb.conf  
查閱設定正確性:  testparm
服務啟動與埠口觀察:
/etc/init.d/smb start
chkconfig smb onnetstat -tlunp | grep mbd

用戶端的檢驗
smbclient -L //127.0.0.1
mount -t cifs //127.0.0.1/temp /mnt
帳號密碼  
1. 設定smb.conf
    vim /etc/samba/smb.conf
       [global]
       workgroup = meteo
       netbios name = janelin
       server string = This is janelin's samba server
       unix charset = utf8
       display charset = utf8
       dos charset = cp950
       log file = /var/log/samba/%m.log
參考鳥哥 http://linux.vbird.org/linux_server/0370samba.php


在 Unix Like 分享檔案資料的 file system 是 NFS,在 Windows 『網路上的芳鄰』所使用的檔案系統為 Common Internet File System, CIFS 。SMBServer (Server Message Block 的簡寫),透過兩支服務來控制,如:
nmbd :管理工作群組、NetBIOS name 等。利用 UDP 協定開啟 port 137, 138 負責名稱解析。
smbd :管理 SAMBA 主機分享的目錄、檔案與印表機。 利用 TCP 協定來傳輸資料,開放的埠口為 139 及 445(不一定存在) 。

所需軟體:
samba: 提供 SMB 伺服器所需的各項服務程式 (smbd 及 nmbd)、 文件檔、以及其他與 SAMBA 相關的 logrotate 設定檔及開機預設選項檔案等。
samba-client: 提供 Linux 做為 SAMBA Client 所需的工具指令,如掛載 SAMBA 檔案格式的 mount.cifs、 取得類似網芳相關樹狀圖的 smbtree。
samba-common: 提供伺服器與用戶端都會使用到的資料,包括 SAMBA 的主要設定檔 (smb.conf)、語法檢驗指令 (testparm)。

網芳的預設限制:

伺服器與用戶端之間必須要在同一個網域當中 (否則需要修改 Windows 預設防火牆);
最好設定為同一工作群組;
主機的名稱不可相同 (NetBIOS name);
專業版 Windows XP 最多僅能提供同時 10 個用戶連線到同一台網芳伺服器上。
設定 smb.conf 設定檔

查看語系:   cat /etc/sysconfig/i18n   

cd /etc/samba 
cp smb.conf smb.conf.raw 
vim smb.conf  

查閱設定正確性:  testparm

服務啟動與埠口觀察:
/etc/init.d/smb start 
chkconfig smb on
netstat -tlunp | grep mbd

用戶端的檢驗
smbclient -L //127.0.0.1
mount -t cifs //127.0.0.1/temp /mnt

帳號密碼  
1. 設定smb.conf
    vim /etc/samba/smb.conf
       [global]
       workgroup = meteo 
       netbios name = janelin
       server string = This is janelin's samba server
       unix charset = utf8 
       display charset = utf8 
       dos charset = cp950 
       log file = /var/log/samba/%m.log 
       max log size = 50 
       load printers = no
      #與密碼有關 
       security = user
       passdb backend = tdbsam  #密碼檔 /etc/samba/passwd.tdb
      #分享設定
      [homes] 
         comment = Home Directories
         browseable = no
         writable = yes
         create mode = 0664 <==建立檔案的權限為 664 
         directory mode = 0775 <==建立目錄的權限為 775 
      [project] <==共享資源範例
          comment = smbuser's project
          path = /home/project 
          browseable = yes
          writable = yes 
          write list = @users <==寫入者 群組或直接用帳號
      #改完 smb.conf 用 testparm檢查語法



關於chmod 0664
 4:Set User ID (SUID) 或 Set Group ID (SGID)。表示该档案在执行时会以档案拥有人或群组的身份执行。
 2:如果该档案可以被执行(具 x 权限),则在执行时会以拥有者群组的身份执行。如果是不能被执行的档案,在读写时会控制不能让多个程序同时  存取(locked)。
 1,sticky。如果将档案设为所有人都可以读写,并设定 sticky,则所有人都可以修改该档案,但是不能删除。如果是目录开放读写权限,但设定 了 sticky,则使用者只能新增档案,不能删除,这个可以应用于 FTP 的上传区。
假设我们要设定档案 myfile 可以被所有人读、写、执行,并设定 sticky:
# chmod 1777 myfile
chmod 2770 dir
这样dir文件夹的权限就是drwxrws—
例題:分享 /home/project 目錄,權限設定。
因為要開放給 users 群組,而共享群組的權限通常是『 2770 』含有 SGID 的特殊旗標功能,故可設定如下:
mkdir /home/project
chgrp users /home/project 
chmod 2770 /home/project 
ll -d /home/project 
drwxrws--- 2 root users 4096 3月 23 14:02 /home/project/

設定可使用 Samba 的用戶帳號與密碼 
 1. 建立帳號  
     useradd -G users smb1 
     echo 1234 | passwd --stdin smb1 
 2. 新增使用者
     pdbedit -a -u smb1
     pdbedit -L                    #察看帳號資訊
     smbpasswd smb1         # 管理密碼參數用 pdbedit,修改密碼用 smbpasswd # 
     pdbedit -x -u smb1
     pdbedit -Lw
     pdbedit 指令 
       pdbedit -L [-vw] <==單純的 
       pdbedit -a|-r|-x -u 帳號 <==新增/修改/刪除帳號 
       pdbedit -a -m -u 機器帳號 <==與 PDC 有關的機器碼 
     選項與參數:
       -L :列出帳號與 UID 等資訊; 
        -v :需搭配 -L 執行,包括家目錄;
         -w :需搭配 -L 執行,使用舊版的 smbpasswd 格式; 
          -a :新增 Samba的帳號,帳號需要在 /etc/passwd 內存在; 
            -r :修改帳號資訊,需搭配很多特殊參數,請 man pdbedit; 
              -x :刪除 Samba 的帳號,用 -L 找到帳號後再刪除; 
                -m :後面接的是機器的代碼 (machine account),與 domain model 有關! 

啟動 Samba 並測試 
/etc/init.d/smb restart
smbclient -L //127.0.0.1 # Password: <==直接按下 [Enter] 即可。 
smbclient -L //127.0.0.1 -U smb1 

自我掛載測試看看
 mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1 # 缷載 umount /mnt
 tail /var/log/samba/127.0.0.1.log
 setenforce 0  #關閉 SELinux 1 開啟,cat  /var/log/messages 內容克服問題。 

安全性的議題與管理
基本的 Samba 規則主要有:
getsebool -a | grep samba 
samba_domain_controller --> off <==PDC 時可能會用到 
samba_enable_home_dirs --> off <==開放用戶使用家目錄 
samba_export_all_ro --> off <==允許唯讀檔案系統的功能 
samba_export_all_rw --> off <==允許讀寫檔案系統的功能 
samba_share_fusefs --> off 
samba_share_nfs --> off 
use_samba_home_dirs --> off <==類似使用者家目錄的開放! 
virt_use_samba --> off
分享使用者家目錄成為可讀寫
 setsebool -P samba_enable_home_dirs=1 
 getsebool -a | grep samba_enable_home 
 samba_enable_home_dirs --> on
分享特定目錄,如/home/project
 ll -Zd /home/project
 drwxrws--- root users root:object_r:user_home_dir_t /home/project/ 
 chcon -t samba_share_t /home/project 
 ll -Zd /home/project 
 drwxrws--- root users root:object_r:samba_share_t /home/project/
#分享目錄不只是 Samba ,還包括 FTP 或者是其他的服務時,那可能就得要使用 public_content_t 類型,
任何 SELinux 問題,依照 /var/log/messages 的資訊去修訂。

防火牆議題:利用 iptables 來管理 
以 192.168.100.0/24, 192.168.1.0/24 兩個網域開放 SAMBA 使用權時, 
應啟用的 port UDP: 137, 138 及 TCP: 139, 445; iptables.allow 應修入這幾項:
vim /usr/local/virus/iptables/iptables.allow  # 加入底下這幾行! iptables -A INPUT -i $EXTIF -p tcp -s 192.168.100.0/24 -m multiport \ --dport 139,445 -j ACCEPT iptables -A INPUT -i $EXTIF -p tcp -s 192.168.1.0/24 -m multiport \ --dport 139,445 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 -m multiport \ --dport 137,138 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s 192.168.1.0/24 -m multiport \ --dport 137,138 -j ACCEPT /usr/local/virus/iptables/iptables.rule # smbd 及 nmbd 不支援 TCP Wrappers ,只能透過 iptables 控制。

防火牆議題: 透過內建的 Samba 設定 (smb.conf)
 hosts allow 及 hosts deny 這兩個參數。 讓本機、192.168.100.254, 192.168.100.100, 192.168.1.0/24 
使用 SAMBA ,可以這樣寫:
 vim /etc/samba/smb.conf
[global]
        hosts allow = 127. 192.168.100.254 192.168.100.100 192.168.1.
 testparm
/etc/init.d/smb restart
在防火牆議題方面,只要使用 iptables 或 hosts allow 其中一項即可,以 hosts allow 為優先,
若針對區網開放, iptables 反而是比較好,因為不需要更動到 smb.conf 設定檔嘛!讓服務的設定變的比較單純些。
 檔案系統議題:利用 Quota 限制使用者磁碟使用
分配 smb1, smb2, smb3 在他們自己的家目錄下,各擁有 300MB/400MB (soft/hard) 的磁碟配額限量。 參考鳥哥的 Quota (1.2.2-3) 相關資料處理完成:
1./etc/fstab 加入 /home 掛載點的 usrquota,grpquota 等設定值;
2.重新掛載 /home ,讓 Quota 實際被支援;
3.以 quotacheck -avug 建立 Quota 的資料庫檔案;
4.啟動 Quota ;
然後透過 edquota -u smb1 處理。
 edquota -u smb1 
Disk quotas for user smb1 (uid 2004): 
   Filesystem                             blocks   soft        hard   inodes soft hard 
     /dev/mapper/server-server     56    300000 400000      7      0      0 
edquota -p smb1 smb2 
edquota -p smb1 smb3 
repquota -ua




待續中‥‥
       max log size = 50
       load printers = no
      #與密碼有關
       security = user
       passdb backend = tdbsam  #密碼檔 /etc/samba/passwd.tdb
      #分享設定
      [homes]
         comment = Home Directories
         browseable = no
         writable = yes
         create mode = 0664 <==建立檔案的權限為 664
         directory mode = 0775 <==建立目錄的權限為 775
      [project] <==共享資源範例
          comment = smbuser's project
          path = /home/project
          browseable = yes
          writable = yes 
          write list = @users
 <==寫入者 群組或直接用帳號      #改完 smb.conf 用 testparm檢查語法

  • 關於chmod 0664
  •  4:Set User ID (SUID) 或 Set Group ID (SGID)。表示该档案在执行时会以档案拥有人或群组的身份执行。
     2:如果该档案可以被执行(具 x 权限),则在执行时会以拥有者群组的身份执行。如果是不能被执行的档案,在读写时会控制不能让多个程序同时  存取(locked)。
     1,sticky。如果将档案设为所有人都可以读写,并设定 sticky,则所有人都可以修改该档案,但是不能删除。如果是目录开放读写权限,但设定 了 sticky,则使用者只能新增档案,不能删除,这个可以应用于 FTP 的上传区。
    假设我们要设定档案 myfile 可以被所有人读、写、执行,并设定 sticky:
    #
     chmod 1777 myfile
    chmod 2770 dir
    这样dir文件夹的权限就是drwxrws—
例題:分享 /home/project 目錄,權限設定。
因為要開放給 users 群組,而共享群組的權限通常是『 2770 』含有 SGID 的特殊旗標功能,故可設定如下:mkdir /home/projectchgrp users /home/project
chmod 2770 /home/project
ll -d /home/project
drwxrws--- 2 root users 4096 3月 23 14:02 /home/project/
設定可使用 Samba 的用戶帳號與密碼 
 1. 建立帳號
 
     useradd -G users smb1
     echo 1234 | passwd --stdin smb1 
 2. 新增使用者
     pdbedit -a -u smb1
     pdbedit -L                    #察看帳號資訊     smbpasswd smb1         # 管理密碼參數用 pdbedit,修改密碼用 smbpasswd #
     pdbedit -x -u smb1
     
pdbedit -Lw

     pdbedit 指令

       pdbedit -L [-vw] <==單純的
       pdbedit -a|-r|-x -u 帳號 <==新增/修改/刪除帳號
       pdbedit -a -m -u 機器帳號 <==與 PDC 有關的機器碼
     選項與參數:
       -L :列出帳號與 UID 等資訊;
        -v :需搭配 -L 執行,包括家目錄;
         -w :需搭配 -L 執行,使用舊版的 smbpasswd 格式;
          -a :新增 Samba的帳號,帳號需要在 /etc/passwd 內存在;
            -r :修改帳號資訊,需搭配很多特殊參數,請 man pdbedit;
              -x :刪除 Samba 的帳號,用 -L 找到帳號後再刪除; 
                -m :後面接的是機器的代碼 (machine account),與 domain model 有關!
 
啟動 Samba 並測試 
/etc/init.d/smb restartsmbclient -L //127.0.0.1 # Password: <==直接按下 [Enter] 即可。 
smbclient -L //127.0.0.1 -U smb1 
自我掛載測試看看
 mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1 # 缷載 umount /mnt
 tail /var/log/samba/127.0.0.1.log
 setenforce 0  #關閉 SELinux 1 開啟,cat  /var/log/messages 內容克服問題。 

安全性的議題與管理
基本的 Samba 規則主要有:
getsebool -a | grep samba 
samba_domain_controller --> off <==PDC 時可能會用到 
samba_enable_home_dirs --> off <==開放用戶使用家目錄 
samba_export_all_ro --> off <==允許唯讀檔案系統的功能 
samba_export_all_rw --> off <==允許讀寫檔案系統的功能 
samba_share_fusefs --> off 
samba_share_nfs --> off 
use_samba_home_dirs --> off <==類似使用者家目錄的開放! 
virt_use_samba --> off
分享使用者家目錄成為可讀寫
 setsebool -P samba_enable_home_dirs=1 
 getsebool -a | grep samba_enable_home 
 samba_enable_home_dirs --> on
分享特定目錄,如/home/project
 ll -Zd /home/project
 drwxrws--- root users root:object_r:user_home_dir_t /home/project/ 
 chcon -t samba_share_t /home/project 
 ll -Zd /home/project 
 drwxrws--- root users root:object_r:samba_share_t /home/project/
#分享目錄不只是 Samba ,還包括 FTP 或者是其他的服務時,那可能就得要使用 public_content_t 類型,
任何 SELinux 問題,依照 /var/log/messages 的資訊去修訂。

防火牆議題:利用 iptables 來管理 
以 192.168.100.0/24, 192.168.1.0/24 兩個網域開放 SAMBA 使用權時, 
應啟用的 port UDP: 137, 138 及 TCP: 139, 445; iptables.allow 應修入這幾項:
vim /usr/local/virus/iptables/iptables.allow  # 加入底下這幾行! iptables -A INPUT -i $EXTIF -p tcp -s 192.168.100.0/24 -m multiport \ --dport 139,445 -j ACCEPT iptables -A INPUT -i $EXTIF -p tcp -s 192.168.1.0/24 -m multiport \ --dport 139,445 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 -m multiport \ --dport 137,138 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s 192.168.1.0/24 -m multiport \ --dport 137,138 -j ACCEPT /usr/local/virus/iptables/iptables.rule # smbd 及 nmbd 不支援 TCP Wrappers ,只能透過 iptables 控制。

防火牆議題: 透過內建的 Samba 設定 (smb.conf)
 hosts allow 及 hosts deny 這兩個參數。 讓本機、192.168.100.254, 192.168.100.100, 192.168.1.0/24 
使用 SAMBA ,可以這樣寫:
 vim /etc/samba/smb.conf
[global]
        hosts allow = 127. 192.168.100.254 192.168.100.100 192.168.1.
 testparm
/etc/init.d/smb restart
在防火牆議題方面,只要使用 iptables 或 hosts allow 其中一項即可,以 hosts allow 為優先,
若針對區網開放, iptables 反而是比較好,因為不需要更動到 smb.conf 設定檔嘛!讓服務的設定變的比較單純些。
 檔案系統議題:利用 Quota 限制使用者磁碟使用
分配 smb1, smb2, smb3 在他們自己的家目錄下,各擁有 300MB/400MB (soft/hard) 的磁碟配額限量。 參考鳥哥的 Quota (1.2.2-3) 相關資料處理完成:
1./etc/fstab 加入 /home 掛載點的 usrquota,grpquota 等設定值;

2.重新掛載 /home ,讓 Quota 實際被支援;
3.以 quotacheck -avug 建立 Quota 的資料庫檔案;
4.啟動 Quota ;
然後透過 edquota -u smb1 處理。

 edquota -u smb1
Disk quotas for user smb1 (uid 2004):
   Filesystem                             blocks   soft        hard   inodes soft hard
     /dev/mapper/server-server     56    300000 400000      7      0      0
edquota -p smb1 smb2
edquota -p smb1 smb3
repquota -ua


待續中‥‥

沒有留言:

張貼留言