sudo
내 사용자가 ( 스크립트에서 시작된 를 통해) 홈 디렉터리에서 웹 디렉터리로 파일을 복사할 수 있도록 허용하려고 합니다 .
명령은 다음과 같습니다:
sudo cp /home/$LOGNAME/file_source /var/www/$LOGNAME_file_dest
그래서 sudoers 파일에 다음 줄을 추가했습니다.
%users ALL=(ALL)NOPASSWD:/bin/cp /home/$LOGNAME/file_source /var/www/$LOGNAME_file_dest
비밀번호를 입력하라는 메시지가 표시되므로 제대로 작동하지 않지만 입력 sudo
해서는 안 됩니다. $LOGNAME
sudoer 파일이나 이와 유사한 내용에서 설명되지 않은 변수 문제인 것 같습니다 .
나는 통제광이고 이것은 매우 엄격한 조건이어야 하며, *
그렇지 않으면 다른 어떤 것도 용납되지 않을 것이라는 점을 언급하는 것을 거의 잊어버릴 뻔했습니다.
누구든지 이와 같은 문제를 해결할 수 있습니까? 아니면 고통스러운 길을 가서 1명의 사용자가 자신의 파일을 디렉토리 cp
에 추가하도록 허용해야 합니까?/var/www
답변1
쉘 변수는 쉘에 의해 해석되며 sudo 또는 이를 사용하여 시작된 다른 프로그램에서는 볼 수 없습니다. 즉, 실행 시 foo=bar; echo "$foo"
쉘 이 실행되기 전에 이를 확장하기 echo
때문에 전달하는 데이터가 "foo"라는 변수에서 온다는 사실을 전혀 알 수 없습니다 . echo
따라서 sudoers 파일에서 쉘 변수가 투명하게 작동하도록 하는 것은 불가능합니다.
또한 무엇 이든 될 수 있으므로 사용 여부에 관계없이 $LOGNAME
기본적으로 수행하려는 작업은 기본적으로 /home
뒤에 별표가 있는 것과 같습니다. sudoers
기본적으로 루트로 무엇이든 복사할 수 있기 때문에 이것을 권장하지 않습니다. 이는 엄청난 보안 위험입니다( $LOGNAME
포함될 수 있기 때문입니다 ..
). 결국에는 사용하고 싶지 않다고 말하지만 *
, 취하려는 행동도 똑같이 위험합니다.
가장 좋은 방법은 이러한 사용자에게 모든 것에 대한 읽기 액세스를 허용 /home/$LOGNAME/file_source
하고 이에 대한 쓰기 액세스를 허용하는 것 입니다 /var/www
. www-logs
이러한 경로에 대해 그룹 읽기 및 그룹 쓰기를 수행하는 그룹이 있을 수 있습니다 .
답변2
Joel Davis가 정답을 제시했습니다. 도움을 주신 모든 분들께 감사드립니다! 이것은 "POSIX ACL의 스크립트 애플리케이션"입니다!
그리고: https://stackoverflow.com/questions/869536/linux-directory-permissions-read-write-but-not-delete
예: (파일이 생성되고 작성된 후에는 읽기 전용이지만 소유자가 삭제할 수 있지만 다른 사람은 삭제할 수 없습니다.)
setfacl --set u::rwxs,g::rwx /controlled
setfacl -d --set u::r-x,g::r-x,o::- /controlled
이것이 바로 내가 해야 할 일이다.
도움을 주신 모든 분들께 진심으로 감사드립니다. 이 질문을 다른 방식으로 물어봤어야 했습니다.
답변3
필요한 확인 후 복사를 수행하고 액세스 권한을 부여하는 스크립트를 만듭니다 sudo
.
특권 쉘 스크립팅은 나쁜 습관으로 간주됩니다. Python이나 Perl과 같은 대안을 사용하는 것이 좋습니다.
생성된 환경은 sudo
이미 사용자가 라이브러리 경로 등을 재정의하는 것을 방지해야 하지만 최소한의 시스템 라이브러리 경로 집합만 허용되도록 수정하려면 몇 가지 추가 단계를 수행해야 할 수도 있습니다.