bar:bar
소유권이 있는 파일을 다운로드한 다음 소유권을 으로 변경하는 스크립트를 작성 중입니다 foo:server
. 그래서 를 통과하기 위해 보조 스크립트( chown_test.sh
) 를 작성했습니다 chown
. 일단 작동하면 이를 기본 스크립트에 삽입하지만 문제가 발생합니다( 아래에 표시됨) 아마도 사용량이 부족했기 때문일 것입니다 chown
.
노트:아래에 필요한 정보를 모두 담으려고 노력했지만, 더 많은 정보가 필요하시면 댓글로 알려주세요.
디렉토리 구조, 소유권 및 권한:
+ drwxrwxr-x 2 foo:server chown_test # test directory
├─ -rwxrwxr-- 1 foo:server chown_test.sh # side script
├─ -rwxrwxr-- 1 bar:bar file # empty file
관련 항목 /etc/group
:
sudo:x:27:foo
bar:x:33:foo
foo:x:1000:
server:x:1003:bar,foo
코드 chown_test.sh
:
#!/bin/bash
echo "User: $USER"
chown foo:server ./file
저도 시도해 보았지만 sudo chown foo:server ./file
sudo 비밀번호를 묻는 메시지가 표시 bar
되고 sudo 비밀번호가 없습니다.
실행 결과는 다음 chown_test.sh
과 같습니다 bar
.
[16:13 foo@Opus]:~/chown_test$ sudo -H -u bar bash -c ./chown_test.sh
User: bar
chown: changing ownership of ‘./file’: Operation not permitted
실행 결과는 다음 chown_test.sh
과 같습니다 foo
.
[16:14 foo@Opus]:~/chown_test$ ./chown_test.sh
User: foo
chown: changing ownership of ‘./file’: Operation not permitted
누군가 내 딜레마를 설명해 줄 수 있나요?
제 질문을 읽어주셔서 감사합니다.
고쳐 쓰다:
도움을 받아Toby Speight의 답변 및 의견, 행복한 매체를 찾았습니다.
부터,"권한이 있는 프로세스(Linux: CAP_CHOWN
이 기능이 있는 프로세스)만이 파일 소유자를 변경할 수 있습니다. 파일 소유자는 파일 그룹을 소유자가 속한 어떤 그룹으로든 변경할 수 있습니다.", 그런 다음 소유자가 아닌 그룹만 변경하기로 결정했습니다.
chown
나는 명령을 chown_test.sh
다음과 같이 변경하여 이 작업을 수행했습니다.
chown :server ./file
결과:
├─ -rwxrwxr-- 1 bar:server file
나에게는 효과가 있지만 당신에게는 그렇지 않다면 한 번 살펴보세요토비 스페이트의 답변자세한 내용은 아래를 참조하세요.
답변1
chown(2)
매뉴얼 페이지 에서 :
권한이 있는 프로세스(Linux:
CAP_CHOWN
이 기능이 있는 프로세스)만 파일 소유자를 변경할 수 있습니다. 파일 소유자는 파일 그룹을 소유자가 속한 그룹으로 변경할 수 있습니다. 권한이 있는 프로세스(Linux:CAP_CHOWN
)는 마음대로 그룹을 변경할 수 있습니다.
귀하의 프로세스에는 권한이 없으며 소유한 파일 그룹을 소유자 그룹으로 변경하지도 않습니다.
따라서 적절한 권한을 얻어야 합니다. 가장 간단한 두 가지 방법은 다음과 같습니다.
파일의 소유권을 설정하고(남용을 방지하기 위해 파일의 경로 이름을 하드코딩할 수 있다고 가정함) 최소한의 바이너리 프로그램(아마도 C로)을 작성하고 이를 루트로 설정하거나 더 나은 방법으로
CAP_CHOWN
기능을 추가합니다sudo setcap cap_chown+ep <program_name>
. 프로그램은root
모든 결과와 함께 실행됩니다./etc/sudoers
비밀번호 없이 특정 명령을 실행할 수 있도록 적절한 항목을 작성하십시오sudo
. 다음과 같은 줄을 작성하십시오.bar ALL = (root) NOPASSWD: /bin/chown foo:server '/full/path/to/file'
해당 지시문이 있는지 확인
/etc/sudoers.d
하세요 . 대부분의 Linux 배포판에는 해당 지시문이 있습니다. 스크립트가 호출하는 명령이 정확히 일치하는지 확인하세요!/etc/sudoers
#includedir