프로덕션 서버입니다 - 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
루트 액세스 권한을 부여합니다