Apache 내에서 다른 사용자로 명령 실행

Apache 내에서 다른 사용자로 명령 실행

X가 필요한 프로그램을 실행하는 웹 응용 프로그램이 있습니다. xvfb를 사용하여 실행하고 있습니다. 다른 사용자로 실행하고 싶습니다.

아마 할 수 있을 거예요 sudo -u username -p password my command. 그러나 사용자 비밀번호를 일반 텍스트로 저장하는 것은 별로 좋지 않습니다.

이를 수행하는 "더 똑똑한" 방법이 있습니까?

답변1

사용suEXEC이를 통해 웹 서버 사용자가 아닌 파일 소유자로 스크립트를 실행할 수 있습니다.

답변2

내가 본 방식은 Apache 사용자에게 매우 특정한 명령 하나(우리의 경우 apache2ctrl restart)에 대해 sudo 권한을 부여하는 것입니다. 비밀번호를 사용할 필요가 없습니다. Apache 사용자가 읽을 수 있는 일반 텍스트로 비밀번호를 저장하는 경우 비밀번호가 없을 수도 있습니다.

물론 Apache 사용자로서 Sudo를 통해 여러 가지 다른 명령을 실행해야 하는 경우는 제외됩니다. 각 명령에 대해 sudo 권한을 추가해야 한다면 이는 어색해질 수 있습니다.

답변3

언제든지 Apache 외부에서 이 작업을 수행해야 하는 경우 보다 일반적인 해결 방법은 다음과 같습니다.

한 사용자가 다른 사용자로서 특정 명령을 반복적으로 실행할 수 있도록 하려면 해당 사용자가 소유한 셸 스크립트를 만들 수 있습니다.세트이드필요한 명령을 간단히 실행하는 비트가 활성화되었습니다. 그룹 소유권을 Apache 그룹으로 설정하고(이 그룹에 다른 사용자가 없는지 확인) Apache 그룹과 사용자 이외의 다른 모든 사용자에 대한 실행 권한을 비활성화하여 신뢰할 수 있는 사용자만 스크립트를 실행할 수 있도록 하십시오.

예:

# Replace $MYCOMMAND, $USERNAME, $GROUPNAME, and $MYSCRIPTNAME below
# In this case $GROUPNAME should probably be apache
su
touch $MYSCRIPTNAME
chown $USERNAME:$GROUPNAME $MYSCRIPTNAME
chmod 4750 $MYSCRIPTNAME # setuid, read/execute for group, none for others
echo '#!/bin/sh' >> $MYSCRIPTNAME
echo "sudo -u $USERNAME $MYCOMMAND" >> $MYSCRIPTNAME

답변4

지금 답변이 조금 늦었을 수도 있지만, NOPASSWD기능에 대해 sudo언급할 필요가 있다고 생각합니다.

예를 들어, /etc/sudoers(아파치가 웹 서버를 실행하는 사용자라고 가정):

User_Alias WWW = apache

WWW ALL =(username) NOPASSWD: my_command

그리고 호출합니다 sudo -u username my_command. 비밀번호를 저장할 필요가 없으며 웹 서버가 my_command사용자 이름으로 실행되도록 허용합니다.

사용자는 username여전히 비밀번호를 유지할 수 있습니다.

관련 정보