[server] 다른 사용자로 쉘 스크립트를 실행하십시오.

쉘 스크립트를 다른 사용자로 실행하는 좋은 방법은 무엇입니까? 데비안 에칭을 사용하고 있는데 가장 할 사용자를 알고 있습니다.

수동으로 수행했다면 다음과 같이하십시오.

su postgres
./backup_db.sh /tmp/test
exit

프로세스를 자동화하고 싶기 때문에 backup_db.sh를 postgres로 실행하는 방법이 필요합니다 (환경 상속 등).

감사!



답변

하나의 명령으로 다른 사용자로 스크립트를 실행하려면 다음을 실행하십시오.

/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres

Breaking it down:
 /bin/su : switch user
 -c "/path/to..." : command to run
 - : option to su, make it a login session (source profile for the user)
 postgres : user to become

나는 항상 이와 같은 스크립트에서 전체 경로를 사용하는 것이 좋습니다. su를 할 때 항상 올바른 디렉토리에 있다고 보장 할 수는 없습니다 (아는 사람이 당신의 homedir을 변경했을 수도 있습니다). 나는 또한 편집증이기 때문에 항상 su (/ bin / su)의 전체 경로를 사용합니다. 누군가가 경로를 편집하여 손상된 su 버전을 사용하게 할 수 있습니다.


답변

실행할 대상 사용자가 nologin shelll을 정의한 경우 -s 옵션을 사용하여 쉘을 지정할 수 있습니다.

/bin/su -s /bin/bash -c '/path/to/your/script' testuser

다음 질문을 참조하십시오. nologin 쉘을 가진 사용자로 스크립트를 실행 하십시오.


답변

이를 일정에 따라 자동화하려면 사용자의 crontab에 넣을 수 있습니다. Cron 작업은 전체 환경을 얻지 못하지만 스크립트 환경에 필요한 모든 env 변수를 넣는 것이 좋습니다.

사용자의 crontab을 편집하려면

sudo crontab -u postgres -e


답변

이 글은 유익한 정보 여야합니다- 쉘 스크립트의 setuid

” “인수 순서로 su 를 실행 - username하면 사용자에게 동일한 환경을 제공하는 로그인 쉘이 작성됩니다. 일반적으로 다른 로그인에서 홈 환경으로 스크립트를 빠르게 실행하는 데 사용됩니다.


답변

su 맨 페이지를 시도하십시오.

su -c script_run_as_postgres.sh-postgres

대체로, sudo를 사용하여 암호없이 postcoms로 해당 코만을 실행할 수 있습니다. 그래도 / etc / sudoers에 약간의 설정이 필요합니다.


답변

다른 사람들이 게시 한 “su -c …”방법은 좋은 방법입니다. 자동화를 위해 스크립트를 실행할 사용자의 crontab에 스크립트를 추가 할 수 있습니다.


답변

사용자에게 이미 sudo에 대한 항목이 있고 수퍼 유저의 비밀번호를 모르는 경우 다음을 시도해보십시오. /data/my-db/pgsql/9.6/data에서 초기화 된 postgres를 다시 시작합니다.

sudo su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /data/my-db/pgsql/9.6/data -l /var/log/pgsql.log restart"