www-data 사용자로 실행되도록 PHP에 의해 실행되는 스크립트가 있습니다. 스크립트는 매우 간단합니다. 기본적으로 미리 만들어진 일부 파일(예: 호스트 및 인터페이스 파일)을 올바른 디렉터리에 복사합니다. 일부 권한 등을 업데이트할 수도 있습니다.
새 사용자를 생성하고 해당 사용자에게 다음을 통해 필요한 명령에 대한 액세스 권한을 부여하는 것이 visudo
효과적일 수 있다고 생각합니다.
- 사용자에게는 여전히
.sh
비밀번호를 입력하라는 메시지가 표시되며 - 분명히 테스트 사용자에게 권한을 부여하지 않습니다.
visudo
(실행 중에는 모든 권한이 거부됩니다 ./script.sh
)
test ALL=(ALL) NOPASSWD:ALL
test ALL= NOPASSWD:ALL
test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv
test
사용자를 내가 로그인한 실제 사용자로 변경 하면 작동합니다.
.sh
로그인한 사용자가 실행하거나 www-data
필요한 권한이 있는 다른 사용자로 명령을 실행하려고 시도합니다.
#!/bin/bash
sudo -H -u test cp test.txt /etc/test.txt
sudo -H -u test chown test /etc/test.txt
echo "ok"
www-data
사용자가 권한이 필요한 스크립트를 실행할 수 있도록 하는 가장 좋은 방법은 무엇입니까 root
?
답변1
보여주신 부분은 sudoers
이해가 안가네요.
test ALL=(ALL) NOPASSWD:ALL
test ALL= NOPASSWD:ALL
test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv
행 중 하나만 필요하며 아마도 마지막 행일 것입니다.
이전 명령의 종료 코드를 고려하지 않고 실행하는 것도 echo "ok"
의미가 없습니다.
귀하에 따르면 sudo
이 사용자에게는 권한이 없습니다 www-data
.
sudo -H -u test cp test.txt /etc/test.txt
사용자가 test
할 수 없기 때문에 일반 시스템에서는 의미가 없습니다 /etc
. 이는 대상 파일이 존재하고 사용자 "test"에 쓰기 권한이 있는 경우에만 작동합니다.
그러나 이 방법으로 성공적으로 호출할 수 있는 sudo -H -u test chown test /etc/test.txt
유일한 사용자는 루트이므로 이는 결코 의미가 없습니다 .chown
해결책
내 생각에 당신에게 필요한 것은 이것이다. 대본
#!/bin/bash
cp ~test/test.txt /etc/test.txt &&
chown test /etc/test.txt &&
echo 'ok' || echo 'failure'
- 다음 사용자만 쓸 수 있는 경로에 스크립트를 배치하세요.
root
sudo
이와 같은 권한을 생성하세요 .www-data ALL= NOPASSWD:/path/to/script.sh
www-data
다음과 같이 스크립트를 호출하십시오.sudo /path/to/script.sh