スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ssh経由でulimitの値を変更できない

今日、作業をしている最中にユーザーのファイルオープン数を上げてくれないかと
お願いされたのだがこの変更に非常に躓いたのでブログに記しておく。

まず、一番最初に試したのが

$ ulimit -n 4096


コレ。
そうすると・・・

-bash: ulimit: open files: cannot modify limit: 許可されていない操作です


こう帰ってきてしまい、なんだかうまくいかない。
ちょっとGoogle先生に聞いてみると、sshを経由するとうまくいかないみたい。

ssh でログインして ulimit コマンドを使うとエラーになる
http://d.hatena.ne.jp/yohei-a/20090310/1236706236

なるほど。確かにsshでやってる。この場合はsshdのパラメータ変えて対応するのね。
つーことでsshd_configの中身を確認してみると。
コメントになっている。なるほど、ここを書き直してulimitすりゃええのね。

[root@localhost ~]# grep UsePrivilegeSeparation /etc/ssh/sshd_config
#UsePrivilegeSeparation yes


ってことで書き直してsshdを再起動する。

[root@localhost ~]# vi /etc/ssh/sshd_config


#UseLogin no
UsePrivilegeSeparation no
#PermitUserEnvironment no


[root@localhost ~]# service sshd restart
sshd を停止中: [ OK ]
sshd を起動中: /etc/ssh/sshd_config line 103: missing yes/no argument.
[失敗]
[root@localhost ~]# vi /etc/ssh/sshd_config
[root@localhost ~]# service sshd start
sshd を起動中: [ OK ]
[root@localhost ~]#


ちょっとミスったのはご愛嬌。
これでいけんじゃね?ってことで再ログインしてもう一度試してみる。

[ram-kun@localhost ~]$ ulimit -n 4096
-bash: ulimit: open files: cannot modify limit: 許可されていない操作です


ぐお。。。。ブロックされた。まだなんか足りないのか。。。
さらにGoogle師匠に問い合わせてみると
元ネタらしきところに到達。そこに面白いことが書いてあった。

Oracle Database 10g Release 1 (10.1.0)のインストール方法(ML3.0)
https://www.miraclelinux.com/technet/faq/data/00073.html

 この原因は、ssh接続時に、/etc/security/limits.confの設定は反映されないからです。sshではセキュリティ確保のため、ssh経由で接続したプロセスに対し、そのユーザーが本来持っている権限以上の変更はできません。



あ、そっか、もともとlimits.confに何も書いてねーからデフォルト値よりも上げられないのか。
それじゃー、limits.confに書こーじゃないか。

#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4

ram-kun soft nofile 10000
ram-kun hard nofile 15000

# End of file


よーし今度こそいけんだろ。
再ログインして確認。

[ram-kun@localhost ~]$ ulimit -n
10000


キター!

[ram-kun@localhost ~]$ ulimit -n 15000
[ram-kun@localhost ~]$ ulimit -n
15000


変更もできるゥゥゥゥゥゥ!
softに指定したのがログイン時のデフォルトのファイルオープン数で
hardに指定したのがそのユーザーが指定できるファイルオープン数の限界値ってことみたい。


・・・・と、インストールしたてのフッツーのCentOSとかなら上までの説明でヨユーでいけちゃうんですが。。。
今回仕事で触ったのはインフラ屋さんにゴリゴリにチューン?されているCentOSだったみたいで、
実際にはlimits.confをいじっただけではダメだったんですよね。
んで、何が問題だったかってーと、/etc/ssh/sshd_configの

#UsePAM no
UsePAM yes


この部分。
何も触っていないと上記のようになるみたいなんですが、
どうやらセキュリティ的な何かが働いたのか、

UsePAM no


となっていました。

再掲 Oracle Database 10g Release 1 (10.1.0)のインストール方法(ML3.0)
https://www.miraclelinux.com/technet/faq/data/00073.html

 この原因は、ssh接続時に、/etc/security/limits.confの設定は反映されないからです。sshではセキュリティ確保のため、ssh経由で接続したプロセスに対し、そのユーザーが本来持っている権限以上の変更はできません。



たぶん↑のような理由なんでしょうね。
ひとまず、商用環境で実稼動するようなサーバーではなかったので、
UsePAMをyesにしてsshログイン時にlimits.confの値が反映されるようにして
今回は対応を完了しました。


まとめ
1.limits.confに指定ユーザーがオープンできるファイル数の設定が必要だった。
2.sshd_configのUsePAMがyesになっている必要があった
3.sshd_configのUsePrivilegeSeparationはホントにnoにする必要があったんだろうか・・・(゚ω゚ )


ここでひとつ疑問なのがPAM認証がnoなセキュアな本番サーバーでApacheのworkerのような
大量のファイルディスクリプタを利用するアプリケーションを実行させる場合はどうやってやるんでしょうね?
rootの起動スクリプトにulimitを仕込んでおいてsuで別ユーザー実行って形にしたらうまくlimitの値は
引き継がれるのだろうか。。。まぁそのあたりは後日調査ってことで。
スポンサーサイト
プロフィール

ラム君(モヒカンVer)

Author:ラム君(モヒカンVer)
都内でプログラマのようなものをやっています。
まだまだ初心者ですがよろしくお願いします。

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。