저는 루트 권한은 없지만 sudo
허용된 명령 목록이 있는 컴퓨터에서 작업하고 있습니다. 이러한 명령 중 하나는 입니다 /bin/su - foouser
. 따라서 sudo su - foouser
fouser라는 대화형 셸을 입력하고 얻을 수 있습니다. 그러면 뭔가를 실행할 수 있습니다 foouser
.
문제는 이것이 foouser
일부 중요한 생산 프로세스를 생성하는 데 사용되는 공유 사용자/셸이라는 것입니다. 쉽게 사용자 정의하거나 원하는 방식으로 설정할 수 없습니다. 그리고 나는 항상 그 작업을 해서는 안 됩니다. 이로 인해 내 터미널과 명령 기록이 내가 로그인한 터미널과 내가 있는 터미널 사이에 분할됩니다 foouser
.
내가 정말로 하고 싶은 것은 단일 명령을 실행하고 foouser
, 명령을 차단하고, 명령이 일반적으로 수행하는 것처럼 stdout 및 stderr을 쉘에 인쇄한 다음, 여전히 나 자신으로 로그인된 상태에서 반환하는 방법을 갖는 것입니다. 아니요 foouser
). 예를 들어, 이는 as_foo bar
명령을 다음 bar
과 같이 실행하고 foouser
, stdout 및 stderr을 인쇄하고, 반환 코드를 반환한 bar
다음 다시 셸로 보내는 스크립트로 래핑될 수 있습니다 .
시스템 관리자에게 권한 변경을 요청할 수 있습니다. 예를 들어, bar
sudo 목록에 추가한 다음 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_home
sudoers 파일에 sudo 옵션이 설정되어 있거나 env_reset
옵션이 설정되었지만 목록 HOME
에 추가되지 않은 경우 어쨌든 재설정됩니다. 이 경우 명령 에 옵션을 추가하여 환경을 보존하도록 명시적으로 요청해 보세요.env_keep
HOME
-E
sudo
foouser
로그인할 때와 정확히 동일한 환경 설정 foouser
(예: 동등한 환경 )을 실제로 실행하려면 sudo su - foouser
이 -i
옵션을 추가하여 이 옵션을 구체적으로 요청하세요. sudo -i -u foouser
100% 정확한 교체도 마찬가지입니다 sudo su - foouser
.
이전 버전의 시스템에 sudo
이 옵션이 없으면 대신 sudo와 함께 -i
이 -H
옵션을 사용하십시오. 완벽한 대체 방법은 아니지만 충분할 수 있습니다. 이러한 이전 버전에는 sudo
보안에 민감한 일부 알려진 버그가 있을 가능성이 높으므로 어쨌든 업데이트할 가치가 있습니다.
sudo -l
자신으로 사용하여 sudo 액세스가 정의되는 방법과 어떤 sudo 옵션(기본 항목이라고도 함)이 적용되는지 확인할 수 있습니다 .
답변2
추가 매개변수를 에 전달합니다 su
.
sudo su - foouser sh -c 'echo $USER'