sudo로 실행할 때 ulimit가 작동하지 않는 이유는 무엇입니까?


답변:


10

ulimit쉘 / 프로세스에 따라 다릅니다. 를 건너 뜁니다 sudo.

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

나는 sudo지나갈 때 오류를주지 않았다는 것에 놀랐다 ulimit. 일반적으로 외부 바이너리가 필요하지만 ulimit쉘 내장입니다.
amphetamachine 2016 년

@amphetamachine 확인하십시오 which ulimit. 그것에 대해 놀라운 것은 없습니다.
Daniel Beck

이 대답은 사실에 근거하더라도 엄청나게 오도되고 도움이되지 않습니다.
hmijail의 신음은 resignees

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. 그러나 Daniel이 쓴 내용으로 인해 작동하지 않습니다.

$ 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.