[samba]Ubuntu14.04でSamba4・RSATの導入の続きになります。

ここからは、ADのユーザ、グループが同じようにUNIXのアカウントとしてもサーバにログオンできるように、認証の統合を目指していきたいと思います。

!/bin/bash
FS=$'\n'
BASE_CN="CN=Users"
BASE_DN="DC=meisindm,DC=local"
DOMAIN=$(wbinfo --own-domain)
DOMAIN_LC=$(echo ${DOMAIN}|tr "[:upper:]" "[:lower:]")
SAM_LDB="/var/lib/samba/private/sam.ldb"
IDMAP_LDB="/var/lib/samba/private/idmap.ldb"

function usage() {
    echo -e "usage: s4-default-group  [ ]\n"
    exit 2
}

function fail() {
    echo -e "ERROR: Operation Failed."
    exit 1
}

#		引数のチェック
if [[ $# -gt 2 || $# -lt 1 ]]; then
	usage
fi

NAME=$1

#		GIDのチェック
if [ $# -eq 2 ]; then
	GIDNUM=$2
	#	数字であるかどうか
	expr "${GIDNUM}" + 1 >/dev/null 2>&1
	if [ $? -ge 2 ]; then
		echo -e "ERROR: invalid gidnumber.($GIDNUM)"
		fail
	fi
fi

#		NAMEのあるなし
if [ $(getent group|cut -d: -f1|grep -wxci "${NAME}") -ne 0 ]; then
	echo -e "ERROR: groupname \"${NAME}\" is already exists."
	fail
fi

#		グループの追加
samba-tool group add "${NAME}"
if [ $? -ne 0 ]; then
	echo -e "ERROR: samba-tool group add \"${NAME}\" failed."
	fail
fi

#		GIDを取得
_GID=$(wbinfo --group-info="${NAME}"|cut -d: -f3)
if [ $? -ne 0 ]; then
	echo -e "ERROR: getting gidnumber is failed."
	fail
fi

GIDNUM=${GIDNUM:=${_GID}}
echo -e "gidNumber: ${_GID} to ${GIDNUM}"

#		SIDを取得
_SID=$(wbinfo -n "${NAME}"|cut -d' ' -f1)
if [ $? -ne 0 ]; then
    echo -e "ERROR: getting SID is failed."
    fail
fi
echo -e "SID = ${_SID}"

#		ldifファイルの作成
LDIF=$(echo "/tmp/${NAME}.ldif" | tr "[:space:]" "_")
cat << _EOS_ > ${LDIF}
dn:CN=${NAME},${BASE_CN},${BASE_DN}
changetype: modify
add: gidNumber
gidNumber: ${GIDNUM}
-
add: msSFU30NisDomain
msSFU30NisDomain: ${DOMAIN_LC}
-
add: msSFU30Name
msSFU30Name: ${NAME}
-
add: objectclass
objectclass: posixGroup
_EOS_

sleep 2

#       sam.ldbの更新
ldbmodify --url=${SAM_LDB} -b ${BASE_DN} ${LDIF}
if [ $? -ne 0 ]; then
    echo -e "ERROR: ldbmodify failed"
    fail
fi

rm ${LDIF}

#       ldifファイルの作成
LDIF=$(echo "/tmp/${NAME}_idmap.ldif" | tr "[:space:]" "_")
cat << _EOS_ > ${LDIF}
dn:CN=${_SID}
changetype: modify
replace: xidNumber
xidNumber: ${GIDNUM}
_EOS_

sleep 2

#       idmap.ldb の更新
ldbmodify --url=${IDMAP_LDB} ${LDIF}
if [ $? -ne 0 ]; then
    echo -e "ERROR: ldbmodify failed"
    fail
fi

sleep 2

rm ${LDIF}

#		結果を表示
echo
echo -e "\n>> results.."
ldbsearch --url=${SAM_LDB} samaccountname=${NAME}
ldbsearch --url=${IDMAP_LDB} objectsid=${_SID}
echo -e "Operations are all finished."

Samba4 アカウント情報を読み解いてみる(Group編)

シンプルにsamba-toolを使ってグループを登録してみます。

$ sudo samba-tool group add Test\  Group

これは、ユーザもグループも共通なのですが、Samba上でユーザ、グループの情報を登録すると、メインのデータベースであるsam.ldbとあともう一つ、Windowsでの識別情報(SID)とSambaを実装しているOSのUIDやGIDとのマッピング情報を持つ、idmap.ldbの2つのデータベースが更新されます。

wbinfoコマンドでグループ情報を見てみると、

$ wbinfo --group-info='Test Group'
MYDOMAIN\Test Group:*:3000062:

3000062というGIDがふられているのがわかります。
そこで、sam.ldbの中はどんな感じになっているのかというと、

$ sudo ldbedit -e vi -H /var/lib/samba/private/sam.ldb samaccountname='Test Group'
# editing 1 records
# record 1
dn: CN=Test Group,CN=Users,DC=mydomain,DC=local
objectClass: top
objectClass: group
cn: Test Group
[...]
objectSid: S-1-5-21-XXXXXXXXX-XXXXXXXX-XXXXXXXXX-1147
sAMAccountName: Test Group
[...]

ここでは、UNIXのGIDに該当する3000062という数字は存在しません。
そこで、このTest Group のSID(ここでは、objectSid に当たります)をキーにしてidmap の情報をみてみます。

$ sudo ldbedit -e vi -H /var/lib/samba/private/idmap.ldb  objectSid=S-1-5-21-498853264-34114203-425997414-1147
# editing 1 records
# record 1
dn: CN=S-1-5-21-XXXXXXXXX-XXXXXXXX-XXXXXXXXX-1147
cn: S-1-5-21-XXXXXXXXX-XXXXXXXX-XXXXXXXXX-1147
objectClass: sidMap
objectSid: S-1-5-21-XXXXXXXXX-XXXXXXXX-XXXXXXXXX-1147
type: ID_TYPE_BOTH
xidNumber: 3000062
distinguishedName: CN=S-1-5-21-XXXXXXXXX-XXXXXXXX-XXXXXXXXX-1147

このように、ADが管理しているSIDとそれに対応するGIDがidmap.ldbに設定されているのがわかります。
しかし、この状態でRSATの[ActiveDirectory ユーザとコンピュータ](ADUC)で該当するグループのプロパティを開いて、UNIX属性タブを開いても先ほど設定したGIDはでてきません(空白になっています)。
じつは、samba-tool でグループを登録するだけでは、UNIXアカウントと紐付けてはもらえないのです。
そこで、ADUCでUNIX


 

 
カテゴリー: LinuxSamba4

zaturendo

中小企業社内SE。

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です