Hatena::Grouptech

id:rx7(@namikawa)の技術メモ このページをアンテナに追加 RSSフィード

過去記事一覧 | Main Blog (元RX-7乗りの適当な日々) | SBM (id:rx7のBookmark)

2012/02/20

/etc/sudoersに記述が無い設定が効いている・・・

| /etc/sudoersに記述が無い設定が効いている・・・ - id:rx7(@namikawa)の技術メモ を含むブックマーク はてなブックマーク - /etc/sudoersに記述が無い設定が効いている・・・ - id:rx7(@namikawa)の技術メモ /etc/sudoersに記述が無い設定が効いている・・・ - id:rx7(@namikawa)の技術メモ のブックマークコメント

と思ったら、LDAPの方で設定されていた。

/etc/ldap.conf には、以下の文字列が。

sudoers_base ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp

そこで、ldapsearchで確認してみると、以下のとおり。

$ ldapsearch -h xxx.xxx.xxx.xxx -x -b 'ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp'
# extended LDIF
#
# LDAPv3
# base <ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# SUDOers, xxx, xxx.xxx.jp
dn: ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp
objectClass: organizationalUnit
objectClass: top
ou: SUDOers

# defaults, SUDOers, xxx, xxx.xxx.jp
dn: cn=defaults,ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp
cn: defaults
description: Default sudoOption's go here
objectClass: top
objectClass: sudoRole
sudoOption: env_reset

# admin_name, SUDOers, xxx, xxx.xxx.jp
dn: cn=admin_name,ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp
cn: admin_name
objectClass: top
objectClass: sudoRole
sudoHost: ALL
sudoRunAsUser: ALL
sudoOption: !authenticate
sudoUser: admin_name
sudoCommand: ALL

・・・・・以下省略・・・・・

なるほど。


参考

sudoUser

 次のうちのいづれか。ユーザ名、uid ('#' が頭に付く)、 Unix グループ名 ('%' が頭に付く)、

 ユーザのネットグループ名 ('+' が頭に付く)。


sudoHost

 次のうちのいづれか。ホスト名、IP アドレス、ネットワークアドレス、ホストのネットグループ名 ('+' が頭に付く)。

 ALLという特別な値はいかなるホストにもマッチする。


sudoCommand

 Unix のコマンド。コマンドライン引数を付けてもよく、glob 文字 (ワイルドカードとも言う) を含んでいてもよい。

 ALLという特別な値は、いかなるコマンドにもマッチする。コマンドに感嘆符 '!' を接頭辞として付けると、

 ユーザにそのコマンドの実行を禁じることになる。


sudoOption

 働きは、前述のグローバルオプションと同じだが、それが属している sudoRoleエントリに対してのみ効果がある。


sudoRunAsUser

 変身対象となるユーザ名か、uid ('#' が頭に付く)。あるいは、変身対象ユーザをリストに含む Unix のグループ名か

 ('%' が頭に付く)、ユーザのネットグループ名 ('+' が頭に付く)。特別な値 ALLは、いかなるユーザにもマッチする。


sudoRunAsGroup

 変身対象となる Unix グループ名 か gid ('#' が頭に付く)。特別な値 ALLはいかなるグループにもマッチする。

Man page of SUDOERS.LDAP

LDAP を使って sudo の設定を参照するときの詳細

LDAP を使って sudo の設定を参照するとき、LDAP の問い合わせは sudo の実行ごとにたった二回か三回行われるだけである。一回目の問い合わせは、グローバル・オプションを解析するために行われる。二回目の問い合わせは、sudo を実行するユーザのユーザ名や所属グループに対応するエントリを見つけるためだ (特別なタグ ALL が何にでもマッチするのは、この場合も同様である)。ユーザ名やグループに対応するエントリが得られなかった場合は、三回目の問い合わせが行われ、ユーザのネットグループを含んでいるすべてのエントリーを取得して、問題のユーザがそのどれかに属していないかをチェックする。


LDAP と non-LDAP の sudo 設定の相違点

LDAP を使用する場合、sudo の設定の処理方法に /etc/sudoers の場合とは微妙な違いがいくつかある。たぶん最大の違いは、RFC に書いてあるとおり、 LDAP の順序づけは不定なので、属性やエントリが何らかの決まった順序で返されることを期待できないということだろう。ただし、あるエントリーにコマンドに関して相反するルールがある場合は、否定する方が優先される。これはパラノイア的動作と言われるものだ (もっとも、それが一番明示的なマッチだとはかぎらないのだが)。

Man page of SUDOERS.LDAP

nsswitch.conf の設定

ビルド時に無効にしないかぎり、sudo はネームサービス・スイッチ・ファイル /etc/nsswitch.conf を調べて、sudo の設定を参照する順番を決める。すなわち、/etc/nsswitch.conf に sudoers: という文字列に始まる行を探し、その行によって参照順を決定するのである。気をつけてほしいのは、sudo は参照中、マッチする項目に一度出会ったからと言って、そこで参照を終わりにしないことだ。しかも、後でマッチしたものが前にマッチしたものよりも優先されるのである。

以下の参照元が有効である。

files       /etc/sudoers から sudo の設定を読み込む
ldap        LDAP から sudo の設定を読み込む

なお、 [NOTFOUND=return]

の記述があると、先行する参照元にユーザが見つからなかった場合、参照を中断することになる。

Man page of SUDOERS.LDAP
トラックバック - http://tech.g.hatena.ne.jp/rx7/20120220