제한된 권한으로 스크립트의 일부를 실행하려면 어떻게 해야 합니까?

제한된 권한으로 스크립트의 일부를 실행하려면 어떻게 해야 합니까?

다음과 같은 문제가 있습니다. Postgresql을 실행하는 모든 컴퓨터에는 특별한 사용자가 있습니다.포스트그레스. 이 사용자는 데이터베이스 서버에 대한 관리 액세스 권한을 갖습니다.

이제 psql을 사용자로 사용하여 데이터베이스 명령을 실행하는 Bash 스크립트를 작성하고 싶습니다.포스트그레스(psql은 사용자로 실행되어야 합니다.포스트그레스, 스크립트가 아님). 지금까지는 문제가 되지 않습니다. 사용자로 스크립트를 실행할 수 있습니다.포스트그레스.

그러나 psql의 출력을 다음 디렉터리의 파일에 쓰고 싶습니다.포스트그레스쓰기 권한이 없습니다.

어떻게 해야 하나요?

그러나 스크립트 자체에서 EUID를 변경하는 것을 고려했습니다.

  1. Bash 스크립트에서 EUID를 변경하는 방법을 찾을 수 없습니다
  2. 이와 같은 것을 사용할 때 EUID를 어떻게 변경합니까
    psql -U postgres -c "<command>" > file?

답변1

서브쉘을 사용하세요:(su -c 'psql -U postgres -c "<command>"' postgres) > file

하위 셸 내에서 작업을 수행하기 위한 권한을 제거할 수 있지만 출력은 여전히 ​​원래 권한을 갖고 있는 원래 셸로 리디렉션됩니다.

답변2

다음 트릭을 사용하고 싶을 수도 있습니다.

{ anycommand } | su -c 'tee file' user

tee(1)POSIX 유틸리티이므로 가용성을 신뢰할 수 있습니다.


또는 다음을 사용하여 sudo:

{ anycommand } | sudo -u user 'tee file'

답변3

더 나은 쓰기 권한이 있는 사용자(예: 루트)를 사용하여 쉘 스크립트를 실행할 수 있으며, 데이터를 출력할 때 데이터베이스 사용자 postgres가 쓸 수 있는 폴더(예: /tmp)에 써야 합니다.

데이터가 기록되면 쉘 스크립트에 쓰기 권한이 있는 디렉토리로 이동하십시오(예: 루트 사용자는 어디에서나 쓸 수 있음).

답변4

왜 이렇게 하지 않나요?: sudo su postgres -c "psql ..." >/path/to/file?

관련 정보