/bin/su 파일에서 SUID가 실수로 제거되었습니다.

/bin/su 파일에서 SUID가 실수로 제거되었습니다.

프로덕션 서버입니다 - CentOS 6.1

루트 액세스 권한이 있었던 일부 사용자는 서버에 로그인하여 /bin/su 파일에서 SUID 비트를 제거한 다음 루트로 종료합니다. 이제 루트로 다시 전환할 수 없습니다. 또한 루트의 SSH 액세스는 서버에서 비활성화되어 루트가 시스템에 직접 로그인할 수 없습니다. 루트로 su하거나 루트로 ssh를 실행할 수 없으므로 /bin/su 파일에 suid 비트를 설정할 수 없습니다. (그리고 사용자 간 전환을 위해 su를 사용할 수 없습니다)

무엇이었어야 했습니까?

$ ll /bin/su
-rwsr-xr-x. 1 root root 30092 Mar 10  2011 /bin/su

지금은 어때:

$ ll /bin/su
-rwxr-xr-x. 1 root root 30092 Mar 10  2011 /bin/su

루트로 다시 전환하거나 SUID 비트를 설정하는 방법이 있습니까?

노트:서버는 연중무휴로 사용되며 가동 중지 시간이 약간 어렵기 때문에 네트워크 없는 사용자 모드를 다시 시작하지 않으려고 합니다. 재부팅이 가능하다면 단일 사용자 모드를 사용하여 루트로 로그인하고 이 비트를 재설정하면 됩니다.

창의적인 답변을 자유롭게 부탁드립니다. 테스트 환경에서 귀하의 답변을 테스트해 볼 수 있습니다.

답변1

일부 옵션:

  • sudo -i, 이것이 가장 확실한 선택입니다.
  • sudo -l그런 다음 문제를 해결하는 데 사용할 수 있는 명령을 찾으십시오. 예: crontab, logrotate, executon yum/rpm과 같이 루트에서 실행되는 파일 편집...
  • 콘솔로 이동하여 루트로 연결합니다(이해하면 SSH만 제한됩니다).
  • 그래픽 세션을 엽니다. 일부 배포판에는 sudo에 의존하지 않는 루트 도구가 있습니다. 또한 이들 중 다수에는 업데이트 관리자가 있습니다. 제공된 패키지를 다시 설치할 수도 있습니다.su
  • puppet/chef/ansible/fai와 같은 구성 관리 도구가 있는 경우... 구성을 푸시하세요!
  • 업그레이드할 파일을 편집할 수 있는지 확인하려면 crontab을 확인하세요.
  • 서버가 중앙 인증 시스템(특히 LDAP/nis)에 연결된 경우 높은 권한(그룹 휠 또는 사용자 uid = 0)을 가진 계정을 생성하십시오.
  • 가상 서버인 경우 종료한 다음 파일 시스템을 마운트하고 편집합니다.

몇 가지 유용한 정보:

  • 단일 사용자 모드(red hat) 또는 지정된(Debian 및 rhel/CentOS 7)에서 서버를 다시 시작하고 init=/bin/sh권한을 수정합니다.
  • 서버를 재부팅하고 CD/DVD/USB/NetBoot에서 복구를 사용하거나 설치 및 편집만 하면 됩니다.

그리고 일부는 정말 추악합니다.

  • 시스템을 손상시킬 수 있는 취약점을 찾아보세요!

시스템 관리자가 일을 잘 수행하면 일반 사용자는 이러한 작업을 수행할 수 없습니다(그러나 귀하는 시스템 관리자입니다).

답변2

귀하가 다음을 수행할 수 있는 그룹에 속해 있다고 가정해 보겠습니다 sudo.

sudo -i

액세스 권한 이 부여되고 root수리가 허용됩니다 /bin/su. 사용하는 사용자 비밀번호는 sudo루트 비밀번호가 아니라 -임을 기억하십시오.

답변3

질문은 SSH(또는 이와 동등한 것)가 액세스할 수 있는 유일한 방법임을 의미합니다. 사용자 권한이 있는 프로세스에서 루트 권한을 얻는 유일한 방법은 이나 다른 사이트 로컬 대안을 이용하는 것인 경우가 su많습니다 sudo. 대안이 없으면 일종의 보안 취약점을 나타내기 때문에 운이 좋지 않을 수도 있습니다.

즉, 액세스 권한을 얻기 위해 재부팅하라는 제안은 어떤 형태로든 콘솔 액세스가 가능함을 의미합니다. 일반적으로 루트는 콘솔에 직접 로그인할 수 있으며 가장 먼저 시도하는 것입니다(IPMI 또는 IP KVM을 사용하여 원격으로 로그인할까요?). 그래픽 콘솔과 직렬 포트 모두 시도해 볼 가치가 있습니다.

또 다른 접근 방식은 마운트되었거나 마운트 가능한 외부 파일 시스템을 찾고 사용자가 실행할 수 있도록 정적 setuid su 바이너리를 제공하는 것입니다.

구성 관리 시스템(퍼펫, 셰프 등)이 있는 경우 여전히 실행 중일 수 있으며 바이너리를 수정하거나 업데이트하는 데 사용할 수 있습니다.

실행 중인 시스템이 가상 머신인 경우 호스트 환경에서 어떤 형태로든 액세스할 수 있습니다. (대신 호스트인 경우 VM의 루트 액세스를 활용하여 제어권을 얻을 수 있습니다)

그런 다음 먼저 재부팅하지 않고 시스템에 다시 액세스하는 데 시간이 얼마나 걸리는지 평가해 보세요. 그러다가 시간이 맞다면 어떤 콘텐츠에 접근할 수 있는지 생각해 봐야 한다. 이들 각각을 살펴보고 set-uid 비트를 수정하거나 비교적 임의의 명령을 실행하는 능력을 평가하십시오.

  • 사용자는 시스템의 모든 set-uid 바이너리에 액세스할 수 있습니다.
  • 루트로 실행되는 모든 프로세스(사용 목적 참조)
  • 기본 스토리지 시스템 및 대체 액세스
  • 루트로 실행되는 모든 프로세스(패치되지 않은 로컬 코드 실행 취약점 찾기)
  • 커널 버전(패치되지 않은 코드 실행 취약점 찾기)

어느 시점에서는 실제로 보안 감사로 전환됩니다.

답변4

다음 명령을 사용할 수도 있습니다.

sudo-s

루트 액세스 권한을 부여합니다

관련 정보