루트가 없는 컴퓨터에서 작업하고 있는데 허용되는 sudo
명령 목록이 있습니다. 이러한 명령 중 하나는 입니다 /bin/su - foouser
. 그래서 를 입력하면 sudo su - foouser
대화형 쉘이 foouser로 제공됩니다. 그런 다음 foouser
.
문제는 foouser
특정 중요한 생산 프로세스를 생성하는 데 사용되는 공유 사용자/셸이라는 것입니다. 쉽게 사용자 정의하거나 원하는 방식으로 설정할 수 없습니다. 그리고 나는 내 터미널과 내가 로그인한 터미널과 내가 있는 터미널 사이에 명령 기록을 분할하는 작업을 일관되게 수행해서는 안 됩니다 foouser
.
내가 정말로 하고 싶은 것은 단일 명령을 로 실행하고 foouser
, 이를 차단하고, 일반적인 명령처럼 stdout 및 stderr을 내 쉘에 인쇄한 다음, 여전히 나 자신으로 로그인되어 있는 상태로 돌아가는 방법을 갖는 것입니다. 아니다 foouser
). 이는 예를 들어 스크립트에 캡슐화되어 as 명령 as_foo bar
을 실행하고 stdout 및 stderr을 인쇄하고 반환 코드를 반환한 다음 다시 쉘에 넣을 수 있습니다.bar
foouser
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'