- ベストアンサー
ログインシェルの変更について
現在Unixを使っています。 特定ユーザでログインした際のログインユーザを自分の作ったプログラムにしたいのですが、 chshなどのコマンドを使っても、利用可能なログインシェルに登録されていないため変更できないです。 どうすればログインシェルを変更することができるでしょうか? 初歩的なことかもしれませんが、よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> ですがAIXのVer5.1を使っています。 了解しました。ただ、言おうとしていたのは「違う実装のコマンドのマニュアルを見ても意味がない(少ない)」ということです。AIXの管理をするのにHP-UXのコマンドを見ても参考程度にしかなりませんし、見る人が理解していないと逆に有害にすらなります。 > ここにはどのような内容を書けばよかったのでしょうか? 一般論として、Unixのmanでコマンドのオプションがブラケット [ ] で囲まれているときは、それを省略することができます。 なので、chsh実行時のコマンドとしては以下6つのパターンがあることになります("$"で挟まれている部分には適当なモジュール名やユーザ名などが入ります) % chsh % chsh $Name$ % chsh $Name$ $shell$ % chsh -R $Module$ % chsh -R $Module$ $Name$ % chsh -R $Module$ $Name$ $shell$ ここで、-Rオプションで指定する「ロード可能 I&A モジュール (loadable I&A module)」が何か、ということは私も知らないのでお答えできませんが、ヘルプの末尾にあるサンプルを見ると、外部の認証装置を利用する場合などに指定するものと想像します。なので、現在普通にpasswdファイルで認証を行っているのであれば、ここは無視しても良いのではないでしょうか。 万全を期すのであれば、「ロード可能 I&A モジュール (loadable I&A module)」について調べましょう。 それから、「有効なシェルは、/etc/security/login.cfg ファイルの usw スタンザ内に定義されます。」と記述されていることから、chshで扱うshellは login.cfgファイル内に記述されている必要があると思われますので、ここを変更する必要があると思います。 login.cfgについては別途manが用意されているはずですので、変更するときはそちらを見て修正してください。
その他の回答 (5)
- Toshi0230
- ベストアンサー率51% (836/1635)
> ログインシェルを自分の作ったプログラムにすると強制終了?というかログインしたと同時に消えてしまうようになりました。 私もよくわかりませんが……実は起動して所定の処理が終わった後、そのままログインセッションごと終了している、ってことはないですか? あと、所定のプログラムをログイン直後に実施したい、というだけだったら そのプログラムの実行を~/.login に記述する(login shellにcshを使っている場合)、なんて方法もあると思うのですが、それではだめなんでしょうか?
お礼
あれから調べてみたのですが、どうやら1というファイルから他の場所に飛んでいるので実行できなかったようです。 今まで付き合っていただきありがとうございました。
- Toshi0230
- ベストアンサー率51% (836/1635)
質問者さんは「Unixを使っています。」とのことですが、具体的に何を使われていますか? 一口に「UNIX」と言っても、AIXとHP-UXとSolarisではコマンドの実装が少しずつ異なります。LinuxとFreeBSDでも違いがあります。 AIXでできたことがそのままSolarisやLinuxでできる保証はどこにもありません。 なので、例えばFreeBSDを使用している人が提示されたIBMやHPのサイトを見たところで、意味はありません。実装されているchshのマニュアル、つまりman chshを見てください。
お礼
早くのアドバイスありがとうございます。あと、説明不足で申し訳ありませんでした。 >AIXとHP-UXとSolarisではコマンドの実装が少しずつ異なります。 ですがAIXのVer5.1を使っています。 プログラムに関しては、現在、/bin/cshでログインした後、1というコマンドで起動させています。 プログラムの内容ですが、データを他の場所に送信したり、以前保管していたテープから、バックアップデータの取り出しなどをしています。 あと、IBMのサイトのことですが、man chshを翻訳すると、IBMのヘルプのページがまったく同じ内容だったため、きちんと翻訳されている方を参考にさせていただいていました。 もうひとつのサイトを使ってしまったのは下記の内容が良く分からなかったため参考にさせていただいたのですが、あまり意味がなかったようですね… -R load_module ユーザーのシェルの変更に使用するロード可能 I&A モジュールを指定します。 man chshで調べたときにchsh [-R load_module] [ユーザ名[SHELL]]とあったのですが、load_moduleに書けばよい内容が分からなかったためいろいろ探していたのですが、ここにはどのような内容を書けばよかったのでしょうか? すみませんが、よろしくお願いします。
- D-Matsu
- ベストアンサー率45% (1080/2394)
「迷ったらまずman(=マニュアル)を読め」というのはUNIX及びクローン系の鉄則です。 というか、それだけ出来ててmanを知らないというのが信じられないんですが……
お礼
返答が遅くなりすみません。 IBMのヘルプにman chshで実行したときと同様の内容があったため、このサイトともうひとつ参考になりそうなサイトを使い実行したのですがうまくいきませんでした。 参考サイト http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds1/chsh.htm http://docs.hp.com/ja/B2355-90850/chsh.1.html chsh -R files ユーザ名 /home/usr/A/1 ←自作のプログラムです chsh ユーザ名 /home/usr/A/1 これらのコマンドを実行すると、"ユーザ名"のシェルを"/home/.../1"に設定するときエラーが発生しましたとなります。 前にchshを使い対話式のほうで実行した際も同様の結果でした。 これはやはり/etc/shellsにプログラムが書かれていないためでしょうか?やり方が間違っているとかではないように思えるのですが… すみませんがよろしくお願いします。
- Toshi0230
- ベストアンサー率51% (836/1635)
> chshなどのコマンドを使っても、利用可能なログインシェルに登録されていないため変更できないです。 man chsh で chsh のマニュアルを見れば、自作のshell(?)をchsh使って切り替えられるようにするにはどうすればよいか書いてあります。 「利用可能なログインシェルに登録されていない」ところまでは自力でたどり着いたのですから、あと少しですね。 NO.1さんのいいたかったこともこういう事だと思いますよ。 別解もありますけど、ここでは伏せておきます:-P
お礼
回答ありがとうございます。 マニュアルを見ていろいろ試してみたのですが、なかなかうまくいきませんでした。詳しいことは次のお礼のところに書いているのでよろしければご教授おねがします。
- D-Matsu
- ベストアンサー率45% (1080/2394)
man chshはしてみましたか?
お礼
早い回答ありがとうございます。 man chshはまだ試していないのでやってみようと思います。 使い方はman chshと入れればよいのでしょうか? 後、プログラムは/home/usr/A/1にあるのですが、追加するしぇるは/home/.../1まで書けばいいのでしょうか? 質問ばかりですみません。
お礼
本当に丁寧に教えていただきありがとうございます。 実際に作業するのは月曜以降になりそうですが、これから調べてやっていこうと思います。 ありがとうございました!
補足
遅くなりましたが、ログインシェルの変更はすることが出来ました。 しかし、ログインシェルを自分の作ったプログラムにすると強制終了?というかログインしたと同時に消えてしまうようになりました。 /home/usr/A/1←プログラムの場所+ログインシェルとして登録 /home/usr/A←ユーザのホームディレクトリ なのですが、いつもは、cshのシェルで入り1のコマンドでこのプログラムを起動させています。 ログインシェルとして使おうとするからこのように起動されないのでしょうか? もしくは、このユーザが使える場所にしかないから?起動されないのでしょうか? 私が予想していたのはログインするとそのプログラムが起動してくれると思っていたのですが… 本題の方は解決したのにすみません… よろしければ教えていただけないでしょうか?