Jenkins의 sudo를 사용하는 것이 좋지 않습니까?


11

SSH를 통해 게시 플러그인 을 사용 Jenkins하여 다른 환경 에서 내 앱을 배포 합니다. 일부 배포 작업은 환경 준비 및 앱 서버 시스템 서비스 중지 및 다시 시작과 같은 작업을 수행합니다. 이러한 명령 중 일부에는이 필요합니다 sudo.

원격 게시 및 실행 Jenkins 작업 내에서 sudo를 요구하는 나쁜 보안 관행이 될 수 있는지 궁금합니다. sudo없이 필요한 기능을 수행 할 수 있도록 대상 호스트의 보안 정책을 변경해야합니까?

답변:


6

아니요, 더 높은 수준의 권한이 필요할 때 실제로 sudo하는 것이 실제로 좋은 보안 방법입니다. 이것이 대부분의 배포판에서 기본 로그인을 금지하고 실제로 sudo su입력 하는 대신 강제로 로그인하는 이유입니다 su. 보안상의 이점으로 sudo를 사용하도록 권장하고 싶습니다. 몇 가지 이유가 있습니다.

  • 감사. sudo를 수행하면 시스템은 sudo를 수행 사람과 실행 한 명령을 기록 합니다. 이것은 당신이 되돌아 가서 무슨 일이 있었는지 알아 내야 할 때, 법무 부서 할당, 사악한 활동 잡기 또는 문제 해결 목적으로 (법적 서버가 AWOL로 가기 전에 어제 밤 7시에 있었던 일)?

  • Sudo 규칙. 사용자가 에스컬레이션 된 privleges로 무언가 를 실행해야한다고 해서 에스컬레이션 된 privleges로 모든 것을 실행해야한다는 의미는 아닙니다 . su를 사용하거나 휠에 사용자를 추가하면 모든 작업을 수행 할 있습니다. 그러나 sudo를 사용하면 와일드 카드 사용을 허용 하는 명령 별명 을 사용하여 사용자가 수행 할 수있는 작업과 수행 할 수없는 작업을 지정할 수 있으므로 사용자 권한을 부여하는 유연한 규칙에 따라 사용자는 일부 명령 만 사용할 수 있습니다.

  • 경화. 루트를 비활성화 할 수 있습니다. 마찬가지로 모든 의도와 목적으로 존재하지 않으며 단일 사용자 모드에서만 유용하고 사용할 수 있습니다-서버를 재부팅해야합니다 (그리고 이것이 허용되는 유일한 이유는 암호 복구입니다). sudo su더 이상 작동하지 않습니다. 루트 쉘을 / bin / nologin 으로 설정 하면됩니다 . 이는 많은 루트 에스컬레이션 취약점을 방지하는 좋은 방법입니다. 물론 이것은 위의 글 머리 기호를 올바르게 사용한다고 가정합니다 (그리고 보안 관리자에게 해를 끼치 지 만 특정 관리자에게 모든 권한을 부여 할 수 있습니다).

물론 이러한 것은 보안 모델의 일부일뿐입니다. 예를 들어, 전체 관리 권한을 가진 사용자가없는 경우가 아니면 로그 서버와 syslog를 사용하여 로그를 즉시 발송하지 않는 한 사용자가 로그와 기록을 삭제할 수 있습니다 (아마도 가능할 수 있음). 그런 다음 고양이를 가방에 넣을 방법이 없습니다. 물론 중앙 인증 디렉토리 구조를 사용하면 다시 작동합니다. 하나의 계정을 손상 시키면 로그 서버를 포함하여 조직의 모든 서버에서 손상됩니다 .

요컨대, 보안은 복잡하지만 sudo는 보안 환경을 설계하는 데 유용한 도구이므로 더 많은 사람들이 최대한 활용해야합니다.


7

공격 대상과 비슷한 대상에 대한 sudo원격 액세스 또는 원격 액세스를 허용하는지 여부 SUID root나는 sudo명령을 쉽게 제한하고 나중에 감사해야 할 경우에 필요한 로깅을 가지고 있기 때문에 체인에 유지 합니다. sudo또한 생산에서 훨씬 더 긴 역사를 가지고 있습니다. 다른 일을하면 역사가 적고 불쾌한 놀라움의 변화가 더 커질 것입니다.

더 안전하게하기 위해 할 수있는 다른 일들이 있습니다 :

  • 철저히 ssh
  • jenkins를 포함하여 몇 명의 특정 사용자에 대해서만 재시작 명령을 허용합니다.
  • 모든 내부 IP 또는 젠킨스 및 점프 박스 IP의 특정 사용자에 대한 로그인 만 허용
  • 로그를 원격 상자에 저장하여

실제로, 나는 방금 SSH 작업을 구성했고 실행하고 싶지 않았다 sudo: "sudo : 죄송합니다, sudo를 실행하려면 tty가 있어야합니다"
amphibient

1
당신은 포기해야 할 수도 있습니다 옵션을 선택합니다. 또는 sudo가 unix.stackexchange.com/questions/122616/… 처럼 필요하지 않다고 설득 하십시오.ssh-t
병아리

Jenkins에서 SSH를 호출 할 때 SSH에 옵션을 제공하려면 어떻게합니까?
수륙 양용 비행기

나는 그것에 대해 확실하지 않다. sudo링크가 보여주는 것처럼 조정을 시도 했습니까 ?
병아리

1
원격 호스트 (SSH 대상)의 sudoers를 tty ( Defaults requiretty
comment
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.