Linux 및 SMB 권한이 예상대로 작동하지 않습니다.

Linux 및 SMB 권한이 예상대로 작동하지 않습니다.

클라이언트 파일을 안전하게 수신하기 위해 CentOS 서버를 SFTP 서버로 구성했습니다. 그런 다음 SMB를 통해 이러한 파일에 액세스할 수 있어야 합니다.

  • 내 SFTP "루트"는 /var/inbound/에 있습니다.
  • 그런 다음 /var/inbound/ 아래에 각 고객에 대한 디렉터리가 있습니다(예: /var/inbound/customer1/
  • 그런 다음 사용자를 감옥에 보내기 위해 각 고객 디렉터리 아래에 uploads라는 하위 디렉터리가 있습니다(예: /var/inbound/customer1/uploads/).

예상대로 작동하도록 권한을 얻었으며 SFTP에 대한 클라이언트 액세스를 지원하는 데 모든 것이 정상입니다. 한 가지 중요한 측면은 사용자를 /var/inbound/ 디렉토리에 "감금"한다는 것입니다.

이제 /var/inbound 디렉터리를 만들었습니다.

sudo mkdir /var/inbound
sudo chown root.root /var/inbound #root must be owner of directory

각 클라이언트에 대한 하위 디렉터리를 만드는 방법은 다음과 같습니다.

sudo mkdir -p /var/inbound/[username]/uploads
sudo chown root /var/inbound/[username]
sudo chmod go-w /var/inbound/[username]
sudo chown [username]: /var/inbound/[username]/uploads
sudo chmod 770 /var/inbound/[username]/uploads

노트:/var/inbound/[username]/ 및 /var/inbound/[username]/uploads/ 디렉토리에는 특별한 권한 세트가 필요합니다. [username]을 해당 사용자로 바꿔서 다음 명령을 실행합니다.

이제 SSH/SFTP 구성의 나머지 부분을 설명하겠습니다. 하지만 사용자를 자신의 디렉터리에 가두어 SCPONLY를 사용하여 SSH/콘솔 액세스를 비활성화할 수 있다는 것만 말씀드리면 충분합니다.

이제 상황이 복잡해집니다...

이제 특정 계정에 SMB 액세스 권한을 부여해야 합니다.파일 액세스)를 Windows Server 호스트에서 액세스할 수 있는 /var/inbound/ 디렉터리로 복사합니다. 나는 하위 디렉토리를 포함하여 /var/inbound 디렉토리를 Windows 공유로 처리했습니다. 그러나 일부 파일을 볼 수 없으며 필요한 파일에 대한 쓰기 액세스 권한이 없습니다.

$ ls -l /var/inbound
total 0
drwxr-xr-x. 3 root root 20 Jan  5 11:53 testuser

$ ls -l /var/inbound/testuser
total 0
drwxrwxr-x. 2 testuser sftponly 53 Jan  5 12:26 uploads

이제 이것이 내가 액세스하려는 디렉토리입니다파일 액세스계정:

$ ls -la /var/inbound/testuser/uploads/ 
total 12 
drwxrwx---. 2 testuser    sftponly   53 Jan 5 15:12  . 
drwxr-xr-x. 3 root        root       20 Jan 5 11:53  .. 
-rw-r--r--. 1 fileaccess  sftponly   30 Jan 5 12:26  test2.txt 
-rw-r--r--. 1 testuser    sftponly   26 Jan 5 12:25  test3.txt 
-rw-rw-r--. 1 dmgmadmin   dmgmadmin  14 Jan 5 11:53  test.txt

SMB를 통해 연결할 때파일 액세스계정에서는 test.txt만 볼 수 있지만 파일을 열 수는 없습니다(액세스 거부됨).

이것은 내 smb.conf입니다. 보시다시피 저는 다양한 옵션을 시도해 왔습니다.

    [global]
    workgroup = <MYDOMAINNAMEGOESHERE>
    security = user

    passdb backend = tdbsam

    [inbound]
    comment = Incoming files (as %u)
    path = /var/inbound/
    valid users = fileaccess
    guest ok = No
    read only = No
    writeable = Yes
    browseable = Yes
    create mask = 0640
    directory mask = 0750

노트:도메인이 있지만 이 CentOS 시스템은 도메인의 일부가 아닙니다. 내 Windows AD DNS에 항목이 있고 DNS 서버를 사용하도록 구성되어 있지만 그게 끝입니다. 이 기계를 격리하고 싶습니다. 따라서 로컬 CentOS 계정을 사용하여 서버에 연결해 보십시오.

특히 이것이 Linux 파일 시스템 액세스 문제일 수 있고 필요한 변경 사항이 필요한 SFTP 권한과 충돌할 수 있다는 점이 우려됩니다. 예를 들어 SFTP에서는 /var/inbound// 디렉터리를 루트가 소유해야 합니다.

계정에 찾아보기/읽기/권한이 있도록 SMB.conf에서 문제의 계정에 대한 액세스 권한을 적용하는 방법이 있는지 궁금합니다. smb.conf에서 다양한 구성 옵션을 시도했습니다(smb.conf 매뉴얼을 읽었습니다).여기).

답변1

또한 "acl" 패키지를 확인해 보는 것이 좋습니다. 고급 ACL은 기존 Unix ACL보다 훨씬 편리해서 지금은 항상 사용하고 있습니다.

답변2

얼룩말을 쫓고 있었던 것 같습니다.

/dev/chat 채널의 derobert 및 terdon과 같은 사용자들의 도움 덕분에 문제가 실제로 SELinux에 있음을 발견했습니다. 사실은,Samba에 관한 CentOS 위키 문서다음과 같이 말해보세요:

"이제 semanage 명령(SELinux 패키지의 일부)을 사용하여 네트워크와 공유하려는 디렉터리를 엽니다. 맞습니다. 이렇게 하지 않으면 삼바를 시작하고 빈 디렉터리와 서버가 당신의 모든 데이터를 삭제했다고 생각하면 당황합니다!”

따라서 실행해야 할 명령은 다음과 같습니다.

sudo semanage fcontext -a -t samba_share_t '/var/inbound(/.*)?'
sudo restorecon -R /var/inbound

번영! 이제 예상대로 파일에 액세스할 수 있습니다.

관련 정보