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