質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

LDAP

LDAPは、ディレクトリデータベースにアクセスするためのプロトコルです。ディレクトリデータベースとは、ネットワークに存在するメールアドレスや環境などさまざまな情報を一元的に管理するサービスのことで、クライアントはLDAPサーバにアクセスしてユーザ名から検索や追加などの操作することができます。

Q&A

解決済

4回答

1886閲覧

CentOS7上で、LDAP認証を受けたユーザからrootユーザに変更したい。

nansa

総合スコア13

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

LDAP

LDAPは、ディレクトリデータベースにアクセスするためのプロトコルです。ディレクトリデータベースとは、ネットワークに存在するメールアドレスや環境などさまざまな情報を一元的に管理するサービスのことで、クライアントはLDAPサーバにアクセスしてユーザ名から検索や追加などの操作することができます。

0グッド

1クリップ

投稿2019/05/20 06:51

実現したいこと

CentOS7環境でLDAP環境構築を行っております。
LDAPユーザの認証をsssdサービスを使って行っております。
sssdサービスを使って認証うけたLDAPユーザが、ローカルサーバのrootユーザとして、変更したいと考えております。

現在できること

  • サーバのローカルユーザ(centos:wheelグループに所属)で、rootになることはできる。
  • ローカルユーザ(centos)でLDAPユーザ(unyo)としてsuすることはできる。
    su - unyo

unyoユーザで、suコマンドでrootユーザになることは可能なのでしょうか?

発生している問題・エラーメッセージ

上記unyoユーザかrootユーザになろうとすると下記メッセージが出力されて失敗します。

# su - centos $ su - unyo パスワード: -bash-4.2$ id uid=2001(unyo) gid=2001(ope) groups=2001(ope) $ su - パスワード: su: 拒否されたパーミッション $

実行コマンド・設定ファイル

http://blog.father.gedow.net/2015/09/29/sssd-ldap-sudo/
https://teratail.com/questions/92368
等を参考にして下記コマンドを入力で環境を構築しております。

# yum install sssd sssd-client sssd-ldap openldap-clients # systemctl enable sssd # cp /usr/share/doc/sssd-common-1.16.2/sssd-example.conf /etc/sssd/sssd.conf # chmod 600 /etc/sssd/sssd.conf # authconfig --enablesssd --enablesssdauth --enablelocauthorize --enableldap --enableldapauth --disableldaptls --update # vi /etc/sssd/sssd.conf --------------------------一部抜粋----------------------------- [sssd] config_file_version = 2 services = nss, pam, ssh, sudo # SSSD will not start if you do not configure any domains. # Add new domain configurations as [domain/<NAME>] sections, and # then add the list of domains (in the order you want them to be # queried) to the "domains" attribute below and uncomment it. domains = LDAP [nss] [pam] # Example LDAP domain [domain/LDAP] id_provider = ldap auth_provider = ldap ldap_schema = rfc2307 ldap_uri = ldap://test104 ldap_search_base = dc=excample,dc=com ldap_sudo_search_base = ou=Group,dc=excample,dc=com ldap_id_use_start_tls = False ldap_tls_reqcert = allow --------------------------一部抜粋----------------------------- # systemctl start sssd # su - centos $ su - unyo パスワード: -bash-4.2$ id uid=2001(unyo) gid=2001(ope) groups=2001(ope) $ su - パスワード: su: 拒否されたパーミッション $

試したこと

idコマンドで出力されたグループもrootになれるよう、
/etc/sudoersに下記行をvisudoで追記しても結果は同じでした。
%ope ALL=(ALL) ALL

ldapサーバのログを/var/log/ldaplogに出力して確認しておりますが、
unyoユーザのLDAP認証自体はうまくbindできている内容が出ておりました。

その他

CentOS Linux release 7.6.1810 (Core)

いろいろと資料を見ておりますが、今回の行いたい内容そのものズバリという情報が見つからず、
質問させていただきました。
また、説明・情報が不足であればご指摘いただければと思います。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

やったこと無いので 参考までにですが、LDAP 側で sudo の設定を一元管理して、特定のユーザだけ sudoers で許可するのが 要望に合ってそうに思いました。

ご参考)https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system-level_authentication_guide/Configuring_Services#sssd-ldap-sudo

また、 man sssd.conf , man sssd-ldap , man sssd-sudo あたりを読むと詳細が書いてます。

投稿2019/05/21 07:55

take88

総合スコア1351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nansa

2019/05/21 23:58

回答いただきありがとうございます。 いただいた回答ですが、少し古いですが、下記内容のことでしょうか? https://qiita.com/shufo/items/979985a922d8148fa996 https://qiita.com/T_Tsan/items/5ea2563450ed2d2ee20f 他の方でも私の要望と実現性から、いったんは、必要な時だけsudoで対応することとしたいと思います。 まだ、調査する時間はありますので、引き続き、LDAPでsudoの設定を一元管理する方法を試していきたいと思います。
take88

2019/05/22 11:42

qiitaの記事は centos6 なので そのままいけるかどうか不明です。多分、LDAPクライアント側はsssdを使って設定するのかなと思います。
guest

0

このサーバーだけでいいのであれば、usermod -G wheel unyo で unyo ユーザーをローカル(/etc/group)の wheel グループ(補助グループ)に属するようにする方法はダメでしょうか?
/etc/nsswitch.conf の設定で、"group: files sss" と /etc/group, LDAP 両方見るようになっていると思いますので。

###(2019/05/21 17:39) 追記
pam_wheel.so の引数に group=ope と指定してグループ名を変更できます。
wheel と ope など、複数グループを指定することはできないようです。

なお、memberUid 属性の値は DN (uid=...) ではなく、UNIX ユーザー名 (unyo) とするのではないでしょうか。

投稿2019/05/20 12:49

編集2019/05/21 08:39
TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nansa

2019/05/21 02:16

お忙しい中回答いただきありがとうございます。 いただいた回答の通り、/etc/nsswitch.confでfilesも指定しているので、/etc/groupのwheelグループにそのユーザを追加してrootにsuできました。 $ id uid=1000(centos) gid=1000(centos) groups=1000(centos),10(wheel) $ su - unyo パスワード: 最終ログイン: 2019/05/21 (火) 10:15:58 JST日時 pts/0 -bash-4.2$ id uid=2001(unyo) gid=2001(ope) groups=2001(ope),10(wheel) -bash-4.2$ su - パスワード: 最終ログイン: 2019/05/21 (火) 10:17:01 JST日時 pts/0 # id uid=0(root) gid=0(root) groups=0(root) # grep wheel /etc/group wheel:x:10:centos,scheduler,unyo # いただいた方法で希望することができました。 ありがとうございます。 回答いただいたところ大変申し訳ございませんが、 最終的に、LDAP上の特定グループ(ope)に所属しているLDAPユーザであれば、rootになれるような設定にしたいと考えております。 こういったことができるのでしょうか? もし可能であれば、どういった設定が必要か知見がございましたら教えていただけますでしょうか? LDAP上には、unyoユーザが、opeグループに所属するようmemberUidに設定はしてあります。 LDAPサーバでは、unyoをopeグループのメンバとして登録しております。 dn: cn=ope,ou=Group,dc=example,dc=com objectClass: posixGroup objectClass: top cn: ope gidNumber: 2001 memberUid: uid=unyo,ou=People,dc=example,dc=com dn: uid=unyo,ou=People,dc=example,dc=com uid: unyo cn: ss21 unyo user objectClass: account objectClass: posixAccount objectClass: top loginShell: /bin/bash uidNumber: 2001 gidNumber: 2001 homeDirectory: /home/unyo
guest

0

wheelに所属することが出来ないと言うことなら、/etc/pam.d/suから、pam_wheel.soの行を削除してはどうでしょうか。
rootパスワードを知っていれば誰でもsuできるようになってしまいますが。

投稿2019/05/20 09:24

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nansa

2019/05/21 02:07

お忙しい中回答いただきありがとうございます。 いただいた回答でおそらくrootにsuできるように思います。 私の質問に対する説明が不足しており、申し訳ございません。 rootになれるユーザはシステム的に制限したいという背景がございます。 そのため、OSにログインできる、rootのパスワードを知っているユーザが誰でもrootにsuできるのは、 今回の環境では、NGになると思います。 しかしながら、こういった方法があるということは知りませんでしたので、勉強になります。
otn

2019/05/21 03:14

質問内容から、 > wheelに所属することが出来ない だと思い込んでいました。試してなかったと言う事ですかね。
otn

2019/05/21 03:22

> こういった方法があるということ もともとのLinuxではLinusの方針でパスワード知っている人は誰でもrootになれたそうです。 BSDUnixのwheelの考えに慣れた人が同じ運用にしたくて、このモジュールを作ったのでしょう。
nansa

2019/05/21 04:32

引き続き回答していただきありがとうございます。 なるほど。そういった経緯もあるのですね。 セキュリティ的な観点で、rootでは直接ssh接続できないようにして、LDAPで定義されたユーザでログインする。必要な時に、LDAPで定義されたユーザから、そのサーバのrootユーザになるという運用を想定して、今回のような設定をしております。 別の方で、LDAPで定義されたユーザを/etc/groupにあるwheelに追加する方法を教えていただき、当初の目的は達成できました。 さらに、できれば、今後ユーザの増減があった時を考慮し、LDAPの設定だけでどうにかできないかと考えております。 例えば、LDAPで定義されたグループ(ope)をrootになれるようにサーバ上で一度設定して、 LDAP上のopeグループにLDAPユーザをメンバーに登録するだけで、rootになれるユーザをコントロールできないかと考えております。 もし、このあたりの知見がございましたら、教えていただけますでしょうか?
otn

2019/05/21 04:42 編集

LDAPはよく知りません。 LDAPの機能以外での対策としては、 案1:pam_wheel.soのソースを修正して、opeもOKとする 案2:pam_wheel.soを外してだれてもログインできる状態で、~/.bashrc、.bash_profile等でグループをチェックして違えばexitする(ログインした人が、うっかり.bashrcを修正しちゃうとだめだが) 案3:pam_wheel.soを外してだれてもログインできる状態で、ログインシェルを「グループチェックしてOKのときだけbashを起動するプログラム」にする(これはsuのオプションで抜け道有り)
nansa

2019/05/21 05:56

引き続き回答いただきありがとうございます。 LDAPを使わない方法として3点案をいただきました。 対応方法としては、ログインシェル、もしくはシェルの読み込む設定ファイルでコントロールする方法か、pam_wheel.soの修正ですね。 設定だけでうまくいかない場合の案としては、検討していきたいと思います。
otn

2019/05/21 07:58

suを諦めて、sudoで要件を満たせない理由をつぶす方が早いかも知れません。
nansa

2019/05/21 23:35

回答いただきありがとうございます。 確かに、LDAPのユーザで、システム的にroot権限のコマンドの実行が制限できることができればよいので、 一度、sudoを利用する方向ですすめていきたい思います。 ありがとうございました。
guest

0

ベストアンサー

「sudo su -」でも駄目ですか?

投稿2019/05/20 07:04

sage

総合スコア1216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nansa

2019/05/21 02:02

お忙しいところ回答いただきありがとうございます。 以下ためしてみた結果です。 $ su - unyo パスワード: 最終ログイン: 2019/05/20 (月) 15:19:46 JST日時 pts/0 -bash-4.2$ id uid=2001(unyo) gid=2001(ope) groups=2001(ope) -bash-4.2$ su - パスワード: su: 認証失敗 -bash-4.2$ sudo su - あなたはシステム管理者から通常の講習を受けたはずです。 これは通常、以下の3点に要約されます: #1) 他人のプライバシーを尊重すること。 #2) タイプする前に考えること。 #3) 大いなる力には大いなる責任が伴うこと。 パスワード: 残念、また試してください。 パスワード: $
sage

2019/05/21 03:43

sudoでのパスワードプロンプトに応答するパスワードは自分(この場合unyo)のパスワードですが、それを入れたのですか?
nansa

2019/05/21 04:16

回答ありがとうございます。 説明が不足しておりました。申し訳ございません。 unyoユーザにて、sudo su -を実行し、入力したパスワードは、そのサーバのrootのパスワードを入力いたしました。
sage

2019/05/21 04:29

前記のとおり、sudoのパスワードプロンプトに対してrootのパスワードで応答するとエラーになります。
nansa

2019/05/21 04:52

引き続き回答いただきありがとうございます。 大変失礼しました。unyoのパスワードですね。 # grep wheel /etc/group wheel:x:10:centos,scheduler # grep ope /etc/sudoers %ope ALL=(ALL) ALL [root@kcssvt104 cn=config]# su - unyo 最終ログイン: 2019/05/21 (火) 10:34:16 JST日時 pts/1 -bash-4.2$ id uid=2001(unyo) gid=2001(ope) groups=2001(ope) -bash-4.2$ sudo su - あなたはシステム管理者から通常の講習を受けたはずです。 これは通常、以下の3点に要約されます: #1) 他人のプライバシーを尊重すること。 #2) タイプする前に考えること。 #3) 大いなる力には大いなる責任が伴うこと。 パスワード: 最終ログイン: 2019/05/21 (火) 12:58:17 JST日時 pts/3 # id uid=0(root) gid=0(root) groups=0(root) # 別の方から、/etc/groupを書き換える方法を教えていただいたので、いったん/etc/groupの登録を外し、 /etc/sudoersにopeの登録があることを確認してから、再度実行した結果、うまくログインできました。 /etc/sudoersの登録はうまく機能しているということでしょうか?
sage

2019/05/21 08:25

「sudo su -」でrootになれたことから/etc/sudoersの設定「%ope ALL=(ALL) ALL」は想定どおりに動いています。 ところでunyoユーザはrootになる必要があるのでしょうか? (rootの権限さえあればいいのでは?) sudoはrootのパスワードを公開せずにroot権限が必要なコマンドの実行を許可する機能なので、rootのパスワードの公開を止め(rootのパスワードは変更し)、かつ「sudo su -」は原則、使用しないように指導した方がいいと思います(「sudo su-」した後の操作はログに残らないので)。 まあ、私自身、1個、2個のコマンドならsudoでやりますが、多数のコマンドを叩くとか、root権限がないと見えないディレクトリを追いかけていくとかの時は「sudo su -」とやってしまいますが。
nansa

2019/05/21 23:41

回答ありがとうございます。 おっしゃる通りで、root権限でコマンドが実行できればいいので、sudoでできる範囲はそうしていきたいと思います。 ansible等を使っての運用まで、自分自身のスキルも体制もなく、 また、OSSソフトウェアを最新バージョンで追っていくために、ソースから構築するような運用をしており、多数のコマンドをたたくようなことになりそうです。 その際は、sudo su - を使うことにどうしてもなりそうですが、別の手立てを考える等で、今後検討していきたいと思います。 ありがとうございました。
nansa

2019/05/22 00:06

私の要望に対して、皆様よりいくつかの解決案をいただきました。 その中で、最終的に一番近い形で実現できそうな回答をいただきましたので、こちらを回答でもってクローズさせていただきたく思います。 /etc/sudoersにsudoできるグループを追加する。 基本的にrootでの作業はsudoを使う。 ただし、複数コマンドを入力する場合は、sudo su - を利用する。  その場合、ログに残らない場合があるので、別の手立てを検討する。(合わせて、要件として満たせるかも調整する)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問