sudoではまった件
サーバを複数人数で管理することがないので通常sudoなんか使わないでずっとsshでサーバにログインした後「su -」でrootになって作業してきたのですが、一応sudoの使い方も覚えていたほうがいいかなと思ってちょっとやってみたのですが、はまりました。
どこではまったかというとHost_Aliasの設定です。
Host_Aliasについて検索してみると接続元のホストを限定するために指定すると説明しているサイトが多数あるのでそれにしたがって自分のIPアドレス(固定のグロバルIPアドレス)を指定してみたわけです。
sudoの設定ファイルは/etc/sudoersなのですがこれを編集するためにはrootになってvisudoコマンドを使います。
/etc/sudoers
Host_Alias NET1 = 8.8.8.8
admin NET1=(ALL) ALL
そして、上の様に設定して
自分の実行権限を調べるためのコマンドを発行してみます。
$ sudo –l
admin@www Password: <パスワードを入力>[エンター]
Sorry, user admin may not run sudo on www.
はい、エラーがでました。
ちなみにパスワード入力は通常「Password: 」としか表示されませんが、これだとrootのパスワードを入力するのかどのユーザのパスワードを入力するのかわからないので
Defaults passprompt = %u@%h Password:
という設定をsudoersに追加しています。
で、色々調べたのですがよくわからない。なんでエラーになるのかわからない。もちろんALLに戻せば問題なくsudo -lできる。
[admin@www ~]$ sudo -l
admin@www Password:
User admin may run the following commands on this host:
(ALL) ALL
[admin@www ~]$
同じ質問をしている人の2chの過去ログがに見つかったけど、華麗にスルーされているw。
くだらねえ質問はここに書き込め! Part 172 – 2ちゃんぬる
海外の質問も見つかるが同じように解決してないのばっかり検索に引っかかる。
で、一度あきらめてふて寝してまたさがしてみると、たまに見かけるのがそこには通常、単にローカルシステム名を設定するというのを見かける。
IT Resource Center forums – Purpose of Host_alias in SUDO – This thread has been closed[http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=1128704]
そして、FileMakerのテクニカルサポート
テクニカルサポートインフォメーション – FileMaker[http://www2.filemaker.co.jp/fmi/xsl/techinfo/browserecord.xsl?AnswerID==7555]
注意
●Mac OS でスクリプトを実行するユーザアカウントを使用するには、/etc/sudoers ファイルに次のエントリを追加する必要があります。
Host_Alias FMSHOST = ユーザのホスト名
Defaults:fmserver targetpw, timestamp_timeout=0, passwd_tries=1
fmserver FMSHOST = (ALL) /ライブラリ/FileMaker\ Server/Data/Scripts/*, /bin/kill
ホストのエイリアスには、FileMaker Server を実行するホストの名前を入力します。 “localhost” または 127.0.0.1 は使用できません。 使用する正しいホスト名を検索するには、ターミナルアプリケーションで次のコマンドを入力します。
hostname
Host_Alias FMSHOST = ユーザのホスト名
と描いてあるけど
その下には「ホストのエイリアスには、FileMaker Server を実行するホストの名前を入力します。」と書いてある。どっちよ?
さらに、「“localhost” または 127.0.0.1 は使用できません。 使用する正しいホスト名を検索するには、ターミナルアプリケーションで次のコマンドを入力します。
hostname」とあるけどlocalhost使えないんだーへーhostname使うんだーちょっと参考になった。えっ?やっぱりサーバー側のホスト名を設定するってこと?意味が分からない?
でも、実際にサーバ側でhostnameコマンドをうって表示されたホスト名を設定したら普通に
sudo –l
できた。
でも、これじゃ接続元のホスト限定できないから意味ないよね。
同じことで悩まれている方のブログを発見。
visudo編集:勘違いしてた。。。あれ?やっぱり分からない… – bugfix
下のサイトのQAは割と最初に見つかったのだが意味がわからなかったのでスルーしてみたが結果分かってから見てみると確かに答えが書いてある気がしなくもないw。そうIPアドレスを設定したのが悪いわけだ、何も設定しなければ問題ないw。
で、Host_Aliasはなんの為に存在するのか?僕はこう理解しました。wikipediaによるとsudoって1990年くらいから開発されてるみたいだし、そういう事だよね。どういうことだよw。
つまり、今みたいにsshでサーバーに接続するような時代じゃなくって、UNIXマシン同士がネットワークしてた時代の物だよね。他のUNIXマシンからリモートログインするときにsudo出来るかどうかの設定をするための機能なんじゃないかと理解しました。つまりsshでログインするぶんには普通にサーバーのホスト名を設定しておくかALLのままにしておけということですよね。
違ってたら誰か突っ込んでください。m(_ _)m
じゃあ、接続出来るホストはどうやって限定するのかって話になるかと思いますが、やっぱりそれはiptablesなどのファイヤーウォールでやれって事になると思います。実際私の管理しているサーバーにはsshには自分のリモートホストからしか接続できないようにiptablesに設定してあるので確かにsudoで制御する必要はないかと思いました。
タグ : Linux