[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
0件のコメント