As permissões Linux e SMB não funcionam como esperado

6

Eu configurei um servidor CentOS para ser um servidor SFTP que recebe arquivos de clientes de maneira segura. Então eu preciso ser capaz de acessar esses arquivos via SMB.

  • A 'raiz' do meu SFTP está em / var / inbound /
  • Em seguida, em / var / inbound / eu tenho um diretório para cada cliente (por exemplo, / var / inbound / customer1 /
  • Então, para prender usuários, eu tenho um subdiretório chamado uploads em cada diretório do cliente (por exemplo, / var / inbound / customer1 / uploads /)

Consegui fazer com que as permissões funcionassem conforme o esperado e tudo está em ordem para dar suporte ao acesso do cliente ao SFTP. Um aspecto importante é que eu "prendi" os usuários em seus diretórios / var / inbound /.

Aqui está agora eu criei o diretório / var / inbound:

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

E aqui está como eu crio os subdiretórios para cada cliente:

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

NOTE: Both the /var/inbound/[username]/ and /var/inbound/[username]/uploads/ directories need a special set of permissions. Perform the following commands, replacing [username] with the user in question.

Agora eu vou poupá-lo da configuração SSH / SFTP restante. Mas é suficiente dizer que posso fazer com que os usuários sejam presos em seus próprios diretórios, e que eu desabilitei o acesso SSH / console usando SCPONLY.

Agora, onde as coisas se complicam ...

Agora preciso dar acesso SMB a uma conta específica (vamos chamá-lo fileaccess ) para o diretório / var / inbound /, que será acessível a partir de um host do Windows Server. Eu consigo ver o diretório / var / inbound como um compartilhamento do Windows, incluindo seus subdiretórios. No entanto, não consigo ver alguns arquivos e não tenho acesso de gravação aos arquivos para os quais devo ter acesso.

$ 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

Agora aqui está o diretório que eu quero acessar com a conta filaccess :

$ 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

Quando me conecto via SMB com a conta filaccess , só consigo ver o test.txt, mas não consigo abrir o arquivo (acesso negado).

Aqui está o meu smb.conf. Como você pode ver, tentei uma série de opções diferentes:

    [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

NOTA: Embora eu tenha um domínio, essa máquina do CentOS não faz parte dela. Ele tem uma entrada no meu DNS do Windows AD e está configurado para usar o servidor DNS - mas isso é o fim. Eu quero que esta máquina seja isolada. Portanto, as tentativas de se conectar a esse servidor são feitas com contas CentOS locais.

Estou particularmente preocupado que isso possa ser um problema de acesso ao sistema de arquivos Linux e que as alterações necessárias possam entrar em conflito com as permissões de SFTP necessárias (por exemplo, o SFTP exige que os diretórios / var / inbound sejam de propriedade root).

Gostaria de saber se existe uma maneira de impor no SMB.conf os direitos de acesso para a conta em questão, para que a conta tenha permissões de navegação / leitura / direito. Eu tentei todos os tipos de opções de configuração em smb.conf (Eu tenho lido o manual para smb.conf aqui ).

    
por pmdci 04.01.2017 / 17:24

2 respostas

1

Parece que eu estava perseguindo uma zebra o tempo todo.

Graças à ajuda dos usuários derobert, terdon e outros no canal / dev / chat, descobrimos que o problema é realmente o SELinux. Na verdade, a documentação do CentOS wiki sobre o Samba diz o seguinte:

"Now we're going to use the semanage command (part of the SELinux package) to open up the directory(s) you desire to share with the network. That's right. Without doing this, you'll start up samba and get a bunch of blank directories and panic thinking the server deleted all your data!"

Então o comando que eu precisava realizar era:

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

E boom! Agora eu poderia acessar os arquivos como esperado.

    
por 05.01.2017 / 20:42
2

Eu também recomendo que você dê uma olhada no pacote 'acl'. As ACLs avançadas são muito mais convenientes em comparação com a tradicional ACL Unix, e eu estou usando isso o tempo todo agora.

    
por 17.01.2017 / 10:23