편집 후 파일의 소유권을 어떻게 유지하나요?

편집 후 파일의 소유권을 어떻게 유지하나요?

내 문제는 다음과 비슷합니다또 다른, 새로 생성된 파일에 대해 묻는 것 외에도

내 Unix 상자에서 사용자는앨리스,단발그리고수코양이그룹에서수코양이.

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

alice와 bob이 파일을 편집할 수 있도록 이 파일에 대한 권한을 그룹별로 읽기-쓰기로 변경했습니다.

그러나 편집 후에는 해당 파일을 마지막으로 편집한 사용자가 소유하게 되는 것을 확인했습니다.

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

파일을 편집하면 소유권이 어떻게 변경되나요?

답변1

결과 사용자파일의 내용은 편집자의 역할에 따라 다릅니다. 일부 편집자는 파일을 자르고 덮어써서(inode를 변경하지 않고) 파일을 저장합니다. 일부 편집자는 파일 이름을 다른 이름(일반적 file으로 file~)으로 바꾸고 원래 이름으로 새 파일을 만듭니다. 소유자가 변경되지 않도록 원본 파일을 수정하고, 생성 프로세스의 UID가 새 파일을 소유하도록 새 파일을 만듭니다.

내가 데비안에서 사용하는 편집기, nanojoe, 그리고 nvi( vim최소 버전에서는 vim-tiny) 내부 재정의가 있는 것 같습니다. vimEmacs의 기능을 구성할 수 있다고 생각합니다 .


스티븐은 다음과 같이 논평합니다.원자적 업데이트. 내부 재생성의 문제점은 파일이 0 길이로 잘린 다음 작성된다는 것입니다. 모든 데이터를 쓰기 전에 다른 프로세스가 이를 열고 읽을 수 있습니다.

file.new예를 들어 새 버전을 생성한 다음 이름을 file.new으로 변경 하면 원자 업데이트가 수행됩니다 . 이렇게 하면 생성 하고 연결할 file수 있는 백업 파일이 남고 으로 이름이 변경됩니다 . 이름으로 파일에 액세스하는 모든 프로세스는 이전 버전이나 새 버전을 가져오며 그 사이에는 아무것도 가져오지 않기 때문에 이름 바꾸기는 원자적입니다. 물론 열려 있는 파일 핸들은 열려 있는 파일을 가리키며 파일에 대한 일관된 보기를 제공합니다.file.newfilefile~file.newfile


~에서파일 권한관점에서 볼 때 동일한 파일(inode)을 저장하려면 파일 자체(디렉토리 아님)에 대한 쓰기 액세스가 필요하고, 새 파일의 이름을 바꾸고 생성하려면 디렉터리(원본 파일이 아님)에 대한 쓰기 액세스가 필요합니다.

(누군가 공유 디렉터리에서 파일을 생성하거나 수정하고 그룹에 쓰기 액세스 권한을 부여하는 것을 잊어버린 경우 이름 바꾸기 및 다시 생성은 파일 권한을 수정하는 방법이기도 합니다.)

답변2

~처럼설명했다통과이르카초, 사용 중인 편집기가 저장할 때 새 파일을 생성하는지 여부는 제어할 수 없습니다.소유자파일. 하지만 당신이 정말로 관심을 갖는 것은 Tomcat이 여전히 파일을 읽을 수 있는지 확인하는 것입니다. 해당 그룹이 있는지 확인하고 tomcat(그리고 해당 그룹이 읽을 수 있는지 확인하고) setgid이를 상위 파일 비트에 설정 하면 됩니다. 새 파일을 강제로 실행하려면목차:

chmod g+s .

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

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

관련 정보