RHEL5 - Samba

来源:百度文库 编辑:神马文学网 时间:2024/04/28 19:30:37

RHEL5 - Samba

四月 8, 2009 作者: sunchiahome

RHEL5 - Samba(一) 什麼是 Samba
前言:
Windows 的系統透過 SMB (Session Message Block protocol, 也叫做 NetBIOS 或LanManager protocol.) ,來進行檔案分享的傳輸協定,而 samba 是在 Linux 系統下使用 SMB(NetBIOS) 協定來進行檔案分享的傳輸方式.也因此藉由 samba 來讓 Windows 與 Linux系統的檔案能夠使用同一種方式來進行分享. Windows 與 Linux 之間 SMB /NMB 協定關聯如下圖所:

那什麼是 SMB(NetBIOS)呢!!下面可以看到這個協定的演化過程.
 
NetBIOS
最早由 IBM 開發出來的 NetBIOS API(Network Basic Input/Output System ApplicationProgram Interface),這個 NetBIOS 由 18 個 API 組成,可以用來命令當時的電腦建立連線服務. 因為NetBIOS 使用廣播(broadcasts)來傳送資料.也因此資料無法繞送(routed).所以只能用在小型網路中傳輸.NetBIOS屬於 session layer protocol(第5層,交談層)

NetBEUI

接下來就有了NetBIOS的改良版,NetBEUI(NetBIOS Extened User Interface),不過他已經是一個完整的傳輸協定了.NetBEUI 屬於 data-link layer protocol (第2層,資料連結層).

SMB(NetBIOS)
Windows NT4.0 之前的網路芳鄰(檔案和印表機分享),名稱解析(wins)...皆是使用 NetBIOS overNetBEUI所實而做成.後來的 NetBIOS 也可以 over TCP/IP 如 Windows 2000的網路芳鄰(檔案和印表機分享), Linux 的 samba server or NETBIOS over IPX(InternetworkPacket Exchange) 如 NT 下的 NWLINK

note:
1.使用廣播的方式傳遞資料,在遇到 Roter 時, Router 是會直接將此封包丟棄.原因是不能讓這種封包傳送到 InterNet 上,而產生無限封包.
2.NetBEUI 屬於 data-link layer protocol (第2層,資料連結層)

Samba 的官方網站為 http://www.samba.org

RHEL5 - Samba (二) 認識 samba 設定檔
首先檢查 samba 是否安裝,一般在光碟 /Server 目錄都可以找到 samba 的 rpm 檔案或是可以透過 yum 去下載.

[root@benjr ~]# rpm -aq | grep samba
samba
samba-common
samba-client
system-config-samba

安裝 samba 在 RedHat 光碟片中的目錄 /Server 可以找到所需的程式

[root@benjr ~]# rpm -ivh samba-common.rpm
[root@benjr ~]# rpm -ivh samba-client.rpm
[root@benjr ~]# rpm -ivh samba.rpm
[root@benjr ~]#
rpm -ivh system-config-samba

檢查 samba 服務是否在開機時一並啟動

[root@benjr ~]# chkconfig smb on
[root@benjr ~]#
chkconfig --list smb
smb      0:off 1:on 2:on 3:on 4:on 5:on 6:off

立即啟動 samba 服務

[root@benjr ~]# service smb start
Starting SMB services:                   [ OK ]
Starting NMB services:                   [ OK ]

RHEL 5 提供了 #system-config-samba 工具可以讓我們很方便針對 samba 做設定,不過這一隻工具主要都還是去修改 samba 的設定檔 /etc/samba/smb.conf ,所以我們先來看看 samba 的設定檔.

[root@benjr ~]# cat /etc/samba/smb.conf
#======================= Global Settings =====================================
[global]
    workgroup = mygroup
    server string = Samba Server Version %v

    netbios name = benjr
    security = user
    passdb backend = tdbsam
#======================= Share Definitions====================================
[homes]
    comment = Home Directories
    browseable = no
    writeable = yes
;    valid users = %S
;    valid users = MYDOMAIN\%S

[printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
;    guest ok = no
;    writeable = no
    printable = yes

設定檔主要可以分成兩個區塊
1.[global] 中主要設定整個 samba 系統的組態
其中的 [global] 的 security 決定身份驗證要由誰處理,samba 3.X 提供了五種安全等級可設定
2.[share] 中都是要分享的檔案目錄以及印表機

/etc/samba/ 目錄
相關的檔案

[root@benjr ~]# ll /etc/samba/
total 52
-rw-r--r-- 1 root root    20 Apr  3  2008 lmhosts
-rw------- 1 root root  4096 Apr 12 06:59 passdb.tdb
-rw------- 1 root root  8192 Apr 12 06:59 secrets.tdb
-rw-r--r-- 1 root root 10043 Apr 14 03:37 smb.conf
-rw-r--r-- 1 root root    97 Apr  3  2008 smbusers

1."/etc/samba/lmhosts" 存放 NetBIOS name 與 IP 相對應關係
2."/etc/samba/passdb.tdb" 存放使用者登入 samba server 時所需的使用者帳號以及密碼
3."/etc/samba/secrets.tdb" 存放 samba 的密碼檔
4."/etc/samba/smb.conf" samba 的設定檔
5."/etc/samba/smbusers" UNIX name 與 samb name 相對應關係

最早的 samba 的使用者帳號密碼是存成成文字檔 /etc/samba/smbpassword ,對於較少使用者的 samba server 並不會有太大的問題,但是當使用者眾多時就會有以下的問題產生:
1.查詢是循序進行,所以效能將會是瓶頸.
2.每一台 samba server 必須自己維護 smbpasswd 檔,當有多台 samba server 帳號的同步就是問題了.
3.smbpasswd 檔的格式限制了每個使用者可以維護的屬性.
4.除了可以增加效能外還可以同步多台的 samba server 帳號密碼,

也因此在 RHEL5 帳號密碼皆是以資料庫的形式做儲存,這樣會較符合企業用戶的需求.除了預設的 tdbsam(.tdb) 的資料庫外 Samba 提供下面多種方式,甚至於跟 LDAP 目錄服務結合.

1.Plain Text: :
2.smbpasswd : Encrypted Password Database
3.tdbsam:
4.ldapsam
:
5.MySQL:
6.XML:

RHEL5 - Samba (三) samba 相關的指令
RHEL 5 除了提供了 #system-config-samba 工具外 samba 還提供了很多工具來幫助我們除錯相關的指令如下:
nmblookup : 查詢 NetBIOS 所對應的 IP addresses

[root@benjr ~]# nmblookup benjr
querying benjr on 192.8.1.255
192.8.1.85 benjr<00>

smbstatus : 查詢 samba server 分享資源被使用的情況

[root@benjr ~]# smbstatus

Samba version 3.0.28-0.el5.8
PID     Username      Group         Machine                      
-------------------------------------------------------------------

Service      pid     machine       Connected at
-------------------------------------------------------
share        4600   192.8.1.242   Tue Apr 14 03:47:18 2009

Locked files:
Pid          Uid        DenyMode   Access      R/W        Oplock           SharePath   Name   Time
--------------------------------------------------------------------------------------------------
4600         99         DENY_NONE  0x100001    RDONLY     NONE             /share   .   Tue Apr 14 03:47:18 2009

testparm  : 如果你是習慣使用文字編輯器去修改 /etc/samba/smb.conf 檔案時,Samba 提供了一之程式 testparm 來驗證檢查 /etc/samba/smb.conf 設定檔是否正確,有無拼錯字等問題.

[root@benjr ~]# testparm /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Loaded services file OK.
Press enter to see a dump of your service definitions
.....................略............................

進階使用還可以指定其他 samba server 的設定檔

[root@benjr ~]# testparm /etc/samba/smb.conf 192.13.9.9

smbclient : 查詢 samba server 提供哪些分享目錄

[root@benjr ~]# smbclient -L benjr
Password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.28-0.el5.8]

        Sharename       Type      Comment
        ---------       ----      -------
        share           Disk    
        IPC$            IPC       IPC Service (Samba Server Version 3.0.28-0.el5.8)
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.28-0.el5.8]

        Server               Comment
        ---------            -------
        BENJR                Samba Server Version 3.0.28-0.el5.8

        Workgroup            Master
        ---------            -------
        MYGROUP            

"mount or smbmount" :mount smaba 所提供的 share 目錄

[root@unsvr root]# mount -t smbfs  //benjr/share  /mnt
Password:
[root@unsvr root]# smbmount  //benjr/share  /mnountpoint
Password:

RHEL5 - Samba (四) 防火牆(iptables)

當作 samba Server一定需要24小時不斷電的開機,即使是使用在公司內部網路上也是有可能遭受到攻擊,所以有必要設定防火牆,除了有需要的 port開啟外,其餘就不需要開啟.因為 iptables(firewall) 和 SElinux 都會影響到 Samba分享目錄的結果.如果是要先測試使用結果建議先關閉 iptables(firewall) 和 SElinux.在Linux下常用的就是iptables.而在 RHEL5 設定 iptables 也是很簡單.方法如下:

[root@benjr ~]#system-config-securitylevel

 

信任服務: 就是只有哪些服務可以透過防火牆(iptables)下的情況還繼續工作.
只要開啟我們想要開放的 port 即可,基本上要開的 port 也只有 SMB /NMB 而已其他你可以依據需求來開啟.預設是沒有選項可以勾選你可以透過其他連接阜做設定.要開啟的也只有 NetBIOS (UDP ports 137 and 138, TCP ports 139) 和 TCP port 445 for SMB file sharing without NetBIOS.

如果你是透過遠端的 SSH 這邊還有一個可以在 Text mode 下執行的.

[root@benjr ~]#system-config-securitylevel-tui

因為設定方式差不多,所以這裡就不多加以說明了.而設定檔會存放在 /etc/sysconfig/iptables

[root@benjr ~]# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

說明:
下面是有關於 samba 的要開啟的 port.
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
如果要開機時就啟動 iptables ,使用下面這個指令,就會在每次開機時啟動 iptables .

[root@benjr ~]#chkconfig iptables on

當然我不希望現在再重開機所以直接用下面的指令將 iptables 打開.

[root@benjr ~]#service iptables start
Starting httpd [OK]

將目前的 iptables 設定儲存下來

[root@benjr ~]#/sbin/service iptables save
#會將設定檔儲存在 /etc/sysconfig/iptables

RHEL5 - Samba (五) 身分驗證的種類
目前 RHEL5 使用的 samba 版本為 3.X,而 samba 3.X 提供了五種不同的身分驗證模式

那我們就來看看這五種不同模式的 samba server 要怎麼樣來與現有的 Windows 網域結合
1.Share Level Security : 不使用密碼做身份驗證
security = share
2.User Level Security : 本身這台 samba server 做身份驗證,這也是設定檔的預設值
security = user
3.Server Security :  交由其他台 Windows NT/2000/2003 或 samba server 做身份驗證
encrypt passwords = Yes
security = server
password server = "NetBIOS_name_of_a_DC"
4.Domain Security Mode : 身份驗證交由 Windows AD (Domain 為 mixed mode)或者由 Windows NT 4 處理
workgroup = "name_of_NT_domain"
security = domain
5.ADS Security Mode : 身份驗證交由 Windows AD 處理(Domain 為 native mode)
realm = your.kerberos.REALM
security = ADS
ads server = your.kerberos.server

RHEL5 - Samba (六) Share 的身分驗證
第一種是 Share Level Security : 不使用密碼做身份驗證,任何使用者在存取目錄時並不會詢問密碼.先在 X-windows 下執行 #system-config-samba 選擇 "Authentication Mode" 為 Share.

透過 #system-config-samba 去設定驗證模式,主要都還是去修改 samba 的設定檔 /etc/samba/smb.conf ,我們先來看看使用 share 身份驗證時 samba 的設定檔是如何設定的.

[root@benjr ~]# vi /etc/samba/smb.conf
[global]
   workgroup = MYGROUP
   netbios name = benjr
   security = share

1.主要不使用密碼做身份驗證 security = share
2.netbios name 是自己加上的,也就是 Windows 的電腦名稱,如果沒有設定 netbios name 時 samba 預設是使用 hostname 為電腦名稱.

不過要注意的是 samb 只管網路連結過來的使用者是否有權限,當然使用者還是要有 Linux 檔案的權限才可以.這概念跟 Windows 網路芳鄰一樣.

首先選擇你要想分享的目錄這裡我開啟一個 /share 分享目錄,請自行建立(#mkdir /share).建立好目錄還要開檔案的權限(#chmod -R 777 /share),雖然使用者不需要輸入密碼,但是再做存取檔案時還是會受限於 Linux 的檔案權限的影響.在回到 #system-config-samba

新增 Add Share 剛剛建立好的目錄,目前 samba 並沒有任何的使用者存在所以在 Access 也只能選擇 "Allowaccess to everyone".在 Basic 中分享名稱 Share name可以依你的需要做修改,預設是使用目錄名稱.不使用密碼做身份驗證,並不代表有寫入的權限這裡可依據是否勾選 "writable"來決定使用者(Guest User) 可以寫入的權限.我們先來看看剛剛那些動作 samba 的設定檔 /etc/samba/smb.conf做了哪些設定.

[root@benjr ~]# vi /etc/samba/smb.conf
============================ Share Definitions ==============================
[tmp]
   comment = Temporary file space
   path = /tmp
   read only = no
   public = yes
[share]
   path = share
   public = yes
   writable = yes

[share] 就是分享的名稱 , path = /share 就是實際在 Linux 的目錄,writable 來決定使用者可以寫入的權限.
Linux client 端需要使用的程式
I.smbclient 查詢 samba server 提供哪些分享目錄

[root@benjr ~]# smbclient -L benjr
Password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.28-0.el5.8]

        Sharename       Type      Comment
        ---------       ----      -------
        share           Disk     
        IPC$            IPC       IPC Service (Samba Server Version 3.0.28-0.el5.8)
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.28-0.el5.8]

        Server               Comment
        ---------            -------
        BENJR                Samba Server Version 3.0.28-0.el5.8

        Workgroup            Master
        ---------            -------
        MYGROUP             

上面的 passwd 可以不用輸入,直接打 enter 鍵即可跳過
II."mount or smbmount" mount smaba 所提供的 share 目錄

[root@unsvr root]# mount -t smbfs  //benjr/share  /mnt
Password:
[root@unsvr root]# smbmount  //benjr/share  /mnountpoint
Password:

上面的 passwd 可以不用輸入,直接打 enter 鍵即可跳過,這樣就可以直接使用smaba 所提供的目錄.

Windows client 端需要使用的程式
可以用網路的芳鄰來尋找,或者在 開始/執行 中鍵入 IP 或者電腦名稱(netbios name),就可以看到 samba server 所分享的目錄,此時就可以來存取由 samba server 所提供的檔案了.

RHEL5 - Samba (七) 新增 samba User
當 samba server security 選 user 安全等級時是用本身這台 samba server做身份驗證.因為需要身分所以第一步就是要先新增使用者.不像之前的版本是將資料儲存在 /etc/samba/smbpasswd,RHEL5將預設的使用者資料庫放在 passdb.tdb .

[root@benjr ~]# cat /etc/samba/smb.conf
# ----------------------- Standalone Server Options ------------------------
#
# Security can be set to user, share(deprecated) or server(deprecated)
#
# Backend to store user information in. New installations should
# use either tdbsam or ldapsam. smbpasswd is available for backwards
# compatibility. tdbsam requires no further configuration.

        security = user
        passdb backend = tdbsam

不過當我們在建立使用者帳號密碼時這個使用者必須儲存在 Linux 本機上,這跟當地硬碟權限有關.新增兩位使用者 "Bob" 和 "John"

[root@benjr ~]# adduser bob
[root@benjr ~]# adduser john
[root@benjr ~]#
passwd bob
Changing password for user bob.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@benjr ~]# passwd john
Changing password for user john.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

此時你可以透過 system-config-samba 新增使用者,在開啟 #system-config-samba 後,選擇 Preferences / Samba Users 增加使用者 "Add User"

因為我們只能選擇已經存在的 Linux User 所以在 Unix Username:選擇剛剛新增的 bob 和 john.Windows Username 就設的跟 Unix Username 一樣即可.

或是透過 #pdbedit -au 來新增使用者.

[root@benjr ~]# pdbedit -au bob
new password:
retype new password:
Unix username:        bob
NT username:         
Account Flags:        [U          ]
User SID:             S-1-5-21-1634407166-380897321-584037179-1001
Primary Group SID:    S-1-5-21-1634407166-380897321-584037179-513
Full Name:           
Home Directory:       \\benjr\bob
HomeDir Drive:       
Logon Script:        
Profile Path:         \\benjr\bob\profile
Domain:               BENJR
Account desc:        
Workstations:        
Munged dial:         
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    Fri, 17 Apr 2009 03:38:39 CST
Password can change:  Fri, 17 Apr 2009 03:38:39 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@benjr ~]# pdbedit -au john
new password:
retype new password:
Unix username:        john
NT username:         
Account Flags:        [U          ]
User SID:             S-1-5-21-1634407166-380897321-584037179-1002
Primary Group SID:    S-1-5-21-1634407166-380897321-584037179-513
Full Name:           
Home Directory:       \\benjr\john
HomeDir Drive:       
Logon Script:        
Profile Path:         \\benjr\john\profile
Domain:               BENJR
Account desc:        
Workstations:        
Munged dial:         
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    Fri, 17 Apr 2009 03:38:51 CST
Password can change:  Fri, 17 Apr 2009 03:38:51 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

#pdbedit 透過參數 -L 可以查詢所有儲存在 samba 的使用者.

[root@benjr ~]# pdbedit -L
john:501:
bob:500:

note:
不是我愛嫌棄 RedHat 很多圖形介面的東西要做也不做好,像是我在使用 system-config-samba新增使用者的時候,挖勒!!新增好就看不到了.再新增一次又被告知使用者已經存在(An account for this user alreadyexists.  Please try again).

恩!!!!這是怎麼一回事!!不過透過指令方式 #pdbedit -L 使用者真的已經加入,上網查了一下,果然是system-config-samba 固定使用 /etc/samba/smbpasswd 當作他的使用者資料庫,但是我記得 RHEL5不是已經將預設的使用者資料庫放在 passdb.tdb ,而且這一錯到 RHEL5.2 以前都沒修正,一直到 RHEL5.3 才修正.不過使用RHEL5.2 之前版本也不用急著更新找到 system-config-samba-1.2.40 的版本就修正了,更新就可以使用了.

https://bugzilla.redhat.com/show_bug.cgi?id=236557

RHEL5 - Samba (八) 檔案權限
雖然剛剛有大概談了一下使用者需要哪一些權限才能讀取到,這邊在詳細說明 Linux 的檔案權限.

1.當 Bob 想對 Samba Server 提出讀取分享資料夾時,第一步就是需要透過身分驗證.除了 Share LevelSecurity  不使用密碼做身份驗證其他都需要身分驗證,所以 Bob 必須為 Samba Server所認識的使用者(有些身分驗證是透過其他 Windows 或 LDAP 來驗證,驗證機制一樣).

2.當 Bob 為系統上可驗證的使用者時,接下來 Samba Server 會根據這個使用者可以讀寫分享哪些目錄.

3.雖然 Samba 讓 Bob 可以讀寫分享特定目錄時,但是在 Linux 上還有一個叫做權限的問題我們現在就來看看 Linux 權限是如何設定的.

Linux 系統下的檔案有所謂的權限設定,系統會依據這些權限的設定來決定使用者是否能讀取,寫入或執行指令 .
#ls -l (ls "list directory contents",-l "use a long listing format")就可以看到檔案權限目前是如何設定的.

這邊和檔案權限有關的是[檔案屬性][擁有者][所有者群組]
以上 -rw-r--r-- [檔案屬性]的每一個位置都有他所代表的意思,每三個為一組,每一組皆為 rwx ,因為每一組皆代表不同人所有擁有的權限.

第一組 User 代表的權限是針對自己所擁有的權限,也又是剛剛看到的[擁有者].
第二組 Group代表同一群組的使用者所擁有的權限,也又是剛剛看到的[所有者群組].
第三組 Other 代表[其他的使用者]所擁有的權限.
 
而權限可以區分為 rwx ,而當我們在看 rwx 時檔案和目錄是具有不同的意義
I. 對檔案而言:
可讀(r):可以cat檔案內容
可寫(w):可以cp,move檔案的內容
可執行(x):可以執行檔案
II. 對目錄而言:
可讀(r):對目錄而言單獨有此權限是沒有用的,還要同時有x的權限.才能有 ls 讀取目錄的內容.
可寫(w): 對目錄而言單獨有此權限是沒有用的,還要同時有x的權限.才能有cp,move,touch目錄內的檔案.
note: 當目錄擁有 w 的權限而目錄下的檔案並沒有設定 w 的權限,此時檔案還是可以編輯及刪除.
可執行(x): 具有 cd (change directory)進入目錄的權限
 
note:當檔案的User,group為同一人時,權限是看 User 的.

目錄的預設權限:

[root@benjr ~]# mkdir /share
[root@benjr ~]#
ll -d /share
drwxr-xr-x 2 root root 4096 Apr 20 08:31 /share

不管是誰建立目錄的基本上所有的人都有 rx 可進入目錄的權限.但是你要讓 Bob 也要寫入 /share 目錄時必須具備.
1.other 必須開啟 w (寫) 的權限.
2.將 /share 的 user 改為 Bob.
3.建立群組(Group),並讓目錄使用者群組修改.並加上  w (寫) 的權限.

如果是在測試環境時就不需要考慮太多一率將權限改為 777.