天天看點

Samba:打造企業級授權檔案共享伺服器

寫在前面的話

先來說說故事背景:公司内部檔案伺服器的解決方案其實很多,對于中小型網際網路公司,大多的在這一塊的選型還是 FTP,或者 VSFTP,但是個人實在是對那個東西喜歡不起來,于是就選擇了配置相對于簡單一些的 Samba,燃鵝,在使用過程中卻被各種需求搞得心力交瘁。于是便決定寫這麼個東西,一個能夠滿足大部分公司的需求的東西。

文章标題企業級,一是源于本身是企業使用,是以企業級沒毛病。二是會夾雜複雜的授權,是以還是沒毛病。

總之就是咱先把牛逼吹了,實不實作的了再說,

需求說明

假如存在一個 XXX 網際網路公司,它的簡單組織架構如下圖:

Samba:打造企業級授權檔案共享伺服器
現在它對于檔案伺服器的需求如下圖:
Samba:打造企業級授權檔案共享伺服器

說明:

1. 賬号分為三類:管理者 / 普通 / 隻讀,注意,我們建立使用者不能有下劃線,中橫線,否則 Windows 中有 BUG

2. 部門目錄權限如下:

Samba:打造企業級授權檔案共享伺服器

見權限:代表可以見到别人的目錄,但是不能打開。

讀權限:能夠進去目錄檢視檔案,但是不能修改。

寫自己:自己上傳的檔案可以修改删除。

寫别人:别人上傳的檔案都能修改删除。

3. 公共目錄權限:

Samba:打造企業級授權檔案共享伺服器

所有使用者對于公共檔案中所有檔案都可見且能夠讀取。

使用者能夠除了隻讀賬戶對自己部門的目錄都能夠寫檔案。

各個部門管理者賬戶能夠對自己部門所有檔案進行任何操作。

最後就是 zcadmin 使用者其實就是老闆,想幹啥幹啥,當然 zc 也有很高的權限,可以到處寫。

第一階段:基礎部門目錄權限配置設定

理了下目錄關系和使用者關系,我們可以先着手把使用者和目錄設計好:

注意,我這裡使用的是 CentOS 7.5,總的來說 CentOS 系列使用方法應該都差不多,差別可能就是啟動指令。

1. 安裝 Samba:

yum -y install samba samba-client samba-swat      

2. 建立目錄:

mkdir /company
cd /company/
mkdir 總裁辦檔案 研發部檔案 人事行政部檔案 财務部檔案 公共檔案
cd 公共檔案/
mkdir 财務部共享 研發部共享 人事行政部共享 總裁辦共享      

檢視目錄結構:

tree -N /company/      

結構如圖:

Samba:打造企業級授權檔案共享伺服器

3. 添加使用者

# 添加組
groupadd zcgroup
groupadd devgroup
groupadd hrgroup
groupadd fdgroup

# 添加使用者
useradd -g zcgroup -s /sbin/nologin zc
useradd -g zcgroup -s /sbin/nologin zcread
useradd -g zcgroup -s /sbin/nologin zcadmin

useradd -g devgroup -s /sbin/nologin dev
useradd -g devgroup -s /sbin/nologin devread
useradd -g devgroup -s /sbin/nologin devadmin

useradd -g hrgroup -s /sbin/nologin hr
useradd -g hrgroup -s /sbin/nologin hrread
useradd -g hrgroup -s /sbin/nologin hradmin

useradd -g fdgroup -s /sbin/nologin fd
useradd -g fdgroup -s /sbin/nologin fdread
useradd -g fdgroup -s /sbin/nologin fdadmin      

4. 修改目錄權限:

cd /company/

# 修改目錄權限
chmod -R 1775 總裁辦檔案 研發部檔案 人事行政部檔案 财務部檔案 公共檔案

# 修改所有者所屬組
chown -R devadmin.devgroup 研發部檔案
chown -R hradmin.hrgroup 人事行政部檔案
chown -R fdadmin.fdgroup 财務部檔案
chown -R zcadmin.zcgroup 總裁辦檔案      

5. 修改主配置檔案:/etc/samba/smb.conf

##############################################################################
# 全局配置
##############################################################################
[global]
        workgroup = WORKGROUP
        server string = Samba Server Version %v
        netbios name = Samba
        log file = /var/log/samba/samba_log.%m
        max log size = 50
        security = user
        passdb backend = tdbsam
        include = /etc/samba/user/%U.smb.conf      

注意:紅色部配置設定置說明我們每個使用者登入以後其實是單獨的配置檔案,配置檔案為 /etc/samba/user/使用者名.smb.conf

6. 添加使用者單獨配置檔案:

mkdir /etc/samba/user
cd /etc/samba/user      

我們這裡以研發部為例,普通使用者 dev 的配置檔案:dev.smb.conf

[研發部檔案]
    comment = dev config
    path = /company/研發部檔案/
    public = no
    admin users = devadmin
    valid users = @devgroup
    writable = yes
    create mask = 1777
    directory mask = 1777
    force create mode = 1777
    force directory mode = 1777      

管理者使用者 devadmin 的配置檔案:devread.smb.conf

[研發部檔案]
    comment = dev admin config
    path = /company/研發部檔案/
    public = no
    admin users = devadmin
    valid users = @devgroup
    writable = yes
    create mask = 1777
    directory mask = 1777
    force create mode = 1777
    force directory mode = 1777      

隻讀使用者 devread 的配置檔案:devadmin.smb.conf

[研發部檔案]
    comment = dev read config
    path = /company/研發部檔案/
    public = no
    admin users = devadmin
    valid users = @devgroup
    writable = no      

簡單做個說明:

a. 掩碼設為 1777,目的是讓所有有權使用者都可随意進出所屬部門下面全部目錄(最後一個 7 是為 zc 這種使用者準備的)。

b. 建立目錄的人具有該目錄以及該目錄下檔案的絕對控制權。這意味着假設 dev 使用者建立一個 dev 目錄,devadmin 去 dev 目錄下建立一個 test 檔案,由于 dev 使用者具有 dev 目錄的絕對控制權,所有他是能夠修改删除該檔案的。但是如果這個檔案不在 dev 下面 dev 使用者就至于檢視權限。

這種情形是不可避免的,在 Samba 中我們應該注重檔案夾的使用。最好是基礎檔案夾由 admin 賬戶建立。

c. 配置在 admin users 中的管理者賬戶擁有最高權限,該共享下任何檔案都能修改删除。

d. writable = no,直接隻讀,不需要再配置設定其它權限。

e. 最後說說為啥要即使同樣的配置也分為單獨的檔案,目的是為了分開管理,這樣我們想調整哪個使用者改哪個檔案即可。

最終配置如圖:

Samba:打造企業級授權檔案共享伺服器

7. 将系統使用者添加到 Samba 中:

smbpasswd -a dev
smbpasswd -a devadmin
smbpasswd -a devread

smbpasswd -a hr
smbpasswd -a hradmin
smbpasswd -a hrread

smbpasswd -a fd
smbpasswd -a fdadmin
smbpasswd -a fdread

smbpasswd -a zc
smbpasswd -a zcadmin
smbpasswd -a zcread      

檢視使用者:

pdbedit -L      

如果想删除某個使用者,則隻需:

pdbedit -x 使用者名      

8. 至此,我們完成了第一個階段,就是每個目錄擁有了三個角色,普通 / 管理者 / 隻讀。

第二階段:總裁辦使用者其它權限

我們根據權限表知道,總裁辦出來隻讀賬戶,其它賬戶是具備其他目錄的讀寫權限的。

這意味着,zcadmin 得具備其它目錄 admin 的權限,而 zc 使用者得具備其它目錄的普通權限。

1. 将使用者加入各個目錄的組:

usermod -a -G devgroup zc
usermod -a -G devgroup zcadmin
usermod -a -G hrgroup zc
usermod -a -G hrgroup zcadmin
usermod -a -G fdgroup zc
usermod -a -G fdgroup zcadmin      

2. 修改 zc.smb.conf 和 zcadmin.smb.conf

[總裁辦檔案]
    comment = zc config
    path = /company/總裁辦檔案/
    public = no
    admin users = zcadmin
    valid users = @zcgroup
    writable = yes
    create mask = 1777
    directory mask = 1777
    force create mode = 1777
    force directory mode = 1777

[研發部檔案]
    comment = zc config
    path = /company/研發部檔案/
    public = no
    admin users = devadmin,zcadmin
    valid users = @devgroup
    writable = yes
    create mask = 1777
    directory mask = 1777
    force create mode = 1777
    force directory mode = 1777

[人事行政部檔案]
    comment = hr config
    path = /company/人事行政部檔案/
    public = no
    admin users = hradmin,zcadmin
    valid users = @hrgroup
    writable = yes
    create mask = 1777
    directory mask = 1777
    force create mode = 1777
    force directory mode = 1777

[财務部檔案]
    comment = fd config
    path = /company/财務部檔案/
    public = no
    admin users = fdadmin,zcadmin
    valid users = @fdgroup
    writable = yes
    create mask = 1777
    directory mask = 1777
    force create mode = 1777
    force directory mode = 1777      

到這一步的時候我做了如下測試:

a. devadmin 使用者登入,在 研發部檔案 中建立 admin 目錄和 admin 檔案。

b. 切換到 dev 使用者,嘗試删除 admin 目錄和 admin 檔案,均提示權限不足,進入 admin 目錄建立 dev 檔案,在外層建立 dev 目錄和 dev 檔案。

c. 切換 zc 使用者, 嘗試删除 研發部檔案 中任意檔案,均提示無權限,去 admin 目錄建立 zc 檔案,在外層建立 zc 目錄和 zc 檔案。

d. 切換 devadmin 和 zcadmin 進去 研發部檔案 中删除任意檔案均可。

此時就實作了普通使用者隻能删除自己的檔案,管理者可以管理所有。

第三階段:公共檔案 

這其實是最麻煩的需求,其實通常對于這種目錄我們最好的出路方式就是除了管理者,各自能夠删除修改各自的就行。

但是總有例外,有時需求來了擋都擋不住,是以這裡給出最複雜的設計。

1. 修改目錄權限:

cd /company/公共檔案

chown -R devadmin.devgroup 研發部共享
chown -R hradmin.hrgroup 人事行政部共享
chown -R fdadmin.fdgroup 财務部共享
chown -R zcadmin.zcgroup 總裁辦共享      

值得注意的是,此時 公共檔案 這個目錄的使用者群組依然是 root,我們不會去修改它。

2. 修改主配置檔案,添加公共配置:smb.conf

##############################################################################
# 全局配置
##############################################################################
[global]
        workgroup = WORKGROUP
        server string = Samba Server Version %v
        netbios name = Samba
        log file = /var/log/samba/samba_log.%m
        max log size = 500
        security = user
        passdb backend = tdbsam
        include = /etc/samba/common.cmb.conf
        include = /etc/samba/user/%U.smb.conf      

在我們導入單個使用者配置之前,我先導入這個公共配置,該配置意味着所有使用者都具有。如果後面的使用者不要或者權限不對,我們都可以在單獨的使用者配置的檔案裡面複寫它。

值得注意的是,導入順序很重要,這意味着誰複寫誰。

3. 增加 common 配置:/etc/samba/common.cmb.conf

[公共檔案]
    comment = common config
    path = /company/公共檔案/
    public = no
    admin users = zcadmin
    valid users = @zcgroup,@devgroup,@hrgroup,@fdgroup
    writable = yes
    create mask = 1777
    directory mask = 1777
    force create mode = 1777
    force directory mode = 1777      

我們預設給寫權限,是以使用者都可以在自己部門的目錄下修改删除自己的檔案。

當然,zcadmin 這個是全部的管理者,是以我們這裡直接就給他指定了。

4. 隻讀使用者複寫權限,如:devread.smb.conf

[研發部檔案]
    comment = dev read config
    path = /company/研發部檔案/
    public = no
    admin users = devadmin
    valid users = @devgroup
    writable = no

[公共檔案]
    comment = common config
    path = /company/公共檔案/
    public = no
    valid users = @zcgroup,@devgroup,@hrgroup,@fdgroup
    writable = no      

直接複寫為隻讀權限!

5. 普通使用者的權限本身就和預設的權限一緻,是以我們不需要再度去修改。

6. 管理者使用者相比比較複雜,如果授權整個目錄就會導緻所有目錄都能管理。

是以我這裡給出的方法是除了共享檔案作為管理者賬戶的一個項目外,另外裡面對于的部門也作為單獨項目授權。

但是為了不顯示兩個這樣的目錄,我們将單獨授權的目錄隐藏。

當然這裡需要排除 zcadmin,因為前面已經指定了,他就是全部的管理者,我們修改另外三個管理者配置。

這裡以 devadmin 為例:devadmin.smb.conf

[研發部檔案]
    comment = dev admin config
    path = /company/研發部檔案/
    public = no
    admin users = devadmin
    valid users = @devgroup
    writable = yes
    create mask = 1777
    directory mask = 1777
    force create mode = 1777
    force directory mode = 1777

[公共檔案-研發部共享]
    comment = common config
    path = /company/公共檔案/研發部共享/
    public = no
    admin users = zcadmin,devadmin
    valid users = @zcgroup,@devgroup,@hrgroup,@fdgroup
    writable = yes
    create mask = 1777
    directory mask = 1777
    force create mode = 1777
    force directory mode = 1777
    browseable = no      

最終達到的效果:

a. 部門普通使用者打開公共檔案,能夠通路所有檔案夾。能夠在自己部門的目錄修改删除自己的檔案。

b. 部門管理者能夠在公共檔案自己的部門目錄下任意删改。對于其它部門目錄隻讀。

c. zc 使用者能夠在公共檔案下所有目錄增删改自己的檔案。

d. 隻讀賬戶在公共檔案下全局隻讀。

7. 至此,所有需求全部完成。

小結

這篇文章寫了我差不多兩天,其中各種測試,windows 測試還非常麻煩。但是總的來說能夠滿足大部分需求。

當然,Samba 目前來說有個很大的問題,我依然沒有找到一款能夠像連接配接 FTP 一樣的用戶端來連接配接 Samba,如果知道的朋友可以分享一下。

關于其它 Samba 的一些知識如果不知道可以去簡單了解一些,本文還是針對直接有需要的朋友。

最後,如果你覺得還可以,給個推薦也是可以的。

繼續閱讀