루트가 생성한 파일이 삼바 공유 디렉터리에서 잘못된 권한을 얻는 이유는 무엇입니까?

루트가 생성한 파일이 삼바 공유 디렉터리에서 잘못된 권한을 얻는 이유는 무엇입니까?

루트 사용자가 디렉터리나 파일을 만들 때마다 잘못된 권한을 얻습니다. sambashare그룹의 모든 사용자가 지정된 경로에서 읽고 쓸 수 있기를 바랍니다 . 사용자가 디렉토리를 생성할 때 디렉토리가 얻는 권한은 다음과 같습니다 drwxrws---. 2 sadmin sambashare 4096 Jul 29 02:20 dir1. 이는 시스템 루트 사용자가 디렉토리를 생성할 때 디렉토리가 얻는 권한입니다 drwxr-sr-x. 2 root sambashare 4096 Jul 29 02:19 testdir1. 그래서 루트가 조치를 취한 후 쓰기 권한이 떨어지는 이유와 이를 방지하는 방법을 알고 싶습니다.

follow symlinks = yes
wide links = yes
unix extensions = no
workgroup = WORKGROUP
client min protocol = SMB2_02
client max protocol = SMB3
server string = Samba Server %v
netbios name = samba-server
security = user
map to guest = bad user
dns proxy = no
inherit permissions = yes

[Spi]
path = /srv/servers/spi
force create mode = 0660
force directory mode = 2775
read only = no
valid users = @root @sadmin @sambashare
write list = sadmin

[Www]
path = /var/www
force create mode = 0660
force directory mode = 2770
directory mask = 2770
read only = no
valid users = root sadmin sambashare
write list = sadmin
[root@localhost samba]#

편집하다


Samba를 통해 생성된 파일은 문제가 없지만 서버 터미널(Samba를 통해 연결되지 않은)을 통해 로컬로 생성된 파일에는 잘못된 권한이 부여됩니다.

[root@localhost ~]# umask
0022
[sadmin@localhost ~]$ umask
0002

답변1

왜 이런 권한을 설정해야 합니까?

Unix 스타일 프로그램은 새 파일을 생성할 때 초기 권한을 할당합니다. 이러한 초기 권한은 일반적 0666으로 rw-rw-rw-일반 파일이나 0777디렉터리 rwxrwxrwx또는 실행 파일에 대해 지정됩니다. 이것은 모든 프로그램에 직접적으로 코딩된 것이므로 쉽게 변경할 수 없습니다.

그러나 이러한 초기 권한은 새 파일에 직접 적용되지 않습니다. 운영 체제는 먼저 umask이 값에 설정된 모든 권한 비트를 제거합니다. 즉, "다른" sadmin사용자 에 대한 쓰기 umask 0002비트 -------w-만 제거하고 프로그램이 파일 소유자와 파일이 속한 사용자 그룹에게 요청하는 모든 권한을 허용합니다 . 이로 인해 rw-rw-r--일반 파일, rwxrwxr-x디렉터리 및 실행 파일 에 대한 권한이 부여됩니다 .

반면에 귀하의 root계정에는 umask 0022에 해당하는 이 있으므로 ----w--w-파일의 실제 소유자를 제외한 모든 사람의 쓰기 액세스 권한이 제거됩니다. 이로 인해 rw-r--r--일반 파일, rwxr-xr-x디렉터리 및 실행 파일 에 대한 권한이 부여됩니다 . 루트가 소유하지만 다른 사람이 쓸 수 있는 파일은 특정 보안 위반을 더 쉽게 만들 수 있기 때문에 이는 일반적으로 좋은 것입니다. 이 umask 값은 그러한 파일이 실수로 생성되는 것을 방지합니다.

그런데 왜 루트 편집으로 인해 기존 파일이 변경될 수 있습니까? 글쎄, 그것은 텍스트 편집기가 무엇을 하고 있는지에 따라 다릅니다. 일부 텍스트 편집기는 처음에 새 임시 파일을 생성합니다(그래서 원격으로 작업하고 편집하는 동안 네트워크 연결이 끊어지면 변경 사항을 저장할 수 있습니다). "저장"하면 실제로는 원본 파일만 삭제되고 편집된 임시 복사본의 이름을 원본 복사본으로 바꿉니다. 일부 편집자는 이 과정에서 원본 파일의 권한/소유권을 유지할 수 있지만 전부는 아닙니다. 일부 편집자는 원하는 작업을 수행하도록 구성할 수 있습니다.

이에 대해 무엇을 할 수 있나요?

umask 0002간단한 명령을 사용하여 해당 세션에 대해서만 루트의 umask를 0002로 변경할 수 있습니다 . 또는 적절한 쉘 시작 스크립트에 명령을 추가하여 루트에 대해 지속되도록 만들 수 있습니다. 그러나 루트 계정을 보안 취약성에 더 취약하게 만들기 때문에 이 중 어떤 것도 실제로 권장되지 않습니다.


파일 시스템이 ACL을 지원하는 경우(해당 지원은 파일 시스템 기본값 또는 마운트 옵션을 통해 활성화됩니다. 최신 CentOS에서는 이를 기본적으로 활성화할 수 있습니다) 다음을 설정할 수 있습니다.기본 액세스 제어 목록디렉터리에서 이는 umask설정을 효과적으로 재정의합니다.이 특정 디렉터리에만 해당:

 setfacl -m d:u::rwx,d:g::rwx,d:o::rx /srv/servers/spi

이것이 적용되는 동안 생성된 모든 새 하위 디렉터리는 setgid 비트에서 발생하는 것과 마찬가지로 기본 ACL을 자동으로 상속합니다.

공유에 이미 하위 디렉터리가 있는 경우 /srv/servers/spi전체 디렉터리 트리의 모든 디렉터리에 대해 이 작업을 수행해야 할 수 있습니다.

find /srv/servers/spi -type d -exec setfacl -m d:u::rwx,d:g::rwx,d:o::rx {} \+

대안으로, 모범 관리 사례를 따르는 경우 루트로 로그인하면 안 되므로 개인 계정으로 로그인한 다음 루트를 사용하거나 루트가 될 수 sudo있습니다 su.

그룹에 이 디렉터리에 대한 쓰기 권한을 부여했으므로 sambashare간단히 개인 계정을 그룹에 추가하면 sambashare공유 디렉터리를 변경하기 위해 루트가 될 필요가 없습니다. 더 나은 책임 시스템을 위해 최선을 다합니다.해서는 안 된다개인 계정을 사용하여 변경할 수 있는 경우 루트로 변경하십시오. 시스템에 감사 로깅이 활성화된 경우 감사 로그는 /var/log/audit누가 무엇을 언제, 어떤 상황에서는 중요할 수 있는지 직접 보여줍니다.

실제로 허용되고 수정될 것으로 예상되는 사항을 사용자 그룹 및 파일 권한에 반영하여 모든 사람이 모든 작업에 루트 계정을 일상적으로 사용하는 대신 개인 사용자 계정을 사용하여 정상적인 일상 작업을 수행할 수 있도록 하는 것이 가장 좋습니다.

관련 정보