私は、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を使用してデフォルトのシェルを変更できません。
同様の問題がありましたが、SSHログインのみでした。 (コンソール経由の)ローカルログインは/etc/security/limits.conf
。
結局のところ、設定すると:
UsePrivilegeSeparation yes
/etc/ssh/sshd_config
ファイル、次にsshdは権限のない子をフォークしてアカウントの環境を設定します。この子には特権がないため、pam_limits.soに上限を設定しても効果はありませんでした。
設定したらすぐ
UsePrivilegeSeparation no
/etc/ssh/sshd_config
とSSHサービスをバウンスすると、limits.confファイルがSSHログインで尊重されました。
Ulimitが/ etc/profileまたは〜/ .bashrcによって適用されていると思います。あなたのシステムに複雑なpamがあるという事実は、私は何かがうまくいっていないことを確認します。
また、pam_limits(8)で言及されているように、/ etc/security/limits.d /に解析されている誤ったファイルがないことを確認します。
セッションに必要なpam_limits.conf行にデバッグパラメータを追加し、ログイン時に/var/log/auth.logを監視します。
ソフト制限が1024の場合、ハード制限はどうですか?
suは、-l引数を使用して、suで新しいログインを取得する必要があります。
su -l -s/bin/bash
幸運を。
Rootとしてログに記録されたRedhatサーバー
/etc/security/limits.conf
user01 - nofile 2048
rootとしてログに記録されるstraceコマンド
strace -o loglimit su - user01
他のシェルのオープンログ制限
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の指示に従ってシェルプロファイルを確認してください。
私はこのような問題を抱えていました、ここで私がしたこと。
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にあるファイルのauthオペレーションでロードされることを確認します...たとえば、/ etc/pam.d/suに、私は追加しました:
session required pam_limits.so
これで、ユーザーに「su」を実行でき、制限がロードされます。確認するためにstraceステップをやり直すことができます。
私のLinuxはLFSなので、/ etc/pam.dファイルにpam_limits.soがないのは私のせいです。他のディストリビューションでは、私はこの正確な問題ではないと思います。
しかし、これが役に立てば幸いです。
私の場合(Centos 6.10)straceは、制限が/ etc/security/limits.confから設定された後、ログインプロセスで/ etc/security/limitsからリセットされたことを示しました.d/90-nproc.conf非rootユーザーの場合:
* soft nproc 1024
root soft nproc unlimited