루트만이 죽일 수 있는 프로세스를 루트가 시작할 수 있습니까?

루트만이 죽일 수 있는 프로세스를 루트가 시작할 수 있습니까?

백그라운드에서 프로세스를 시작하거나 서비스로 만드는 것은 쉽습니다 systemd.

그러나 Linux 시스템에서 활동을 모니터링하는 프로세스를 시작하려고 하면 공격 대상이 됩니다. 사용자가 뭔가 나쁜 일을 하려는 경우에는 단순히 또는 를 실행하여 해당 프로세스를 먼저 종료합니다. 단순히 sudoers 또는 사용자일지라도 .wheelkillsystemctl stop

죽일 수만 있는 프로세스를 시행하는 방법이 있습니까 root?


여러분, 서비스조차 중단될 수 있다고 생각하려면 rsyslogLinux가 실제로 얼마나 취약한지 인정해야 합니다. 마치 조종사가 블랙박스를 끌 수 있는 것과 같습니다. 이런 일을 허용하는 항공사가 있나요? 아니면 조종사에게 비행기를 구하기 위해 할 수 있는 모든 일을 방해하는 허용 목록을 제공하는 사람이 있습니까? 물론 조종사가 비행기를 추락시킬 수도 있지만 블랙박스가 이를 기록합니다.

금지 목록에 대한 나의 제안은 당신을 놀라게 할지라도 보안 관점에서 합법적입니다. 그러니 문제를 제기한 사람을 비난하려고 하지 마세요.

답변1

무제한 sudo/wheel 권한을 갖고 있는 사람은 누구나 수행한 작업을 실행 취소할 수 있습니다. 예를 들어 를 사용하여 프로세스를 직접 종료할 가능성을 제거하여 이를 달성하더라도 sudo kill다른 sudoed 명령을 사용하여 이를 피할 수 있거나 관리에서 자신을 잠글 수도 있습니다.

왜 신뢰할 수 없는 사용자가 애초에 무제한 sudo 권한을 갖고 있는지 스스로에게 물어보세요. 그렇게해서는 안됩니다. 당신이 완전히 신뢰하는 사람들에게만 그러한 특권을 부여하십시오. 여전히 실행해야 하는 일부 권한 있는 명령이 있는 경우 해당 명령에 대해서만 sudo를 활성화합니다.

+netmgr /usr/sbin/ifup, /usr/sbin/ifdown

( visudo -f /etc/sudoers.d/netmgr이것을 sudoers 추가 기능 파일에 넣는 데 사용합니다).

이렇게 하면 사용자가 sudo /usr/sbin/ifup및 만 실행 sudo /usr/sbin/ifdown하고 다른 sudo 명령은 실행할 수 없도록 허용할 수 있습니다. 다른 많은 예, 지침 및 보안 고려 사항이 에 나와 있습니다 man sudoers. 읽어!

감사는 일반적으로 다른 방식으로 수행됩니다. 특히, 당신은 설정또 다른시스템에서 원격 스테이션의 로그를 허용하도록 syslog를 구성합니다. 문제의 머신에서 로컬로 저장하는 것 외에도 모든 로그를 로깅 머신으로 보내도록 로깅을 설정했습니다. 누군가가 이 로그 전송을 비활성화하더라도 자체적으로 비활성화하는 작업이 기록되므로 최소한 범인이 누구인지 알 수 있습니다.

답변2

누군가에게 권한을 부여하고 그 권한을 사용하지 못하도록 막을 수는 없습니다. 당신은 그들이 갖기를 원하는 것만 포함하도록 당신이 그들에게 주는 힘을 좁게 집중해야 합니다.

댓글에서 다음과 같이 말씀하셨습니다.

그들이 사용하도록 허용해야 kill하거나 systemctl stop작업을 수행하는 데 이러한 권한이 필요한 일부 응용 프로그램이 있기 때문입니다.

그런 뜻은 아니죠사용자해당 명령에 액세스해야 합니다.애플리케이션. 사용자는 실행할 수 있는 권한이 제한되어 sudo ./someprogram있으며 해당 프로그램이 루트로 실행되면 kill필요에 따라 등을 사용할 수 있습니다. 하지만 사용자는 해당 내부 명령에 직접 액세스할 수 없습니다.

기본적으로 사용자는 다음에 대한 액세스가 필요하지 않습니다.명령, 다음 항목에 액세스해야 합니다.기능성. 너무 위험한 경우 kill액세스를 차단하고 동일한 결과를 얻을 수 있는 보다 안전한 다른 방법을 제공하십시오. 아마도 특정 프로세스를 종료하라는 요청을 거부하는 것처럼 safekill작동하는 작은 유틸리티를 만들 수도 있습니다 kill. 사용자에게 sudo 액세스 권한을 부여 safekill하되 실제 kill. 사용자가 동일한 작업을 수행하기 위해 항상 이러한 명령을 사용하는 경우 전체 프로세스를 작은 프로그램에 캡슐화하고 수동으로 수행하는 대신 이를 사용하도록 합니다(예: sudo restart_webservers다양한 서버 프로세스를 모두 개별적으로 종료하고 다시 시작하는 대신 실행 ). . 사용자는 여전히 필요한 기능에 액세스할 수 있지만 위험한 무기를 직접 사용할 수는 없습니다.

특정 설정에 따라 사용할 수 있는 또 다른 보다 극단적인 적용 메커니즘이 있습니다. 일부 프로세서에는감시 타이머사용 가능. 워치독을 시작하고 몇 초마다 재설정하도록 활동 모니터링 프로그램을 수정하십시오. 누군가 모니터를 종료하면 감시 타이머가 만료되고 시스템이 자체적으로 재부팅되어 시작 시 모니터 프로그램이 다시 시작됩니다. 이렇게 하면 모니터가 비활성화되는 것을 엄격히 방지할 수는 없지만 비활성화한 후에는 누구도 의미 있는 작업을 수행할 수 없습니다. 이는 또한 시스템 로그에 멋진 큰 위험 신호를 생성합니다. 워치독이 있는 대부분의 시스템은 워치독에 의해 특정 재부팅이 트리거된 시기를 보고합니다. 사용자가 셸에 로그인한 동안 발생하는 감시 트리거 재부팅은 다음과 같이 표시되어야 합니다.매우의심스러운.

답변3

여기에 리눅스 멍청한 놈이 있습니다. 이 사람들이 하려는 일만 수행하는 프로그램이나 스크립트를 작성하고 루트 소유자로 만들고 setuid 비트를 추가하는 것을 고려해 볼 수 있습니까? 물론 한 가지 큰 문제는 다른 사람이 이러한 명령을 실행하는 것을 원하지 않을 수도 있다는 것입니다. 원래 사용자 정보를 얻을 수 있는지 잘 모르겠습니다. 물론 setuid/setgid에는 항상 특별한 주의가 필요합니다.

답변4

나는 A Start를 생각해 냈습니다!

root다음과 같이 사용자에게 DEFAULT SHELL을 설정할 수 있습니다.

useradd [someuser] -s [a certain executable]

그런 다음 특정 실행 파일 = 다음과 같은 검열 스크립트인 경우:

  1. 특정 명령이 실행되는 것을 자동으로 검열합니다. 좋아요 stop& rsyslog결합.

  2. 이 쉘을 탈출하고 원래 쉘이라도 다른 쉘을 사용하는 명령을 금지합니다.bash

  3. root사용자가 위에서 언급한 @ user253751과 같은 역할을 얻지 못하도록 명령을 금지합니다 .

  4. 나머지 명령을 다음으로 전달합니다./bin/bash

r+x그런 다음 모든 사용자에 대해 설정하면 됩니다 .

이 답변에 따라 어떤 제안이라도 감사하겠습니다. 특히 2,3의 경우에는 다양한 수단이 있는 것 같습니다.


Bash는 설정을 먼저 로드 /etc/profile합니다 /etc/bashrc. 나는 후자가 변수를 다루는 것을 발견했습니다 PROMPT_COMMAND. 검열 스크립트에 추가하기 위해 마지막 줄에서 이를 하이재킹할 수 있지만 일부 시스템에서는 이를 다시 변경할 수 있는 루트 권한이 없기 때문에 일부 시스템에는 면제 사용자 이름이 필요합니다.

위의 4+1을 만족하는 완전한 검열은 적법한 답변으로 표시됩니다.

나는 결코 "포기해야 한다"는 대답을 정당한 것으로 표시하지 않을 것입니다.

관련 질문은 다음과 같습니다.

사용자의 bash 명령을 어떻게 기록합니까?

쉘 명령을 syslog에 기록하도록 bash를 어떻게 만들 수 있습니까?

bash_profile 또는 bashrc를 실행하지 않고 로그인

관련 정보