파일을 삭제하려면 sudo가 필요하지만 쓰기는 허용됩니다.

파일을 삭제하려면 sudo가 필요하지만 쓰기는 허용됩니다.

서버 습격을 통해 모든 파일을 얻었고 공간이 상당히 많아서 아무것도 삭제할 필요가 없는 경우가 많습니다.

나는 여전히 항상 습격에 쓰는 일을 하고 있으므로 그렇게 하기 위해 sudo를 사용할 필요는 없습니다. 그런데 쓰기는 허용되지만 파일 삭제는 허용되지 않도록 권한을 설정할 수 있습니까?

나는 또한 mv 명령에 sudo를 사용해야 한다고 생각하지만 그것은 문제가 되지 않습니다.

추가 정보:

Raid는 btrfs raid1을 사용합니다.

OS는 별도의 드라이브에 있습니다(Ubuntu 14.04 서버).

답변1

파일을 생성하거나 삭제하려면 디렉터리 쓰기 권한이 필요합니다. 파일을 변경하려면 파일 쓰기 권한이 필요합니다.

이 트리를 고려하면:

FolderA: (no write permissions for you)
   - FileX (write permissions)
   - FileY (write permissions)

이제 FileX 및 FileY를 변경할 수 있지만 삭제할 수는 없습니다. 또한 FolderA에 FileZ를 만들 수도 없습니다.

답변2

나는 그것이 가능하다고 생각하지 않습니다. Unix에서 파일 생성 및 삭제는 기본적으로 동일한 플래그인 디렉터리에 쓰는 기능에 의해 제어됩니다.

이제 당신이 할 수 있는 일은 두 개의 디렉터리를 만드는 것입니다. 하나는 쓰기 권한이 있고 다른 하나는 루트로 제한되어 있습니다.

[romano:~/tmp/test] % ls -l
total 8
drwxrwxr-x 2 romano romano 4096 Oct  8 18:06 normal
drwxrwxr-x 2 root   root   4096 Oct  8 18:06 onlyroot

당신은 일반적으로 normal. 당신이 그것에 있다고 가정하십시오 :

[romano:~/tmp/test/normal] % ls
one.txt  three.txt  two.txt

파일을 명확하게 삭제하고 새 파일을 만들 수 있습니다. " "이(가) 삭제되지 않도록 보호하고 싶다고 가정해 보겠습니다 one.txt. 당신이 할 수 있는 일은 다음에 대한 하드 링크를 만드는 것입니다 onlyroot.

[romano:~/tmp/test/normal] 1 % sudo ln one.txt ../onlyroot

one.txt이렇게 하면 in 에 대한 다른 이름이 생성됩니다 onlyroot(무시할 정도의 공간을 사용하며 파일은 복사되지 않습니다). 이제 일반 사용자로서 폴더 one.txt에서 삭제할 수 있지만 해당 폴더 normal아래에는 건드릴 수 없는 버전이 있습니다 onlyroot.

[romano:~/tmp/test/normal] % ls
one.txt  three.txt  two.txt
[romano:~/tmp/test/normal] % rm one.txt
rm: remove regular empty file ‘one.txt’? y
[romano:~/tmp/test/normal] % cd ..
[romano:~/tmp/test] % cd onlyroot 
[romano:~/tmp/test/onlyroot] % ls
one.txt
[romano:~/tmp/test/onlyroot] % rm one.txt 
rm: remove regular empty file ‘one.txt’? y
rm: cannot remove ‘one.txt’: Permission denied

답변3

제가 이해한 바에 따르면 (기준으로https://btrfs.wiki.kernel.org/index.php/Project_ideas#RichACLs_.2F_NFS4_ACLS), btrfs는 기존 Unix 권한과 POSIX.1e ACL만 지원하므로 원하는 작업을 수행할 수 없습니다.

많은/대부분의 다른 파일 시스템은 Linux richacls(아직 메인라인에 있다고 생각하지 않음), NFSv4 ACL, ZFS ACL 또는 Windows ACL 중 하나 이상을 지원하며, 모두 '삭제'를 구체적으로 거부할 수 있지만 저는 지원하지 않습니다. 단지 이를 위해 btrfs의 기능을 기꺼이 포기할 것이라고 상상하지 마십시오.

반면에 이는 단순한 오류를 방지하기 위해 특별히 의도한 것이므로 autosnap과 같은 것을 사용하여 btrfs의 스냅샷 기능을 활용하는 것이 더 나을 수도 있습니다.

답변4

내 생각에 한 가지 해결책은 에 함수를 만드는 것입니다 bashrc. 예:

sudowrapper () { 
sudo -k;sudo "$@";sudo -K; 
}

vimf() {
    echo "pass" | sudowrapper -S nvim "$1"
}

sudowrapper호출될 sudo때마다 자격 증명을 잊어 버려야 합니다 . 그렇지 않으면 이상한 동작이 발생합니다.vimf

다른 사람이 나쁜 일을 하는 것을 방지하는 것이 목표라면 자신이 잘못된 일을 하지 않도록 하고 싶은 경우에만 이 작업을 수행하십시오. 비밀번호를 입력하는 것은 .bashrc나쁜 생각입니다.

관련 정보