편집 후 파일의 소유권을 유지하는 방법은 무엇입니까? , bob 및 tomcat 은 tomcat

내 질문은 새로 만든 파일에 대해 묻는 것을 제외하고는 다른 질문과 비슷 합니다.

내 유닉스 상자에서 사용자 alice , bobtomcattomcat 그룹에 있습니다.

Tomcat 서버의 구성 파일은 tomcat 사용자와 tomcat 그룹에서 소유합니다.

alice와 bob이 파일을 편집 할 수 있도록이 파일의 권한을 그룹별로 읽고 쓸 수 있도록 변경했습니다.

그러나 편집 후 파일을 편집 한 마지막 사용자가 파일을 소유하고 있음을 알았습니다.

Q : Alice와 Bob이 소유권을 변경하지 않고 파일을 편집 할 수 있도록 권한을 변경할 수 있습니까?

어쨌든 파일을 편집하면 소유권이 어떻게 변경됩니까?



답변

파일 의 결과 사용자 는 편집기의 기능에 따라 다릅니다. 일부 편집기는 파일을 자르고 파일을 덮어 써서 (아이 노드를 변경하지 않고) 저장합니다. 그리고 어떤 편집자는 (다른 이름으로 파일의 이름을 변경 filefile~보통이다), 원래의 이름으로 새 파일을 만듭니다. 원본 파일을 수정하면 소유자가 동일하게 유지되고 새 파일을 만들면 작성 프로세스의 UID가 새 파일을 소유하게됩니다.

편집자 나는 데비안에있는, nano그리고 joe뿐만 아니라, nvivim(의 최소 버전 vim-tiny에서 현재 위치에 덮어 쓰기하는 것). 내가 생각하지만 vimEmacs는 아마도 그들이하는 일에서 구성 할 수 있다고 생각합니다.


Stephen은 원자 업데이트에 대해 언급 합니다 . 전체 재생성 문제는 파일 길이가 0으로 잘린 다음 기록된다는 것입니다. 다른 프로세스는 모든 데이터를 쓰기 전에이를 열어 읽을 수 있습니다.

원 자성 업데이트는 새 버전을 말한 file.new다음로 이름 file.new을 바꾸면 됩니다 file. 백업 파일을 떠나, 하나는 만들 수 file.new, 링크를 filefile~누른 다음 이름 바꾸기 file.newfile. 이름으로 파일에 액세스하는 프로세스가 이전 버전이나 새 버전 중 하나를 얻지 못하기 때문에 이름 바꾸기는 원자 적입니다. 열려있는 파일 핸들은 열려있는 파일을 가리키며 파일에 대한 일관된보기를 제공합니다.


로부터 파일 권한 같은 파일 (아이 노드)을 통해 절약의 관점이 파일 자체 (그러나 디렉토리)에 대한 쓰기 액세스를 필요로 이름을 변경하고 새로 작성하는 디렉토리에 대한 쓰기 액세스 (하지만 원본 파일이 필요합니다 ).

(이름 바꾸기 및 다시 작성은 누군가가 공유 디렉토리에서 파일을 작성하거나 수정하지만 그룹에 파일에 대한 액세스 권한을 부여하는 것을 잊은 경우에 대비하여 파일 권한을 수정하는 방법입니다.)


답변

ilkkachu 에서 설명 하는 것처럼 사용중인 편집기가 저장시 새 파일을 작성하는 경우 파일 소유자 를 제어 할 방법이 없습니다 . Tomcat이 파일을 읽을 수있게 유지하는 것이 중요합니다. 그룹이 ( 그룹에 의해 읽을 수 있는지) 확인 하고 부모 디렉토리 에 비트를 설정하여 새 파일에 적용 할 수 있는지 확인하여이를 수행 할 수 있습니다 .tomcatsetgid

chmod g+s .

따라서 bob파일을 재생성하는 편집기를 사용하여 파일을 편집하면 편집 된 파일이 소유하게되며 bob:tomcatTomcat은 여전히 ​​( umask적어도 최소한) 읽을 수 있습니다 . tomcat그룹 에서 상위 디렉토리를 쓸 수있는 한 해당 그룹의 모든 사용자는 디렉토리에서 파일을 다시 작성할 수만 있으면 파일을 편집 할 수 있습니다.

그러나 프로세스 변경을 검토하는 것이 좋습니다. Tomcat이 읽은 위치에서 파일을 직접 편집해서는 안됩니다. 이상적으로 파일은 일종의 VCS로 유지 관리되며 별도의 프로세스 (자동화 가능)로 배포됩니다. 그렇게하면 모든 소유권 문제를 피할 수 있습니다 …


답변