루트 비밀번호를 변경할 수없는 루트 액세스?


66

서버에 약간의 문제가 있습니다. 우리는 일부 사용자 sudo가 루트 권한을 가질 수 있기를 원 하지만 사용자가 루트 비밀번호를 변경할 수 없다는 제한이 있습니다. 즉, 다른 사용자가 무엇을 하든지 서버에 로그인하여 루트가 될 수 있다는 보장입니다.

가능합니까?


32
sudo루트 권한이있는 특정 응용 프로그램에 대해서만 권한을 부여 하는 데 사용할 수 있습니다 . 이런 식으로 사용자는 루트 암호를 변경할 수 없습니다
SHW

24
sudo 이러한 사용자에게 필요합니까? 당신이 그들을 믿지 않으면 sudo, 처음에 그들에게 액세스를 제공하지 마십시오 . 또한 root는 암호를 전혀 가지고 있지 않아야하지만 다른 인증 방법을 사용해야합니다. (어떤 사용자는 여전히 protext 할 경우에도, "해킹"할 수있을 것입니다 /etc/passwd)
Anony - 무스

3
그 사용자들은 정확히 무엇을해야합니까?
Olivier Dulac

4
그들은 루트 권한으로 무엇을 할 것인가? 당신이 생각하는 것보다 더 나은 해결책이있을 수 있습니다.
sparticvs

23
이것은 "하나님이 볼더를 크게 만들 수 없습니까?" 유형 질문. 루트 액세스 권한이 있으면 무엇이든 할 수 있으므로 루트 액세스가 적절하게 제공되는 것이 가장 좋습니다. sudo그리고 setuid대부분의 문제를 해결할 수 있습니다.
bsd

답변:


57

우리는 일부 사용자가 예를 들어 sudo루트 가되어야 하고,

자, sudo가 해결하도록 설계된 문제이므로 부분이 충분히 쉽습니다.

그러나 사용자가 루트 비밀번호를 변경할 수 없다는 제한이 있습니다.

같이, 수 SHW는 의견에서 지적, 특정 행동이 특정 사용자가 루트로 수행 할 수 있도록 sudo를 구성합니다. 즉, user1은 할 수 있고 sudo services apache2 restartuser2는 할 수 sudo reboot있지만 다른 시스템 관리자는 user3할 수 sudo -i있습니다. sudo를 설정하는 방법에 대한 사용 방법이 있거나 여기에서 검색하거나 요청할 수 있습니다. 그것은 해결 가능한 문제입니다.

그러나 할 수있는 기능이 부여 된 사용자 sudo -i또는 sudo(쉘에 sudo bash예를 들어는) 모든 작업을 수행 할 수 있습니다. sudo가 셸을 시작할 때 sudo 자체가 그림에서 벗어 났기 때문입니다. 다른 사용자 (대부분 루트)의 보안 컨텍스트를 제공하지만 실행 된 응용 프로그램의 기능에 대해서는 언급하지 않습니다. 해당 응용 프로그램이 시작되면 passwd rootsudo가 할 수있는 일은 없습니다. 이것은 다른 응용 프로그램을 통해서도 수행 될 수 있습니다. 예를 들어, 고급 편집기 중 다수는 셸을 통해 명령을 실행하는 기능을 제공합니다. 셸 은 해당 편집기 프로세스의 유효 uid (즉, 루트)로 실행됩니다.

즉, 다른 사용자가 무엇을 하든지 서버에 로그인하여 루트가 될 수 있다는 보장입니다.

죄송합니다; "루트 액세스 권한이있는 사람이 무엇을 하든지 시스템에 로그인하여 시스템을 사용할 수 있음"을 의미하는 경우 (모든 의도와 목적을 위해) 수행 할 수 없습니다. 빠른 "sudo rm / etc / passwd"또는 "sudo chmod -x / bin / bash"(또는 셸 루트가 사용하는 것)는 어쨌든 거의 호스가 있습니다. "예쁜 호스가 많다"는 의미는 "백업에서 복원해야하고 손가락이 미끄러지는 것보다 더 나쁜 일이 없었기를 바랍니다"라는 의미입니다. 실수로 시스템을 사용할 수 없게 만드는 사고 의 위험을 줄이기 위해 몇 가지 단계를 수행 할 수 있지만 악의로 인해 시스템을 처음부터 다시 빌드해야하거나 최소한 알려진 것까지 매우 심각한 문제를 일으키는 것을 막을 수는 없습니다. 좋은 백업.

시스템에 대한 사용자의 뿌리없는 액세스를 사용자에게 제공함으로써 악의적 인 의도가없고 실수로 엉망이되지 않도록 사용자 (사용자가 실행하도록 선택한 소프트웨어, ls와 같이 평범한 것을 포함하여)를 신뢰합니다. 이것이 루트 액세스의 본질입니다.

예를 들어 sudo를 통한 제한된 루트 액세스는 조금 나아지지만 여전히 공격 경로를 열지 않도록주의해야합니다. 그리고 루트 액세스 권한으로 권한 상승 공격에 대한 가능한 많은 공격 경로가 있습니다.

루트가 수반하는 액세스 수준으로 신뢰할 수없는 경우 sudo 구성을 매우 엄격하게 조정하거나 sudo 등을 통해 루트 액세스 권한을 가진 사용자에게 전혀 액세스 권한을 부여하지 않아야합니다.


3
나는 내 대답이 과대 광고를 얻지 못해 미안합니다 (정확하지는 않습니다!). 귀하의 답변이 훌륭한 점수를 얻었으며, 그것이 받아 들여지기를 바랍니다. +1입니다.
Joseph R.

@JosephR. 간결한 답변이 선호되는 경우가 있습니다.
David Cowden

@DavidCowden 그래, 이것이 여기에있는 것 같다 ...
Joseph R.

1
@JosephR. 걱정하지 마십시오. Stack Exchange 커뮤니티를 항상 예측할 수있는 것은 아니며 이미 많은 찬사를받은 질문이 더 많은 관심을 끄는 경향이 있습니다. upvote에 감사드립니다. :)
CVn

92

이것은 실제로 불가능합니다. 우선, root가 될 수있는 권한을 부여하면 아무것도하지 못하게 할 수있는 방법이 없습니다. 사용 사례에서는 sudo사용자에게 root 권한을 부여하는 동시에 root 권한을 부여 하지 않고 다른 사용자를 제한하는 데 사용해야합니다 .

시나리오에서 supasswd명령 에 대한 액세스를 제한 하고 다른 모든 것에 대한 공개 액세스를 제한해야합니다 . 문제는 사용자가 직접 편집 /etc/shadow(또는 /etc/sudoers그 문제)하여 루트를 납치하기 위해 대체 루트 암호를 삭제 하지 못하게 할 수있는 방법이 없다는 것 입니다. 그리고 이것은 가장 간단한 "공격"시나리오입니다. 하나 또는 두 개의 명령을 제외한 무제한 전력을 가진 Sudoer는 완전한 루트 액세스를 가로 채기 위해 제한 사항을 해결할 수 있습니다.

주석에서 SHW가 제안한 유일한 해결책 은 sudo사용자에게 제한된 명령 세트에 대한 액세스 권한을 부여하는 것입니다.


최신 정보

인증에 Kerberos 티켓을 사용하는 경우이를 수행하는 방법이있을 수 있습니다. 파일 사용법을 설명하는 이 문서를 읽으십시오 .k5login.

관련 부품을 인용합니다.

alice 사용자의 홈 디렉토리에 다음 줄
bob@FOOBAR.ORG
이 포함 된 .k5login 파일이 있다고 가정합니다. 이렇게하면 bob이 bob의 Kerberos 티켓을 사용하여 ssh (1)와 같은 Kerberos 네트워크 응용 프로그램을 사용하여 alice의 계정에 액세스 할 수 있습니다.
...
bob은 자신의 프린시 펄에 대한 Kerberos 티켓을 보유하므로 bob@FOOBAR.ORG사이트 호스트에 대한 루트 액세스 또는 alice의 비밀번호 변경 기능과 같은 alice의 티켓이 필요한 특권이 없습니다.

그래도 오해 할 수도 있습니다. 여전히 설명서를 검토하고 있으며 아직 Kerberos를 사용해 보지 않았습니다.


댓글에 대한 멋진 참조를 어떻게 했습니까? 나는 당신의 대답에 대한 출처를 살펴보고 그것을 둘러 봤습니다. 멋진 비밀 모자!
Joe

@Joe 의견이 게시 된 시간은 실제로 의견 자체에 대한 링크입니다.
Joseph R.

@Joe <tr id="thisistheid"...주석 에서 id ( )를 찾은 다음 (예 : Chrome에서 마우스 오른쪽 단추 클릭 및 Inspect element) 앞에을 추가하여 스레드 링크에 추가합니다 #. 귀하의 경우에는 (ID는 = comment-162798)는 다음과 같습니다 unix.stackexchange.com/questions/105346/...
polym

1
나 같은 놈 필요로 :) 그러나, 당신도 도움이되었다 - 내가 @Michael Kjörling에서 이런 저런를 받아 들여야 경우 답변을 주셔서 감사합니다, 나는 몰랐다, 그게 더 설명이 있기 때문에 자신이 선택한
244an

@ 244an 걱정하지 마십시오. 나는 나 자신도 같은 것을 추천했을 것이다 . :)
Joseph R.

17

실제 관리자가 실수를하더라도 (긴급 관리자를 완전히 신뢰 함) "비상 관리자"액세스 권한을 가지기를 원한다고 가정합니다.

(매우 hackish 임에도 불구하고) 널리 사용되는 접근 방식은 이라는 이름을 가진 두 번째 사용자uid=0toor (루트 뒤로)를 사용하는 것입니다. 암호가 다르며 백업 액세스 역할을 할 수 있습니다. 추가하려면 편집 /etc/passwd하고 라인을 /etc/shadow복사 해야 할 수도 root있습니다.

그것은 모두 안전하지만, 예고없이 비밀번호를 변경하는 "주 관리자"로부터 보호해야하는 경우에는 작동합니다. toor계정 을 제거하여 사용 중지하는 것은 쉽지 않습니다 . 유일한 장점은 별도의 암호를 사용하는 것입니다.

또는 sshlibnss-extrausers, LDAP 등의 대체 인증 메커니즘을 살펴볼 수도 있습니다 .

관리자는 여전히 실수로 망칠 수 있습니다. 예를 들어 방화벽을 차단합니다.

매우 안전한 시스템을 원한다면 유닉스 사용자 (예 : root)도 역할을 맡게되는 SELinux를 사용하는 것이 좋습니다. 관리자에게 루트 액세스 권한을 부여하고 제한된 역할 만 부여 할 수 있습니다 (예 : 아파치 만 관리). 그러나 정책을 올바르게 구성하려면 많은 노력이 필요합니다.


6
이것은 실제로 사용자 toor가 루트 암호를 변경하는 것을 방해하지는 않습니다 . 루트가되는 두 번째 비밀번호 만 제공합니다.
Alexis

2
그런 다음 -1입니다. 관리자가 루트 액세스 권한을 잃은 후에 루트 액세스를 복구 할 수 있도록 백도어 비밀번호를 제안하고 있습니까 ??? 방금 잘못된 것이며, 성가신 사용자 외에도 사용자가 쉽게 비활성화 할 수 있습니다. 백도어를 설정하는 훨씬 더 안정적인 방법이 있습니다.
Alexis

2
@alexis 그것은 질문 의 저자 IMHO가 요청한 것입니다. 이것을 위해 왜 -1을 주어야합니까? toor복구 계정은 수십 년 동안 유닉스에 대한 일반적인 관행이었습니다.
Anony-Mousse

9
실수로 비밀번호를 변경 하는 것을 방지하는 것이 유일한 목표라면 이것이 정답입니다. 악의적 인 것을 방지하는 것이 목표라면 별 도움이되지 않습니다. OP는 목표가 무엇인지 말하지 않았으므로 알 수 없습니다.
밥슨

2
그렇기 때문에 나는 첫 번째 문장에서 "나중에 ... 나머지, 당신은 ... 전적으로 신뢰합니다"라고 말한 이유입니다. 이것은 실제로 "지원 액세스"솔루션 일뿐입니다. 보안 기능이 아닙니다. 추가 루트 ssh 키를 사용하면 해치되지 않고 동일하게 달성됩니다.
Anony-Mousse

11

루트의 본질은 시스템의 제한없는 명령을 갖는 것입니다. SELinux로 조정할 수 있습니다 (누군가 root로 로그온 할 수있는 데모 사이트가 있었지만 액세스 시스템을 통해 그 기능이 무너졌습니다). 요점은 이것이 귀하의 문제에 대한 잘못된 해결책이라는 것입니다.

지금, 당신은 당신의 문제가 무엇인지 말하지 않았지만 , 만약 당신이 루트 암호를 hands는 사용자를 신뢰하지 않는다면, 그들은 루트 비즈니스가 아닙니다. 웹 서버 나 다양한 하드웨어 장치 또는 워프 드라이브 등을 관리해야하는 경우 솔루션을 설정하십시오. 강력한 그룹을 만들고 필요한 모든 액세스 권한을 부여한 다음 그룹에 추가하십시오. 루트 전용 시스템 호출을 실행해야하는 경우 일부 setuid 프로그램을 작성하십시오.

물론 이런 종류의 액세스 권한과 약간의 지식을 가진 사용자는 시스템을 쉽게 해킹 할 수 있지만 최소한 OS 보안 모델을 사용하는 것은 아닙니다.

추신. 암호없이 자신을위한 루트 액세스를 준비하는 방법은 여러 가지가 있습니다. 예를 들어, 당신이 /etc/sudoers(제한없이) 에 있다면, 루트가 되려면 자신의 암호 만 있으면됩니다 sudo bash. 그러나 당신은 단순히 거기에 갈 필요가 없습니다.


그러나 문제는 공격자가 악용을 통해 루트를 얻는 것을 막을 수 없다는 것입니다. SELinux는 심층 방어를 제공합니다.
Timothy Leung

11

적어도 이론적으로는 SELinux를 사용 하여이 작업을 수행 할 수 있습니다. 이를 통해 사용자 또는 프로세스가 수행 할 수있는 것과 허용되지 않는 것에 대해 훨씬 더 정확한 규칙을 설정할 수 있습니다. SELinux를 사용하더라도 사용자가 루트 암호를 변경하는 것은 불가능하지만 필요한 모든 작업을 수행 할 수는 없습니다.

실제로 루트 암호를 변경할 수없는 사용자가 실제로 할 수있는 작업에 따라 다릅니다. 아마도 그것이 무엇인지 해결하고 sudo를 사용하여 해당 권한을 부여하는 것이 더 쉽고 안전 할 것입니다.


8
SELinux를 사용 하여이 작업을 수행하는 것은 이론상 가능할 수도 있지만 확신 할 수는 없지만 실제 규칙을 보여주지 않고는 아무도 도움이되지 않는다고 주장합니다.
Gilles

실제로 @Gilles 는 이것이 SELinux를 위해 설계된 것입니다. SELinux는 표준 POSIX 권한 외에도 필요한 권한 계층입니다 . 올바르게 구성된 SELinux 시스템에서 실제 액세스 권한은 보안 컨텍스트 및 오브젝트 레이블링에 의해 결정되므로 루트 액세스는 의미가 없습니다.
tylerl

2
어떻게해야하는지 알고 있다면 신화 나 현실에
Gilles

이론적으로는 SELinux로 여전히 가능합니다. 그러나 모든 SELinux 관련 구성 파일을 "일반"파일 시스템 ( root사용자가 완전히 액세스 할 수있는 파일 시스템)에서 확실하게 분리하려면 이와 같은 설정이 더 복잡해야합니다 . 결국, (또는 SELinux는 제외) 등의 분리를위한 "쉬운"방법에 의해 언급 한 바와 같이, Kerberos 등이 뭔가 함께 갈 것 조셉 R.
ILMostro_7

7

아마도 사용자에게 가상 머신 또는 LXC 컨테이너에 대한 루트 액세스 권한을 부여하는 것을 고려해야합니다. 그러면 호스트에 로그인하거나 관리 작업을 수행하지 못하게하면서 시스템에 대한 전체 루트 액세스 권한을 갖게됩니다.


이것은 많은 옵션 IMHO보다 안전합니다.
Geek

5

나는 그것이 실제로 실현 가능하다는 것을 모르지만 여기에 하나의 더러운 핵이 있습니다.

  1. /etc/passwd실제를 호출하기 전에 파일을 다른 위치로 복사하는 래퍼 스크립트 / 프로그램을 작성하십시오.sudo
  2. 일반 사용자가 사용하도록 허용 sudo
  3. 작업을 마치거나 sudo에서 나왔을 때 /etc/passwd파일을 복원 하십시오.

나는 이것을 달성하기 위해 고려해야 할 많은 마이너스가 있다는 것을 알고 있습니다. 결국, 그것은 더러운 해킹입니다


3
악의적 인 사용자가 항상이 스크립트를 읽고 백업 사본을 압축 할 가능성이 있습니다.
Joseph R.

이것은 또한 vipw친구들이 이미 하는 일과 거의 같습니다 .
CVn

프로그램이고 루트 액세스 권한 만있는 것으로 간주
SHW

1
root이후에 "기타 위치"를 편집 할 수 있습니다 sudo.
Anony-Mousse

5
잠재적으로 악의적 인 사용자에게 루트 액세스 권한을 부여하는 이유는 무엇입니까 ??? 루트로서 sudo 및 / 또는 래퍼를 거치지 않는 백도어를 설치하는 것은 사소한 일입니다.
alexis

5

sudo루트를 부여하기위한 것이며 그 이후에는 보호가없는 진술 은 명백히 거짓입니다.

visudosudoers 파일을 수정하는 데 사용 합니다. 예제 라인은 다음과 같습니다.

redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command
  • redsandro권한을 부여한 사용자 이름입니다. 를 넣어 %이 그룹에 적용하기 위해 전면에.
  • ALL이 규칙의 이름입니다. Sudoers는 전역 권한을 부여하는 것 이상을 할 수 있습니다. 그것은 그것이 복잡 해지는 곳입니다.
  • = 설명이 필요 없습니다
  • ALL:ALL(who_to_run_it_as : what_group_to_run_it_as)로 읽습니다. 이런 식으로 특정 사용자 나 그룹의 상황에서만 명령을 실행할 수 있습니다.
  • NOPASSWD: 비밀번호 프롬프트를 끄도록 지시합니다.
  • /path/to/command 특정 명령 path_to_commmand, another_command를 지정할 수 있습니다

기억해야 할 것은 sudo가정용 사용자가 대부분 루트 권한으로 에스컬레이션하는 데 사용되지만보다 세부적인 방식으로 특정 명령에 대한 액세스를 제어하는 ​​데 사용될 수 있다는 것입니다.

참고 문헌


이 답변은 제한된 루트 액세스를 위해 sudo를 설정하는 방법을 설명하지만 답변이 그렇게 말하고 어디로 가야하는지 훨씬 더 나을 것입니다.
CVn

@ MichaelKjörling 완료
RobotHumans

3
"sudo는 단지 루트를 부여하기위한 것이며 그 이후에는 보호가 없다고하는 진술은 명백히 거짓입니다." sudo vi시스템 구성 파일을 편집 할 수 있기를 원하는 사용자 에게 액세스 권한을 부여한다고 가정 해 보겠습니다 . 그런 다음 해당 사용자 :!/bin/bashsudo vi세션 내에서 수행합니다 . sudo가 sudo를 통해 사용자가 실행할 수있는 명령을 제한하는 기능은 이러한 상황에서 시스템을 보호하는 데 어떻게 도움이됩니까? (아무도 sudo를 전혀 또는 전혀 sudo -i접근 하는 것보다 더 엄격하게 구성 할 수 없다고 말한 사람은 없다 .)
CVn

6
접근 방식의 한계를 이해하는 것은 작업 수행 방법을 아는 것만큼이나 중요합니다.
CVn

1
@ MichaelKjörling, 나는 이것이 단지 예라고 생각합니다. 그러나 사용자가 시스템 구성 파일을 편집 할 수있게하는 올바른 방법은 실행하도록하는 것 sudoedit입니다. 어떤 파일을 사용할 수 있는지 구체적으로 식별 할 수 있습니다 sudoedit. 에 man sudoers있습니다.
Matthew Flaschen

3

(우분투는 모르지만 Fedora / Red-Hat과 비슷해야합니다.)
루트 암호를 변경하는 액세스를 제한하는 것이 sudo를 사용하거나 SElinux를 사용하여 액세스를 제한하지 않는 전체 루트 액세스를 제공하지 않는 것만 상상할 수 있습니다 암호 파일에 ...하지만 루트가 일반적으로 무제한 액세스 권한을 가지고 SElinux를 업데이트하거나 암호 파일의 레이블을 다시 지정하거나 사전에 준비된 일부 프로그램을 실행하여 암호를 변경하므로 많은 액세스 권한을 가지고 신뢰하지 않습니다.

비밀번호를 변경하지 않을 정도로 신뢰하지 않으면 루트 액세스 권한을 부여해서는 안됩니다. 그렇지 않으면 당신이 사고를 피하려고 노력하는 것 같아요.

루트에 대한 액세스 만 보호하려는 경우 루트 암호를 복원 할 수있는 프로그램을 설정하십시오. 따라서 변경된 경우에도 최소한의 액세스로 복원 할 수 있습니다. (스도는 자체적으로 잘합니다)


3

요구 사항은 다음과 같습니다

우리는 서버에 약간의 문제가있다 [...], 즉 우리가 그 서버에 로그인하여 다른 사용자가 무엇을 하든지 루트가 될 수 있다는 보장이다.

귀하의 질문에 따르면 귀하는 시스템을 파괴하려는 임의의 악의적 인 사용자에 직면하지 않고 대신에 장난을 일으킬 수있는 반 신뢰 사용자를 보유하고있는 것 같습니다 (학생?). 내 제안은 악의적 인 사용자의 공격이 아니라 그러한 상황을 해결합니다.

  1. 가상 환경 내에서 서버를 실행하십시오. 서버의 파일 시스템을 마운트하고 변경된 파일을 알려진 정상 버전으로 바꿀 수 있습니다. 예상되는 손상에 따라 모든 중요 디렉토리 (/ bin, / sbin, / etc, / usr, / var 등)의 스냅 샷을 작성하고 스냅 샷을 확장하여 손상된 파일을 덮어 쓰면서 나머지 파일을 남겨 둘 수 있습니다. 그대로 시스템.

  2. DVD-R과 같이 시스템을 읽기 전용으로 실행하십시오. 다음에 다시 부팅 할 때까지 시스템의 대부분을 정적 상태로 유지할 수 있다면 이것이 좋은 옵션입니다. 가상 환경에서 읽기 전용 백업 저장소를 사용하거나 네트워크를 통해 기본 시스템을로드하여 새 DVD-R을 작성하는 것보다 재부팅 사이의 변경을 훨씬 쉽게 할 수 있습니다.

  3. 커널 모듈. 커널의 Linux 보안 모듈 (LSM)은 보안 모듈을 만들기위한 기초를 제공합니다. LSM은 SELinux에서 사용되지만 Smack, TOMOYO 및 AppArmor와 같이 잘 알려지지 않은 여러 간단한 시스템에서도 사용됩니다. 이 기사 에는 옵션에 대한 좋은 개요가 있습니다. / etc / passwd, / etc / shadow 또는 루트에 의해 원하는 다른 파일에 대한 쓰기 액세스를 방지하기 위해 기본적으로 구성 할 수있는 가능성 중 하나입니다.

  4. # 1과 같은 개념이지만 서버가 가상 환경에 있지 않을 때. 서버 CD를 라이브 CD와 같은 읽기 전용 OS에로드 할 수 있습니다.이 CD는 서버의 파일 시스템을 자동으로 마운트하고 각 부팅의 기본 시스템을 양호한 복사본으로 덮어 씁니다. 그러면 읽기 전용 OS가 기본 OS로 부팅됩니다.

  5. 다시 말하지만, 이들이 상위 관리자 (교사 / 보스)에게 책임이있는 반 신뢰 사용자라고 가정하면 가장 좋은 대답은 Linux Audit 일 수 있습니다 . 이런 식으로 모든 보안 관련 조치 및 조치를 알 수 있습니다 (모든 사용자가 루트 계정을 공유하더라도 사용자가 먼저 사용자 계정에서 sudo를 수행 했으므로 누가 조치를 취했는지 알 수 있습니다). 실제로 감사 로그를 실시간으로 구문 분석하고 손상된 파일을 교체 할 수도 있습니다. / etc / shadow를 덮어 쓰셨습니까? 문제 없습니다. 모니터링 서버를 즉시 알려진 올바른 버전으로 바꾸십시오.

필요에 따라 조사 할 다른 기술 :


2

다른 답변을 보완하기 위해 시나리오는 루트에 대한 제어력 상실을 드문 상황으로 인식하고 서버 재부팅이 허용되는 것으로 가정합니다. (결국 컴퓨터가 손상되었다고 생각되면 오프라인으로 가져 가고 싶을 것입니다.)

이것의 가장 큰 장점은 구성 할 것이 없다는 것입니다. 귀하의 질문은 " 루트 암호를 잊어 버렸습니다. 어떻게 다시 들어 오나요? "가됩니다. 그리고 그에 대한 대답은 컴퓨터를 다시 시작할 때 재부팅하고 단일 사용자 모드를 선택하는 것입니다. 암호를 몰라도 루트 셸이 제공됩니다. 이때 새 비밀번호를 설정할 수 있습니다. (그리고 피해를 입히고 수리하십시오 ...)


2
으로 번호 마이클이 너무 적절하게 언급 , 악의적 인 사용자가 반드시 단순히 바이너리를 엉망으로 암호를 납치하지 않고 루트 액세스를 방지 할 수 있습니다. init=...접근 방식 조차도 관련 바이너리에서 실행 권한을 제거하지 못할 수 있습니다. 이 경우 더 나은 해결책은 LiveCD를 통해 루트 파일 시스템을 마운트하고 손상을 수정하는 것입니다. 그런 다음 시스템이 손상되었다고 생각되면 백업에서 복원하는 것이 좋습니다.
Joseph R.

동의 @JosephR; 손상을 발견하고 수정하는 것은 복잡하며 다시 설치하기 만하면됩니다. 그러나 OP의 관심사는 누군가가 실수로 그들을 잠그는 것에 관한 것이라고 생각합니다. 고의로 직장이나 학교 상황에서 해킹하는 것이 약간 자살 적입니다. ;-)
대런 쿡

1
반드시 그런 것은 아닙니다. 부주의하고 우 둔한 sysadmin과 결합 된 진정한 악의적 인 사용자는 탐지되지 않은 권한을 에스컬레이션 할 수 있습니다. 나는 OP의 원래 의도가 악의적 인 의도를 막기보다는 무고한 실수를 피할 것이라는 데 동의하지만, 그 질문에 "보안"이라는 태그가 붙었고 우리는 방금 그 문제를
.

2

당신이 VM에 서버를 (예 : 복제 할 경우 버추얼 박스 ), 당신은 사람들에게 자유롭게 루트 액세스 권한을 부여 여전히 당신은 항상 게스트 운영 체제의 파티션 (들)에 직접 액세스 할 수 있습니다 보장, 따라서 최종적인 제어를 유지할 수 /etc/passwd및 호스트 시스템에 루트가 있기 때문입니다.

물론 완벽한 루트 액세스를 제공하는 것이 여전히 올바른 해결책이 아닐 수 있습니다. 데이터 보안이 전혀 문제가되거나 책임이있는 경우 루트 액세스 권한을 부여 할 수 없습니다.


2

요구 사항은 기술적으로 불가능합니다. 이미 웅변 적으로 언급했듯이 sudo사용자에게 무제한 또는 더 제한된 권한을 부여 하면 해당 사용자 를 신뢰할 수 있습니다. 악의적 인 의도와 충분한 기술적 능력과 인내심을 가진 사람은 제자리에 놓인 모든 장애물을 통과 할 수 있습니다.

그러나 사용자가 악한 의도를하지하는 믿을 수있는 가정, 당신은 변화 암호에 대한 제한 할 수 의 문제가 정책을 . passwd"루트 비밀번호를 변경하지 마십시오"라는 프로그램을 위한 래퍼를 만들 수 있습니다 . 이것은 문제의 근원이 루트 비밀번호를 변경하는 사용자가 오해로 인해 비밀번호를 사용하고 있다고 가정합니다 (예를 들어, 자신의 비밀번호를 변경 한 것으로 생각하는 경우 sudo bash).

특별 (희귀 한) 상황에서, 경우에 완전한 신뢰 불가능 하고 휴식 할 수 없습니다 sudo당신이 수립하는 것이 좋습니다, 적절한하지만 합리적으로 안전 덩어리에 대한 액세스를 조직 제재 암호 변경에 대해서 (또는 시스템 변조의 다른 지정 양식), 배열 중요한 정책을 모니터링 하여 설정된 정책을 회피하기가 쉽지 않고 사용 규칙 및 모니터링에 대해 공개적이고 투명하게합니다.

모니터링 및 검색 측면은 그 길을 걸을 때 다른 질문으로 인해 어려운 기술적 문제입니다. 우리에게 필요한 것 같습니다

  1. 사용자가 아이디를 루트로 변경하는시기를 감지하고 생성 된 프로세스를 추적합니다.
  2. 그 때부터 프로세스 작성을 로그하여 각 프로세스를 담당하는 원래 사용자가 누구인지 확인하고 반 신뢰할 수있는 사용자가 로그를 보낼 수있는 원격 호스트를 사용하십시오.
  3. 어떤 종류의 시스템 추적을 사용하여 발생하는 상황을 기록하고 나중에 정책 위반의 원인을 발견 할 수 있습니다.

최소한 쓰기, 프로세스 생성 exec()및 네트워킹 변경 시도를 위해 안전한 파일 이외의 파일 열기를 기록해야합니다 .

수정 된 libc 또는 훨씬 더 나은 시스템 호출 추적으로 구현을 수행 할 수 있습니다 .

물론 이러한 추적 및 로깅을 100 % 올바르게 수행하는 것은 불가능하며 구현하기가 쉽지 않으며 작동하기 위해 추가 리소스가 필요합니다. 이것은 암호 변경이나 다른 환영받지 않는 시스템 변조를 막을 수 는 없지만 유죄 사용자를 찾거나 적어도 모니터링이 있다는 착각을 일으키고 악의가있는 사용자에게는 초대 하는 환상을 만들 수 있습니다. 배치 된 기술적 조치의 근본적인 무익함을보고있는 일부 문제를 사랑하는 해커들은 도전을 받아들이고 시스템의 재미를 위해 시스템을 우회하려고 시도 할 수 있습니다.


1

독창적 인 공식 질문은 쓸모가 없습니다. 주요 목표는 "여전히 로그인을 유지하는 것"이므로 일부 비상 입력에 대해 말하면 다른 사람에게 루트 액세스 권한이 부여 된 경우에도 계속 작동합니다. 그것을 명시 적으로 언급 한 Anony-Mousse에게 건배.

문제는 다음과 같습니다. 소유자가 상자에 물리적으로 액세스 할 수있는 경우 시스템에 대한 논리적 액세스를 쉽게 복구 할 수 있습니다 (아직 활성 상태 인 경우). 그렇지 않은 경우-루트 암호를 유지해도 sshd 작동 중지 또는 잘못된 네트워크 설정에서 벗어날 수 없으므로 시스템에 여전히 액세스 할 수 없습니다.

관리 권한을 가진 사람이 시스템을 손상시키지 못하게하는 방법에 대한 주제는 SE 질문 형식에 맞지 않을 정도로 광범위합니다.

원격 비상 진입 솔루션에 대해 말하면 가장 좋은 방법은 IPMI입니다 (사용 가능한 경우). 시스템 소유자는 언제든지 가상 드라이브를 연결하고 부팅하여 시스템 복구를 진행할 수 있습니다.

IPMI를 사용할 수없는 경우 위에서 이미 제안한 것처럼 적절한 가상화 기술을 해결할 수 있습니다.


0

/etc/sudoers파일 에서 sudo에 대한 액세스를 제한 할 수 있습니다

/ etc / sudoers의 구문을 완전히 설명하기 위해 샘플 규칙을 사용하고 각 열을 분류합니다.

jorge  ALL=(root) /usr/bin/find, /bin/rm

첫 번째 열은이 sudo 규칙이 적용되는 사용자 또는 그룹을 정의합니다. 이 경우 사용자 jorge입니다. 이 열의 단어 앞에 % 기호가 있으면 시스템은 동일한 이름을 가진 사용자와 그룹을 가질 수 있으므로이 값을 사용자 대신 그룹으로 지정합니다.

두 번째 값 (ALL)은이 sudo 규칙이 적용되는 호스트를 정의합니다. 이 열은 여러 시스템에 sudo 환경을 배포 할 때 가장 유용합니다. 데스크탑 우분투 시스템 또는 여러 시스템에 sudo 역할을 배포 할 계획이없는 시스템의 경우이 값을 ALL로 설정하면 모든 호스트와 일치하는 와일드 카드를 자유롭게 사용할 수 있습니다.

세 번째 값은 괄호 안에 설정되며 첫 번째 열의 사용자가 명령을 실행할 수있는 사용자를 정의합니다. 이 값은 root로 설정됩니다. 즉, jorge는 마지막 열에 지정된 명령을 루트 사용자로 실행할 수 있습니다. 이 값을 ALL 와일드 카드로 설정할 수도 있습니다.이를 통해 jorge는 시스템의 모든 사용자로서 명령을 실행할 수 있습니다.

마지막 값 (/ usr / bin / find, / bin / rm)은 첫 번째 열의 사용자가 세 번째 열의 사용자로 실행할 수있는 쉼표로 구분 된 명령 목록입니다. 이 경우, jorge이 find와 rm을 루트로 실행할 수 있습니다. 이 값을 ALL 와일드 카드로 설정하면 jorge이 시스템의 모든 명령을 루트로 실행할 수 있습니다.

이를 염두에두고 쉼표로 구분 된 X 명령을 허용 할 수 있으며 이에 추가하지 않는 한 passwd괜찮습니다.


-1

1/2 루트는 없습니다 :) 일단 루트 권한을 부여하면 원하는대로 할 수 있습니다. 또는 sudo를 사용하여 제한된 bash 쉘을 실행하거나 루트 권한없이 rbash를 실행할 수 있습니다.

서버에 루트로 로그인하는 안전 장치 메커니즘을 원한다면 다른 사용자를 uid=0작성하거나 간단한 크론을 작성하여 루트 암호를 주기적으로 재설정하십시오.


제한된 강타에서 벗어나는 것은 쉽습니다.이 Sans 블로그를보십시오
Franklin Piat

-1

sudo를 사용하지 말고 휠 그룹을 추가하십시오. sudo를 사용하면 사용자가 루트 인 것처럼 실행할 수 있으므로 실행과 다르지 않습니다.

su-

뿌리가 되려면 루트 uid = 0; 휠 uid = 10. 사람들은 이름을 사용하지만 OS는 uid를 사용합니다. 휠 그룹의 멤버가 특정 명령을 실행할 수 없습니다. 휠을 사용하는 경우 루트를 휠 그룹 멤버로 추가하는 실수를하지 마십시오. 휠이 무엇인지 모르는 경우 Red Hat 설명서를 참조하십시오.

다른 옵션은 비밀번호 대신 ssh 키를 사용하는 것입니다. sudo를 사용하는 사람들이 공개 키를 ~ / .ssh / authorizedkeys 파일에 추가하지 않는다고 가정하면 루트 암호가 효과적으로 무시되기 때문에 루트 암호 변경에 대한 우려가 있습니다.

자신의 공개 키를 추가하지 않기 위해 이러한 사용자에게 신뢰를 확장하려면 확장 파일 속성을 사용하고 변경 불가능한 비트를 사용하십시오. ~ / .ssh / authorizedkeys 파일을 작성한 후 / etc / ssh / sshd_config 및 / etc / ssh / ssh_config를 원하는대로 구성한 후 불변 비트를 설정하십시오. 물론, 그것도 망칠 방법이 있습니다. 아무것도 완벽하지 않습니다.

모든 시스템에서 내부자가 가장 위험합니다. 쇼를 진행하는 사람은 더미의 맨 위에 있습니다. 관련 생각은 계약과 관련이 있습니다. 변호사는 "계약을해야하는 사람과 거래하지 마십시오"라고 말합니다. 상식은 "계약없이 사업을하지 마십시오"라고 말합니다. 업무를 수행 할만큼 신뢰할 수있는 사람을 찾으면 서로의 필요에 따라 계약서를 작성하십시오.

광산을 포함하여 제출 된 모든 답변은 물리적 액세스를 해결하지 못합니다. 누구든지 통제 할 수 있습니다. 그렇지 않은 경우 누군가가 로그인을 막을 수있는 방법을 찾거나 사용자가 로그인 한 후에도 로그인 할 수있는 방법을 찾은 경우 물리적으로 머신에 액세스하는 사람을 확보 할 수있는 방법이있을 것입니다 그런 일이 일어나지 않도록 노력했습니다. 물론, 당신이 불편한 것에 관심이 없다면, 어쨌든 부부를 구현하는 것이 어쨌든 고려되어야하지만 물리적 접근 권한이 있다면 이러한 것들이 필요하지 않을 수도 있습니다.

존 크라우트


sudo이다 상당히 다릅니다 su -. 이것은 예를 들어 SHW , Joseph R. , 나 자신 , hbdgaf에 의해 반복적으로 지적되었으며 주석 필드는 포함하기에는 너무 짧습니다.
CVn

모두 사실이지만 관련이 없습니다. 루트가 될 수있는 대체 방법과 루트 액세스 권한을 부여 할 위험에 대해 논의하고 있지만 "루트 암호를 변경할 수없는 루트 액세스"와 관련이있는 것은 없습니다.
Gilles

참된. 문제는 논리적 옥시 모론입니다. 설치가 중단되지 않으면 존재하지 않습니다. 사용자가 비밀번호를 변경할 수 없지만 루트 액세스 권한이있는 사용자 로그인 / 계정은 무엇입니까? 따라서 제시된 제안은 질문자가 의미 한 바에 적용됩니다. 그들이 질문을 쓴 방식이 아닙니다. 모든 액세스 제어 방법에는 고유 한 위험이 있습니다.
John Crout

-3

한 가지 방법은 /etc쓰기 가능하지 않도록하는 것 입니다. sudoer주변에 있을 수있는 한 아무도 .

네트워크를 통해 마운트하고 다른 쪽에서 장치를 쓸 수 없는지 확인하면됩니다.

쓰기 권한이없는 로컬 장치를 사용하면됩니다. ( write blocker하드웨어 조회 )

중요한 부분은 제한이 해당 시스템의 루트 개념 외부에 적용되어야한다는 것입니다. 창의적인 해커는 자신이 제어 할 수있는 환경 내에서 사용자가 놓은 모든 장애물을 피할 수 있습니다. 따라서 root가 암호를 변경할 수 있다면 sudoer.

사용자는 또한 읽기 전용에 장착해야 로그인 능력을 망치지 수 있다는 확신합니다 /bin/sbin.

그리고 네트워크 연결을 주기적으로 복원하는 스크립트가 있어야합니다.

(보조 사항으로 : sudoer에 매우 제한된 명령 세트 만 허용하고 각 명령마다 명령에서 벗어날 수없고 교체 할 수없는 것을 보장하는 경우 /etc쓰기 가능 상태에서 명령을 방지 할 수 있습니다 .)


/ etc 읽기 전용 마운트는 가능하지만 (예를 들어 initrd의 부트 스크립트에서 피벗 루트 중에주의해야 할 경우) 다소 취약한 설정의 위험이 있습니다. 또한 루트 액세스 권한이있는 사용자가 수행 할 수있는 많은 작업이 있습니다. 이로 인해 다른 사용자가 / etc에서 수정하지 않는 루트 권한을 획득 할 수 없게됩니다.
CVn

@ MichaelKjörling 설치가 취약하지 않기 때문에 자주 사용합니다 (읽기 전용 로컬 마운트로).
Angelo Fuchs

@ MichaelKjörling 나는 당신이 여전히 로그인 할 수 있도록하기 위해 읽기 전용으로하고 싶은 다른 요소를 추가했습니다. 유일한 방법은 "다른 사용자가 무엇을 하든지 서버에 로그인하여 루트가 될 수 있다는 보장입니다."
Angelo Fuchs

나는 그것을 시도해야 할 필요성을 결코 보지 못했다는 것을 인정할 것이지만, 내가 위험하다는 것을 분명히 알 수있는 한 가지는 init가 / etc / inittab을 발 아래에서 교체하는 방법입니다. 또는 초기 및 재 장착 후 / etc / fstab이 다른 경우 시스템이 수행 할 작업. 그리고 / etc / mtab이 있습니다. 다른 사용자는 / etc / shadow 및 / etc / passwd에 쓰는 자체 암호를 변경하려고 할 수 있습니다. / etc 읽기 전용 마운트는 여전히 부분적인 해결책 일뿐입니다. 솔루션의 일부가 될 수는 없지만 OP의 상황에서 취해야 할 첫 번째 단계는 아닙니다.
CVn

1
예. 이렇게하면 위험하며 잘못 수행하면 심각한 문제가 발생합니다. 여전히 루트가 될 수있는 사용자에 대한 OP 요청을 해결할 수있는 유일한 방법을 알 수 있습니다.
Angelo Fuchs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.