신뢰할 수 있는 개발자 그룹이 있고 서버에 sudo 권한을 부여했지만 sudo로 실행되지 않도록 일부 프로그램을 제외하고 싶습니다. 예를 들어, su
sudo로 명령 실행을 비활성화하고 사용자로 명령을 실행하게 하고 싶습니다 .
어떻게 해야 하나요?
답변1
sudoer를 사용하여 명령을 제외할 수 있습니다. 예를 들어:
Cmnd_Alias DEV_EXCEPTIONS=/bin/su, /usr/bin/vi
%devgrp ALL = ALL, !DEV_EXCEPTIONS
밝혀지다
User XYZ may run the following commands on this host:
(root) ALL, (root) !/bin/su, !/usr/bin/vi
사용자는 여전히 su 명령을 실행할 수 있습니다.
답변2
당신은 이것을 할 수 없습니다안전하지 않음.
실제로 구성 구문이 있지만 sudo
원하는 대로 작동하지 않습니다. 시스템에 대한 루트 액세스를 허용하면 블랙리스트 관련 작업을 아무리 많이 해도 시스템이 다시 잠기지 않습니다. Linux 파일 시스템과 프로세스 권한 모델은 이를 허용하지 않습니다.
자일스의논평이유를 암시하기 시작하세요.
이것이 가능하기는 하지만 전혀 쓸모가 없습니다. 비활성화해도 , 는 에 대한 심볼릭 링크이고 , , , , 다음에 실행되는 쉘 스크립트 는 계속
sudo su
허용됩니다 .sudo env su
sudo sh -c su
sudo /totally/not/su
/totally/not/su
/bin/su
sudo ~/bin/ls
~/bin/ls
su
sudo bash
sudo zsh
sudo python
sudo vi
:shell
그러나 이는 가능성의 표면에만 긁힌 것일 뿐입니다.
블랙리스트에 오르지 마세요.화이트리스트.
발생하고 싶지 않은 블랙리스트 작업~ 할 것이다지는 게임입니다. 블랙리스트 접근 방식을 사용하면 기껏해야 무시한 오류를 잡아낼 수 있으며 사용자에게 다른 방법으로 무언가를 수행하고 싶고 해당 작업을 수행하지 않도록 강요할 수는 없다는 점을 정중하게 사용자에게 알릴 수 있습니다.
제한된 시스템을 원하는 경우 유일한 기도는 매우 구체적인 유형의 작업을 화이트리스트에 추가하는 것입니다. 전체 루트 액세스 권한으로 시스템을 열지 않고도 화이트리스트에 추가할 수 있는 것은 사용자가 제어할 수 있는 입력을 처리하지 않고 고정된 작업을 수행하는 고정된 위치에 있는 실행 파일입니다. 즉, 당신은 허용되지 않습니다
실행 파일 또는 setuid로 표시되거나 루트에 의해 구문 분석 및 조작되는 모든 파일에 대한 쓰기 액세스 권한입니다.
놀랍게도 여기에는 많은 프로그램에 대한 구성 파일이 포함될 수 있습니다. 겉으로는 무해해 보이는
*.ini
,*.yaml
, 또는*.conf
기반 형식에도 프로그램이 구성 값을 기반으로 다른 프로세스를 실행하도록 하는 옵션이 있는 경우가 많습니다. 폴더별로 빠르게 찾아보니/etc
처음에 구성에 대한 쓰기 권한만 있었다면 전체 루트 에스컬레이션을 달성하기 위해 활용할 수 없었던 구성 파일이 거의 없다는 사실이 드러났습니다.사용자 입력을 기반으로 다른 프로세스를 생성하는 프로세스를 실행합니다.
환경 변수, 사용자 입력 처리 등을 통해 제어할 수 있는 스크립트에 대한 액세스 권한을 부여하는 데 특별한 주의를 기울이십시오. 실제로는 안전한 것이 많지 않습니다.
간단히 말해서, sudo
모든 사람을 위해 모든 것을 완전히 제어하고 있음을 ⓐ 이해하거나 ⓑ 허용 목록에 추가한 신중하게 제어되는 단일 작업의 영향을 완전히 이해하지 않는 한 어떤 종류의 액세스도 허용하지 마세요.
1나는 이것이 모순이라는 것을 알고 있다다른 답변하지만 이 질문이 다른 곳에서 '해결책'으로 좋아하는 것을 보고 질문 방문자가 읽을 수 있도록 답변에 주목할 가치가 있다고 생각했습니다. 자일스의논평충분히 심각하게 받아들이지 않았습니다.
답변3
날 봐여기에서 자세한 솔루션을 확인하세요. 귀하의 솔루션은 거의 동일합니다. 당신이 해야 할 다른 일은 다중을 사용하여 Cmnd_Alias
더 쉽게 새로운 명령을 디버그하고 추가하는 것입니다. DarkHeart가 답변에서 지적했듯이 부정 연산자와 함께 이러한 여러 별칭 문자열을 사용할 수 있습니다.