sudoで実行するとulimitが機能しないのはなぜですか?


回答:


10

ulimitシェル/プロセス固有です。をスキップしsudoます。

$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384

sudo渡されたときにエラーを出さなかったことに驚いていulimitます。通常は外部バイナリが必要ulimitですが、組み込みシェルです。
amphetamachine

@amphetamachineチェックアウトwhich ulimit。それについて驚くべきことは何もありません。
ダニエルベック

この答えは、たとえ真実に基づいていても、ひどく誤解を招き、役に立たないものです。
hmijailは、2017

3

ダニエルベックの答えはすべての真実を語っていません(実際、それはちょっとした巧妙なものです)。実際に「sudo ulimit」を実行する必要がある人々を助けません。

問題はそれです

  • ulimitにはソフト制限とハード制限があります
  • ハード制限を設定したら、それを高く設定するためにスーパーユーザーになる必要があります
  • sudoは新しいシェルを開始します。終了すると、古いulimitに戻ります。

詳細説明

ダニエルの例は、非常に特殊な状況でのみ機能します(幸いにもデフォルトです)。

反例:

$ ulimit -s 8191              # set both hard and soft limits
$ ulimit -s                   # show current soft limit
8191
$ ulimit -s 16384             # set both hard and soft limits
-bash: ulimit: stack size: cannot modify limit: Operation not permitted

したがって、で制限を設定するとulimit -s、ソフト制限とハード制限の両方が設定されます。これで、それを高く設定できなくなりました。
この時点で、あなたは試すことを考えるかもしれませんsudo。しかし、ダニエルが書いたため、それは機能しません。

$ sudo ulimit -s 16384        # maybe with sudo?
$ ulimit -s
8191
$

ここで起こったことは、それsudoが実行された新しいシェルを開始したことulimitです。THATシェルでは、新しいulimitが設定されました。しかし、そのシェルは作業を終えて取り壊され、以前のulimitを使用して以前のシェルに戻ります。

証明:

$ ulimit -s 8191
$ ulimit -s
8191
$ sudo bash
# ulimit -s
8191
# ulimit -s 16384
# ulimit -s                           # It worked!
16384
# exit
exit
$ ulimit -s                           # ... but now we're back to the old ulimit.
8191
$

では、なぜダニエルの例は正確に機能したのでしょうか?ulimitのデフォルトのハード制限とソフト制限のため、彼はソフト制限をハード制限にプッシュできます。スローモーションでそれを行うと、トリックを表示できます。

$ ulimit -Ss                 # show the Soft limit
8192
$ ulimit -Hs                 # show the Hard limit
65532
$ ulimit -s                  # by default, shows the Soft limit
8192
$ ulimit -s 16384            # set both the Soft and Hard limit
$ ulimit -s                  # shows the Soft limit
16384
$ ulimit -Hs                 # but, gotcha! the Hard limit has also been set
16384
$ ulimit -s 16385            # so now we can't go higher
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
$

要約すると、ハードリミットを設定してそれを押し上げたい場合、そのシェルは運がありません...スーパーユーザーのままであるか、または何らかの呪文を使用して後で特権を削除しない限り。

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