디렉토리에 이 경로가 있다고 가정하여 디렉토리가 삭제되는 것을 방지하고 싶습니다.
~/foo
루트 사용자만 삭제할 수 있도록 하는 방법이 있나요?sudo를 사용하지 말고 루트 사용자가 되지 마십시오.?
예를 들어 다음과 같이 작동합니다.
sudo chown -R root:root ~/foo
하지만 sudo를 사용하지 않으면 위 명령이 실패합니다.
chown -R root:root ~/foo
# 실패하다
chown: '/home/olegzandr/foo/bar'의 소유권 변경: 작업이 허용되지 않습니다.
sudo를 사용하지 않고 루트 사용자 외에는 파일을 삭제할 수 없게 만들 수 있습니까?
(명령어에 대해서도 읽어봤는데 chattr
태그가 없어서 chattr
질문에 태그를 추가할 수가 없네요.)
내가 이것을 시도하면 :
권한 오류가 발생하지 않으므로 작동하지 않는 것 같습니다.
답변1
첫 번째 질문에는 다음과 같이 고정 비트를 사용하세요.
chmod o+t ~/foo
소유자와 루트를 제외한 모든 사용자가 삭제할 수 없게 됩니다.
이 chown
명령의 경우 슈퍼유저 권한 없이 소유자를 변경할 수 없습니다.
답변2
디렉터리 소유자는 일반적으로 디렉터리에 있는 파일과 하위 디렉터리를 삭제하고 이름을 바꿀 수 있습니다. Linux 보안 모듈 및 파일 속성(활성화되어 사용 가능한 경우)에 추가 제한 사항이 추가될 수 있습니다.
문제의 변경 사항을 반영하도록 편집되었습니다.
일반 사용자는 다음을 제외한 모든 사용자를 제외하는 디렉토리를 쉽게 생성할 수 있습니다.그들 자신그리고 뿌리. 예를 들어:
mkdir -m 0700 ~/foo
drwx------
그러나 소유자 사용자( )와 루트만 액세스할 수 있는 디렉터리를 만듭니다 .
mkdir -m 0770 ~/foo
소유자 사용자, 그룹 구성원( ) 및 루트만 drwxrwx---
액세스할 수 있는 디렉터리를 만듭니다.
루트는 사용할 수 있는 Linux 보안 모듈(예: SELinux)에 의해 설정된 예외를 제외하고 시스템의 모든 파일에 액세스할 수 있습니다. 결국, 그것이 바로 그들이 파워 유저인 이유입니다.
명령을 실행하면 id -un
현재 실제 사용자 이름을 볼 수 있습니다. 이 명령은 id -gn
실제 그룹과 id -Gn
자신이 속한 보조 그룹의 이름을 보고합니다. 디렉토리의 소유자인 경우 명령을 사용하여 파일이나 하위 디렉토리의 그룹을 자신이 속한 그룹으로 변경할 수 있습니다 chgrp
.
따라서 귀하가 사용자 grand
이고 그룹 marina
및 에 속해 있다고 가정해 보겠습니다 torino
. 귀하와 이 두 그룹에 속한 모든 사용자만 액세스할 수 games-marina
있는 디렉토리를 생성하려면 games-torino
(다른 사용자는 읽기만 가능하고 아무것도 수정하거나 삭제할 수 없음) 다음을 수행하십시오.
mkdir games-marina
chgrp marina games-marina
chmod u=rwx,g=rx,o= games-marina
mkdir games-torino
chgrp torino games-torino
chmod u=rwx,g=rx,o= games-torino
많은 시스템에서 사용자는 사용자 이름과 일치하는 그룹으로 생성됩니다. 이는 여러 가지 면에서 유용합니다. 예를 들어, 소유한 파일의 기본 그룹인 경우가 많으므로 해당 내용은 사용자만 제어할 수 있다는 것이 분명합니다.
사용자가 정상적으로 기능할 수 없습니다.포기하다다른 사람이 제어하는 파일 또는 디렉토리. 이 소유권 변경에는 슈퍼유저 권한이 필요합니다. (예를 들어, 파일 또는 디렉터리의 소유자 변경을 사용하려면 chown
루트이거나 Linux에서 CAP_CHOWN 기능이 있어야 합니다.)
이런 종류의 포기를 허용하는 것이 나쁜 생각인 데에는 여러 가지 이유가 있습니다. 기술적으로는 가능하지만 그런 경우는 본 적이 없습니다.어느나쁜 사용 사례는 아닙니다. 나는 OP가 뭔가를 시도하고 있다고 확신합니다... 여기서는 작동하지 않습니다.
sudo
(특정 그룹 구성원(예, 웹 관리자) 사이에서 특정 디렉터리 트리의 파일 소유권을 허용하는 몇 가지 스크립트를 작성했지만 몇 가지 bash/dash 도우미 스크립트를 사용하면 안전하게 설정할 수 있습니다.)
/home/olegzandr/foo
소유자가 삭제할 수 없는 디렉토리를 생성하려면 마운트 지점을 생성하고 그 위에 (루트 소유) 디렉토리를 바인드 마운트 /home/olegzandr
해야 합니다 . foo
예를 들어, 디렉토리(분명히 루트 사용자가 소유함)를 생성하고 /root/foo
이를 사용하여 바인드 마운트 할 수 있습니다./home/olegzandr/foo
sudo mount --bind /root/foo /home/olegzandr/foo
바인드 마운트의 경우 /home/olegzandr/foo
디렉토리가 여전히 존재해야 하며(마운트 지점으로 사용되기 때문에) 디렉토리 소유자는 /home/olegzandr
디렉토리에서 작업할 수 있지만 바인드 마운트가 존재하는 동안 디렉토리를 삭제할 수는 없습니다. 새 마운트 지점은 루트가 소유 하므로 /home/olegzandr/foo
소유자는 /home/olegzandr
이를 운영할 수 없습니다.
/home/olegzandr
바인드 마운트가 적용되지 않을 때 소유자가 마운트 지점을 삭제하는 것을 방지하려면 마운트 지점을 /home/olegzandr/foo
변경할 수 없도록 만들어야 합니다. 바인드 마운트가 아직 설치되지 않은 초기 마운트 지점을 생성하려면 다음을 사용합니다.
sudo mkdir /home/olegzandr/foo
sudo chmod 0700 /home/olegzandr/foo
sudo chattr +i /home/olegzandr/foo
/home/olegzandr/foo
이는 바인드 마운트가 적용되지 않는 한 누구도 실수로 데이터를 복사하거나 에서 하위 디렉터리를 생성할 수 없음을 의미합니다 . (바인드 마운트가 적용되면 소유자, 그룹, 권한도 /root/foo
적용됩니다 /home/olegzandr/foo
.)
ext4와 대부분의 다른 파일 시스템에서는 일반적으로 중간 불변 디렉토리를 사용하여 불변 /home/olegzandr/foo/bar
디렉토리를 생성할 수 있습니다 /home/olegzandr/foo
. 이렇게 하면 소유자가 /home/olegzandr
이를 수정하거나 삭제할 수 없으며 /home/olegzandr/foo
삭제할 수도 없습니다 /home/olegzandr/foo/bar
. 후자는 루트가 소유한 디렉토리 내의 하위 디렉토리이기도 하므로 더 이상 영향을 받지 않습니다 /home/olegzandr
.
sudo mkdir /home/olegzandr/foo
sudo mkdir /home/olegzandr/foo/bar
sudo chmod 0555 /home/olegzandr/foo
sudo chattr +i /home/olegzandr/foo
/home/olegzandr/foo/bar
그런 다음 필요에 따라 소유자, 그룹 및 모드를 설정할 수 있습니다. 변경 불가능한 한 /home/olegzandr/foo
삭제될 수 없습니다(루트로도 삭제 가능).
불변 파일 속성을 변경하려면 루트이거나 이 기능이 있어야 합니다 CAP_LINUX_IMMUTABLE
(보통 루트에게만 해당 기능이 있음).