samba + OPENldap 搭建文件共用伺服器

来源:https://www.cnblogs.com/somata/archive/2019/09/30/sambaAndOPENldapBuildFileShareServer.html
-Advertisement-
Play Games

samba + OPENldap 搭建文件共用伺服器 這裡我使用的是 samba(文件共用服務) v4.9.1 + OPENldap(後端資料庫軟體) v2.4.44 + smbldap tools(後端資料庫管理軟體) v0.9.11 + CentOS7。 如果有不同,可能會有部分問題。 註: 1 ...


samba + OPENldap 搭建文件共用伺服器

這裡我使用的是 samba(文件共用服務) v4.9.1 + OPENldap(後端資料庫軟體) v2.4.44 + smbldap-tools(後端資料庫管理軟體) v0.9.11 + CentOS7。 如果有不同,可能會有部分問題。

註:

  1. samba 的功能不只有文件共用,還可以作為一臺Windows域成員,甚至Windows域控制器。千萬不要認為samba只是一個文件共用服務。
  2. 由於我們使用了samba的文件共用功能,與文件許可權有直接的聯繫,所以samba中的使用的用戶必須是Linux中能查詢到。因為使用了 OPENldap 作為samba 的後端資料庫,所以我們這裡還需要配置Linux能查詢到 OPENldap 中的用戶信息,也就是需要配置 NSS。關於NSS部分的配置需要在smbldap-tools 初始化ldap資料庫後完成NSS部分的配置,需要註意!!!
  3. samba 有使用PAM作為認證模塊,和使用其自帶的認證程式,在CentOS中編譯時配置的是使用其自帶的認證程式,所以PAM的配置可以省略。
  4. 如果想要配置OPENldap中的用戶可以登入系統,可以查閱這篇文章:《配置Linux使用LDAP用戶認證》,其中的配置與本文中的配置並不相同,需要註意!!!

初始化配置

yum 源和網路配置省略。

yum -y install samba openldap-servers openldap-clients smbldap-tools nss-pam-ldapd

配置OPENldap服務

這裡只進行簡單的服務配置,資料庫配置這裡會使用 smbldap-tools 進行配置,如果不知道OPENldap 可以去看看這篇文章:《OPENLDAP 服務搭建和後期管理

這裡將 OPENldap 所有配置清空,重新配置。

# 首先備份文件,以免無法複原
mkdir /root/back
tar -Jcvf /root/back/slapd.config-`date  '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/openldap/slapd.d/
tar -Jcvf /root/back/slapd.data-`date  '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /var/lib/ldap/
# 然後再刪除配置文件
rm -rf /etc/openldap/slapd.d/*
rm -rf /var/lib/ldap/*
# 複製一個samba的schema文件
cp /usr/share/doc/samba-4.9.1/LDAP/samba.ldif /etc/openldap/schema/

這裡的配置文件我是從/usr/share/openldap-servers/slapd.ldif 中複製過來,並修改成如下這個樣子的。主要修改了baseDN(suffix), OPENLDAPTLS,olcRootPW(密碼由 slappasswd 生成,本文中的密碼為: 123456) 和 include

# file: /tmp/slapd.ldif

dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid

dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema

include: file:///etc/openldap/schema/core.ldif
include: file:///etc/openldap/schema/cosine.ldif
include: file:///etc/openldap/schema/nis.ldif
include: file:///etc/openldap/schema/inetorgperson.ldif
include: file:///etc/openldap/schema/samba.ldif

dn: olcDatabase=frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: frontend

dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
olcAccess: to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage 
  by * none

dn: olcDatabase=monitor,cn=config
objectClass: olcDatabaseConfig
olcDatabase: monitor
olcAccess: to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read 
  by dn.base="cn=Manager,dc=black,dc=com" read 
  by * none

dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: hdb
olcSuffix: dc=black,dc=com
olcRootDN: cn=Manager,dc=black,dc=com
olcRootPW: {SSHA}l1vBI/HOMKLEiQZgcm3Co+hFQI68rH1Q
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub,uid

根據配置生成伺服器的配置文件

slapadd -F "/etc/openldap/slapd.d/" -b "cn=config" -l /tmp/slapd.ldif
# 這裡還需要註意文件屬主還是root的,需要改回為openldap
chown -R ldap:ldap /etc/openldap/slapd.d/*
# 然後再開啟服務即可
systemctl start slapd

_#################### 100.00% eta none elapsed none fast!
Closing DB...

註:這裡只配置了OPENldap中的服務配置部分,沒有配置OPENldap 的資料庫,這裡再次強調以下。

配置 samba

這裡只是為了測試使用samba 與 OPENldap 的使用,就不進行過於複雜的文件共用配置了,只共用一個用戶的家目錄僅供測試。

# file: /etc/samba/smb.conf

[global]
    workgroup = MYGROUP     # 指定共用組名稱。
    server string = Samba Server Version %v
    log file = /var/log/samba/log   # 日誌
    security = user     # 指定安全級別為User
    passdb backend = ldapsam:ldap://127.0.0.1   # 指定passdb 的後端資料庫使用ldapsam
    ldap suffix = dc=black,dc=com   # 指定ldap的 suffix
    ldap user suffix = ou=People    # 指定用戶的 suffix 段位 ou=People 這裡會與上一個suffix結合。
    ldap group suffix = ou=Group    # 上同,指定的是用戶組。
    ldap admin dn = cn=Manager,dc=black,dc=com  # 指定查詢ldap服務使用的管理員用戶
    ldap ssl = no   # 指定不使用SSL加密。
    load printers = no  # 指定不載入共用印表機。
[homes]
    comment = Home Directories
    browseable = no
    writable = yes
    create mask = 0600
    directory mask = 700
smbpasswd -w 123456 # 存儲用於連接 LDAP 服務的用戶密碼,!!!非常重要,否則無法啟動smb服務。

啟動samba服務

systemctl start nmb
systemctl start smb

smbldap-tools 配置

這裡使用 smbldap-tools 來快速完成 samba 服務所需要的數據信息,同時通過 smblda-tools 來進行用戶段管理。但是smbldap-tools 有一個缺點就是 不會管你本地用戶是否有相同的 UID 或則 GID,可能有衝突,需要註意。

smbldap 會從 /etc/samba/smb.conf 讀取部分信息,所以需要先配置好samba再配置 smbldap-tools 服務。

smbldap-config  # 配置 smbldap-tools 的配置,這裡使用smbldap-conifg 簡易配置。

​ 這裡省略下麵的配置過程,不知道的預設即可。

smbldap-populate    # 初始化配置 OPENldap 資料庫。

這裡再創建一個用戶用於後面的測試使用。

smbldap-useradd -a -m User1     # 添加用戶User2
# -a: 指定添加的用戶類型為Windows,這樣samba 才能識別到該用戶。
# -m: 指定創建該用戶的家目錄。
smbldap-passwd User1            # 修改該用戶的用戶密碼

這裡省略該用戶的密碼修改過程。

這樣 OPENldap 的資料庫初始化就完成了,這樣就能去查詢OPENldap 中的內容了。如下圖,這個就是smbldap-populate 所創建的內容了。下圖為 apache Directory Studio,有興趣可以去研究一下《apache Directory Studio 簡易使用

在圖中我們可以看到 UID = root 和 nobody 的用戶,我並不想讓這些特殊用戶登入到伺服器,所以在下麵的配置,我會通過 fliter 將這2個用戶過濾掉。

NSS 配置

這裡的NSS配置主要就是需要配置,NSS 將 LDAP 的請求轉發給 nslcd ,由 nslcd 來查詢 OPENldap 中的用戶信息。

首先配置 NSS ,只需添加 passwd 段和 group 段的ldap認證即可。

# file: /etc/nsswitch.conf

passwd:     files ldap
shadow:     files
group:      files ldap
hosts:      files dns myhostname
bootparams: nisplus [NOTFOUND=return] files
ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss
netgroup:   nisplus sss
publickey:  nisplus
automount:  files nisplus sss
aliases:    files nisplus

然後配置 nslcd, 註意 nslcd 是以daemon 形式運行的,主要配置後重啟。

# file:/etc/nslcd.conf

uid nslcd
gid ldap
uri ldap://127.0.0.1/   # ldap URL地址
base dc=black,dc=com    # base dn 路徑
binddn cn=Manager,dc=black,dc=com   # 指定連接的用戶
bindpw 123456           # 指定密碼
ssl no                  # 指定不要使用SSL 加密連接。
filter passwd (&(objectClass=posixAccount)(uidNumber>=1000))    # 編寫 passwd 的過濾規則。
filter group (&(objectClass=posixGroup)(gidNumber>=500))        # 上同,編寫的是 group
chmod 600 /etc/nslcd.conf   # 配置文件許可權,非常重要,否則無法啟動服務。
systemctl start nslcd       # 啟動 nslcd 服務。

我們這裡測試以下 NSS 的配置是否可用

getent passwd User1

User1:*:1001:513:System User:/var/smb/User1:/bin/bash

如上可見,我們配置的 NSS 和 OPENldap 服務 已經生效了,下麵我們再來繼續配置samba,使其可用。

samba 許可權配置

如果看的比較仔細的人,就會發現我將用戶的home 目錄位置存放在了/var/smb 位置,主要是為了不與系統中的用戶搞混。並且這樣可以通過SELinux來隔離samba 禁止訪問 /home 路徑下的資源,詳細請看下麵操作。

# 上面通過 smbldap-useradd 命令,已經創建了用戶的home 目錄,
# 下麵可以直接進行SELinux 的相關配置了。
semanage fcontext -a -t samba_share_t '/var/smb(/.*)?'  # 修改/var/smb 路徑的預設type,這裡我用 samba 共用使用的type,SELinux 預設允許訪問這個type類型
# 如果要使samba 可以訪問 /home 則應當開啟 samba_enable_home_dirs 這個 bool 值。
# 但是 我這裡因為使用的是 samba_share_t 這個 type 類型,所以無需開啟 任何 bool 值,這樣就能使samba只能訪問到 /var/smb 和 samba 其他所需文件。
restorecon -R /var/smb/ # 然後我們在重置 /var/smb 目錄下的SELinux type 類型即可。
# 這裡我們就能進行samba的測試了
smbclient -L //127.0.0.1/ -U User1

這裡我們也就可看到了,User1 用戶已經可以登入並查詢到共用目錄了。

那麼我們這裡直接登入進去,上傳一些文件做一些測試:


OK,那麼這樣一個samba 的文件共用就完成了。


本文經「原本」原創認證,作者乾坤盤,訪問yuanben.io查詢【2H0DBHHY】獲取授權信息。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux組的基本介紹 在Linux中的每個用戶必須屬於一個組,不能獨立於組外。在Linux中每個文件有所有者,所在組,其他組的概念。 1)所有者 2)所在組 3)其他組 4)改變用戶所在的組 文件/目錄所有者 一般為文件的創建者,誰創建了該文件,就自然地成為該文件的所有者。 查看文件的所有者 1) ...
  • 1. 前言 power supply class為編寫供電設備(power supply,後面簡稱PSY)的驅動提供了統一的框架,功能包括: 1)抽象PSY設備的共性,向用戶空間提供統一的API。 2)為底層PSY驅動的編寫,提供簡單、統一的方式。同時封裝並實現公共邏輯,驅動工程師只需把精力集中在和 ...
  • cd ~ vim .vimrc colorscheme desert ...
  • 在伺服器中添加定期執行的任務,在很多情況下是非常必要的。比如,每天清理一次/tmp目錄下的文件;沒幾分鐘檢查某一守護進程是否正常等等。這樣計劃任務就顯得尤為方便。 ...
  • Vim 文本編輯器 1、Vim 和 Vi: 兩者都是多模式編輯器; Vim 是 Vi 升級版,再相容 Vi 所有指令的同時增加了一些新功能支持; 特點: 語法加亮:使用不同的顏色加亮代碼; 多級撤銷:Vi 只能撤銷一次操作,Vim 可以無限次撤銷; 可視化操作:可以在終端模式運行,也可以在 Xwin ...
  • 按鍵實驗和前面的跑馬燈、蜂鳴器主要的區別就是這個是讀取外部的輸入信號,之前的實驗都是對外部輸出信號。 一、硬體設計 本實驗的硬體為三個按鍵、兩個lED(LED0、LED1)、一個蜂鳴器(BEEP)。 KEY0控制LED0和LED1開,KEY1控制LED0和LED1關,按鍵WK_UP控制BEEP。 二 ...
  • Redis系列---redis簡介01 本章我們將用簡短的幾句話來幫助你快速的瞭解什麼是redis,初學者不必深究 ...
  • 本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi Linux。 「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...