ulimit -nは変更されません-値limits.confは効果がありません


13

私は、ubuntuマシン上のすべてのユーザーのオープンファイル記述子の最大値を上げようとしています。

この質問は、この質問のフォローアップです。

pam_limits.soが必要な場合でも、オープンファイル記述子limits.conf設定はulimitによって読み取られません。

ただし、limits.confに必要な「ルート」エントリを追加したことを除きます。

ここにエントリがあります

*               soft    nofile           100000
*               hard    nofile           100000
root            soft    nofile           100000
root            hard    nofile           100000

関連する行pam_limits.soは、/ etc / pam.d /のすべての関連ファイルでコメント解除fs.file-maxされ、/ etc / sysctl.confで正しく設定されています。

しかし、私はまだ見る

abc@machine-2:/etc/pam.d$ ulimit -n
1024

再起動後。

何が問題なのでしょうか?

私のデフォルトのシェルは/ bin / shであり、マシン上のユーザーは何らかの分散認証スキームを介して認証されるため、chshを使用してデフォルトのシェルを変更することはできません。


straceの-o loglimit SU - ABCとそのegrepの後に"(リミット|オープン)" loglimit、多分あなたのPAMの設定が間違っている
c4f4t0r

@ c4f4t0r、suの-オプションは、それが最後の引数である場合にのみ新しいログインを引き起こします。私はそのmanページを読んでいたので、これを知っているだけです。また、詳細として、通常のユーザーはsuid rootバイナリを追跡できません。
etherfish

ルートとして、あなたはstraceの-o loglimitのsuコマンドを使用する必要があります- ABC
c4f4t0r

申し訳ありませんが、スパムのために、私は、問題のこの種の持つunix.stackexchange.com/questions/200310/...
vladeli

回答:


5

私は同様の問題を抱えていましたが、SSHログインのみでした。(コンソール経由の)ローカルログインは、を尊重しました/etc/security/limits.conf

判明したように、設定すると:

UsePrivilegeSeparation yes

/etc/ssh/sshd_configファイル内で、sshdはアカウントのenvを設定するために特権のない子をフォークします。この子は特権を持たないため、pam_limits.soで上限を設定しても効果がありません。

設定したらすぐに

UsePrivilegeSeparation no

/etc/ssh/sshd_configSSHサービスを開始してバウンスした後、limits.confファイルはSSHログインで尊重されました。


2
私の場合、sshd-configをに変更しましたUsePAM yes。(sshd-configを示すために+1)
ランドールホイットマン

4

/ etc / profileまたは〜/ .bashrcによってulimitが適用されていると思われます。システムに複雑なPAMがあるという事実は、何かがおかしくならないことを確認します。

また、/ etc / security / limits.d /に、pam_limits(8)に記載されているように解析されている誤ったファイルがないことを確認します。

セッションに必要なpam_limits.conf行にデバッグパラメーターを追加し、ログイン時に/var/log/auth.logを監視します。

ソフト制限が1024の場合、ハード制限はどうですか?

suは、-l引数を使用してsuで新しいログインを取得します。

su -l -s / bin / bash

幸運を。


私のハード制限は4096すなわちulimit -Hn
ネルブ14年

4

ルートとしてログインしているRedhatサーバー上

/etc/security/limits.conf

user01  -       nofile  2048

ルートとして記録されたstraceコマンド

strace -o loglimit su - user01

他のシェルでloglimitを開く

grep "limit" loglimit
open("/lib64/security/pam_limits.so", O_RDONLY) = 6
 ..........
 ..........
 open("/etc/security/limits.conf", O_RDONLY) = 3
 read(3, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 1823
 open("/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3
 setrlimit(RLIMIT_NOFILE, {rlim_cur=2*1024, rlim_max=2*1024}) = 0

このようにして、pam_limitsがロードされ、limits.confが読み込まれたことを知っています.pam_limitsがロードされていても、ulimit -nを使用して他の値が表示される場合は、@ etherfishが言ったようにシェルプロファイルを確認してください


3

私はこのような問題を抱えていました。

straceコマンドは、プロセスが外部ライブラリと行っているすべての相互作用を出力するため、構成が読み込まれているかどうかを確認できます。

だから、私は、上記の提案のように:

root:/etc/pam.d$ strace -o ~/loglimit su - glaudiston
glaudiston:~$ exit
logout
root:/etc/pam.d$ cat ~/loglimit | grep limits.conf

私の問題では、straceログ(strace -o log su-username)には制限テキストのインスタンスがないため、ファイルlimits.confはロードされませんでした。

まず、pam_limits.soが/etc/security/limits.confを探すことを確認します

root:/etc/pam.d$ strings /lib/security/pam_limits.so | grep limits.conf
/etc/security/limits.conf

したがって、モジュールpam_limits.soが/etc/pam.dにあるファイルの認証操作でロードされていることを確認します(たとえば、/ etc / pam.d / suにある)。

session   required    pam_limits.so

これで、ユーザーに「su」を作成でき、制限がロードされます。straceステップをやり直して、確認することができます。

私のLinuxはLFSなので、/ etc / pam.dファイルにあるpam_limits.soの不在が私の欠点です。他のディストリビューションでは、私はこの正確な問題だとは思わない。

しかし、これが役立つことを願っています。


1

私の場合(Centos 6.10)、straceは、ログインプロセスの後半で/etc/security/limits.confから制限が設定された、すべての非-rootユーザー:

*          soft    nproc     1024
root       soft    nproc     unlimited
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.