사용자 허가 없이 사용자로 프로그램을 실행하시겠습니까?

사용자 허가 없이 사용자로 프로그램을 실행하시겠습니까?

루트에서 실행하기 두려운 프로그램(취약점이 있을 수 있음)이 있는데, 다른 프로그램처럼 해당 기능이 작동하지 않도록 사용자의 실행 권한을 설정하고 싶지 않습니다.

가장 먼저 떠오르는 것은 루트에서 실행하는 것입니다.(프로그램 루트 디렉터리: 사용자):

#!/bin/sh
chmod 750 program && su - user -c program; chmod 700 program

두 번째 생각은 해당 프로그램에 대해서만 사용자를 생성하는 것이지만 새 사용자가 한 프로그램에 대해서만 권한을 갖고 다른 모든 프로그램에 대한 액세스를 거부하도록 권한을 설정하는 것을 본 적이 없습니다. 또한 프로그램이 GUI를 사용하는 경우 X11 액세스에 문제가 있을 수 있습니다.

프로그램을 비특권으로 실행하고 싶습니다(정기적인)사용자이지만 다른 프로세스나 다른 사람(물론 루트는 포함하지 않음)에 의해 프로그램이 실행되는 것을 원하지 않습니다.


예를 들어 스크린샷 프로그램이 있는데, 브라우저에 바이러스가 들어가지 않고 나만 사용할 수 있게 하려면 어떻게 해야 할까요?

이것은 말이 되지 않습니다. 브라우저 바이러스가 프로세스를 실행할 수 있는 경우 동일한 기능을 가진 프로그램을 다운로드하거나 기능 자체를 구현하는 데 필요한 모든 것을 갖추고 있습니다.

가장 먼저 떠오르는 것은 suid 비트를 사용하여 프로그램을 설치하는 경우 이를 설치하려면 루트 액세스가 필요하다는 것입니다. 이는 브라우저를 통해 침입했지만 루트 액세스 권한이 없는 바이러스가 프로그램을 사용할 수 있음을 의미합니다. 사용자 계정에서 프로그램 실행이 허용되지 않으면 바이러스는 해당 프로그램을 실행하지 않으며 루트 액세스 없이는 프로그램을 설치할 수 없으며 심지어 사용할 수도 없습니다.


또는 나만 실행할 수 있도록(랩퍼나 비밀번호, 루트 등으로 sudo를 통해) 키 입력을 시뮬레이트하는 프로그램이 있지만 바이러스나 다른 프로그램/프로세스는 실행할 수 없습니다.

답변1

프로그램에 대해 특별한 작업을 수행할 필요는 없습니다. 루트는 설명했듯이 su 또는 sudo와 같이 원하는 사용자로 프로그램을 실행할 수 있습니다. 하지만 사용자는 프로그램을 실행해야 합니다. 그러므로 당신이 원하는 것은 다른 사용자가 프로그램을 실행하도록 하는 것은 불가능하지만 그 사용자가 당신의 프로그램을 실행하는 것을 허용하지 않는 것입니다.

대상 사용자(또는 특히 프로그램 자체)가 실행되는 동안 복사본을 만들 수 있기 때문에 전체 "권한 변경, 실행, 다시 변경"도 헛된 것 같습니다. 아니면 그냥 백그라운드로 들어가서 행복하게 종료하고 이미 백그라운드에서 실행 중이므로 파일 권한에 신경 쓰지 않아도 됩니다.

적어도 Linux 시스템에서는 기본적으로 권한이 없지만 많은 작업을 수행해서는 안 되는 데몬을 실행하는 데 사용되는 "nobody" 사용자가 있는 것이 일반적입니다. 이러한 사용자가 여러 명일 수도 있지만 다음과 같은 이유로 보호하려는 항목에 대해 정말로 생각해 봐야 할 수도 있습니다.

루트에서 실행하기 두려운 프로그램(취약점이 있을 수 있음)이 있는데, 다른 프로그램처럼 해당 기능을 사용할 수 없도록 사용자 실행 권한을 설정하고 싶지 않습니다.

무의미한. 다른 프로그램에도 동일한 보안 문제가 있거나 동일한 프로그램을 빌드할 수 있습니다. 도대체 무엇이든 실행할 수 있는 능력과 일반 쉘의 절반만 설치되어 있으면 컴퓨터에 완전한 원격 쉘 서비스를 구축할 수 있을 것입니다.

이말이랑 좀 비슷하네요

나는 승객들이 이 브랜드의 나사를 비행기에 가지고 다니는 것을 원하지 않습니다. 이 나사에는 품질 관리 문제가 있으며 비행기에서 나사를 이 쓰레기로 교체하기 시작하면 무슨 일이 일어날지 누가 알겠습니까!

문제는 승객이 손상된 나사에 접근할 수 있는지 여부가 아니라 드라이버로 날개를 들어 올릴 수 있는지 여부입니다.

당신은 여기서 잘못된 결말을 ​​얻으려고 노력하고 있습니다. (꼭 훌륭하지는 않지만) Unix 권한 개념을 통해 사용자는 항상 혼란을 일으키거나 자신의 파일을 게시할 수 있습니다. 임의의 소프트웨어를 실행할 수 있다면 손상으로부터 보호할 수 없습니다.

사용자가 자신의 범위를 넘어서는 피해를 입히는 것으로부터 시스템을 보호할 수 있습니다. 그러나 실행 파일을 실행하는 것을 방지하는 것이 아니라(어차피 사용자가 할 수 있는 작업만 수행할 수 있음) 해당 사용자로 실행되는 항목이 손상되지 않도록 방지하는 것이 중요합니다. 이것이 바로 파일 권한의 용도, SELinux의 지원 기능 등입니다.

또한 프로그램이 GUI를 사용하는 경우 X11 액세스에 문제가 있을 수 있습니다.

X11 클라이언트가 X11 서버에 액세스하도록 허용하면 기본적으로 게임이 종료됩니다. 예를 들어 모든 키 입력을 합성할 수 있습니다. 터미널을 열고 rm -rf /를 입력하세요.


따라서 실제로는 자신이 염두에 두고 있는 보안 경계가 무엇인지 잘 알 수 없습니다.


예를 들어 스크린샷 프로그램이 있는데, 브라우저에 바이러스가 들어가지 않고 나만 사용할 수 있게 하려면 어떻게 해야 할까요?

이것은 말이 되지 않습니다. 브라우저 바이러스가 프로세스를 실행할 수 있는 경우 동일한 기능을 가진 프로그램을 다운로드하거나 기능 자체를 구현하는 데 필요한 모든 것을 갖추고 있습니다. 둘 다 맬웨어에서 비교적 흔한 일입니다. 다시한번 금지특정한실행 파일은 실제로아무것도 없다귀하의 시스템을 보호하기 위해.

관련 정보