루트 사용자가 디렉터리나 파일을 만들 때마다 잘못된 권한을 얻습니다. 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
누가 무엇을 언제, 어떤 상황에서는 중요할 수 있는지 직접 보여줍니다.
실제로 허용되고 수정될 것으로 예상되는 사항을 사용자 그룹 및 파일 권한에 반영하여 모든 사람이 모든 작업에 루트 계정을 일상적으로 사용하는 대신 개인 사용자 계정을 사용하여 정상적인 일상 작업을 수행할 수 있도록 하는 것이 가장 좋습니다.