다른 사용자로 단일 명령을 실행하십시오. sudo에 대한 제한

다른 사용자로 단일 명령을 실행하십시오. sudo에 대한 제한

루트가 없는 컴퓨터에서 작업하고 있는데 허용되는 sudo명령 목록이 있습니다. 이러한 명령 중 하나는 입니다 /bin/su - foouser. 그래서 를 입력하면 sudo su - foouser대화형 쉘이 foouser로 제공됩니다. 그런 다음 foouser.

문제는 foouser특정 중요한 생산 프로세스를 생성하는 데 사용되는 공유 사용자/셸이라는 것입니다. 쉽게 사용자 정의하거나 원하는 방식으로 설정할 수 없습니다. 그리고 나는 내 터미널과 내가 로그인한 터미널과 내가 있는 터미널 사이에 명령 기록을 분할하는 작업을 일관되게 수행해서는 안 됩니다 foouser.

내가 정말로 하고 싶은 것은 단일 명령을 로 실행하고 foouser, 이를 차단하고, 일반적인 명령처럼 stdout 및 stderr을 내 쉘에 인쇄한 다음, 여전히 나 자신으로 로그인되어 있는 상태로 돌아가는 방법을 갖는 것입니다. 아니다 foouser). 이는 예를 들어 스크립트에 캡슐화되어 as 명령 as_foo bar을 실행하고 stdout 및 stderr을 인쇄하고 반환 코드를 반환한 다음 다시 쉘에 넣을 수 있습니다.barfoouserbar

시스템 관리자에게 권한 변경을 요청할 수 있습니다. 예를 들어, barsudo 목록에 추가한 다음 su -c내가 설명한 방식으로 bar를 실행하는 데 사용할 수 있습니다. 그런데 다음 날 달리고 싶으면 bar2다시 그들과 얘기해야 해요.

이 딜레마에서 벗어날 방법이 있나요? 내가 원하는 만큼 많은 명령을 실행하고 실행할 수 있기 때문에 다소 어리석은 것처럼 보이지만 foouser보안 측면에서는 차이가 없습니다. 이것을 가능하게 하는 명백하고 편리한 방법을 찾을 수 없습니다.

답변1

sudo su - foouser <command>루트로 실행하려면 최소한 제한된 루트 액세스 권한이 필요합니다 su - foouser <command>.

sudo -u foouser <command>원하는 것을 한 번에 할 수 있습니다. 하지만 시스템 관리자가 다음과 같은 방식으로 계정 sudo에 대한 액세스 권한을 부여해야 합니다 .foouser

ignacio ALL=(foouser) ALL

이 방법 대신:

ignacio ALL=(root) su - foouser

이런 방식으로 구성하면 sudo예를 들어 예상한 것과 같은 별칭을 정의할 수 있습니다.

as_foo='sudo -u foouser'

을 피함으로써 su -사용자 정의를 계속 사용할 수 있습니다. sudo이런 방식으로 사용하면 사용자 ID만 변경되지만 HOME이전 값은 유지되며 셸 시작 스크립트 및 기타 사용자 정의를 읽을 수 있습니다.당신의's 대신 홈 디렉토리입니다 foouser.

(물론, 해당 스크립트는 다른 사용자도 읽을 수 있어야 하며, 실행할 수 있는 공유 스크립트는 명시적으로 대신 foouser의 홈 디렉토리를 참조하는 것이 좋습니다 .)/home/foouser$HOME

sudo그러나 해당 솔루션의 작동을 방해할 수 있는 몇 가지 설정이 있습니다 . always_set_homesudoers 파일에 sudo 옵션이 설정되어 있거나 목록 에 env_reset추가하지 않고 옵션이 설정된 경우 어쨌든 재설정됩니다. 이러한 상황에서는 명령 에 옵션을 추가하여 환경 유지를 명시적으로 요청해 보세요.HOMEenv_keepHOME-Esudo

foouser그리고 실제로 로그인했을 때와 동일하게 환경이 설정된 상태에서 foouser(예: 와 동일하게 sudo su - foouser) 무언가를 실행하려는 경우 -i이를 구체적으로 요청하는 옵션을 추가하세요. sudo -i -u foouser100% 정확한 교체도 마찬가지 입니다 sudo su - foouser.

sudo옵션 이 없는 오래된 버전의 시스템을 찾으면 대신 sudo 옵션 -i을 사용하십시오 -H. 완벽한 대체 버전은 아니지만 충분할 수 있습니다. 이러한 이전 버전에는 sudo보안에 민감한 일부 알려진 버그가 있을 가능성이 높으므로 어쨌든 업데이트하는 것이 좋습니다.

sudo -l자신의 계정으로 사용하여 sudo 액세스가 정의된 방식과 어떤 sudo 옵션(기본 항목이라고도 함)이 적용되는지 정확하게 확인할 수 있습니다 .

답변2

에 추가 인수를 전달합니다 su.

sudo su - foouser sh -c 'echo $USER'

관련 정보