Unidade de rede Mount CIFS: permissões de gravação e chown

99

Eu tenho acesso a uma unidade de rede CIFS. Quando o montei na minha máquina OSX, posso ler e escrever de e para ele.

Quando monto a unidade no ubuntu, usando:

sudo mount -t cifs -o username=${USER},password=${PASSWORD} //server-address/folder /mount/path/on/ubuntu

Não consigo gravar na unidade de rede, mas posso ler a partir dela. Eu verifiquei as permissões e o proprietário da pasta mount, eles se parecem com:

4.0K drwxr-xr-x  4 root root    0 Nov 12  2010 Mounted_folder

Não consigo alterar o proprietário, porque recebo o erro:

chown: changing ownership of `/Volumes/Mounted_folder': Not a directory

Quando desço mais fundo na unidade de rede e altero a propriedade, recebo o erro de não ter permissão para alterar o proprietário da pasta.

O que devo fazer para ativar minha permissão de gravação?

Vincent
fonte
O sistema de arquivos está listado em / etc / fstab? Em caso afirmativo, que opções tem a entrada?
Jenny D
3
Você também pode usar a nopermopção de montagem descrita de maneira semelhante na minha resposta a esta pergunta: unix.stackexchange.com/a/375523/16287 . Isso dará a todos os usuários acesso de leitura e gravação à montagem CIFS.
Daniel

Respostas:

137

Você está montando o compartilhamento CIFS como raiz (porque usou sudo), portanto não pode escrever como usuário normal. Se sua distribuição Linux e seu kernel forem recentes o suficiente para que você possa montar o compartilhamento de rede como um usuário normal (mas em uma pasta que o usuário possui), você terá as credenciais adequadas para gravar o arquivo (por exemplo, monte a pasta compartilhada em algum lugar na sua diretório inicial, como por exemplo $HOME/netshare/. Obviamente, você precisaria criar a pasta antes de montá-la).

Uma alternativa é especificar o usuário e o ID do grupo que o compartilhamento de rede montado deve usar, isso permitiria que esse usuário em particular e o grupo potencial gravassem no compartilhamento. Inclua as seguintes opções em sua montagem : uid=<user>,gid=<group>e substitua <user>e <group>respectivamente por seu próprio usuário e grupo padrão, que você pode encontrar automaticamente com o idcomando

sudo mount -t cifs -o username=${USER},password=${PASSWORD},uid=$(id -u),gid=$(id -g) //server-address/folder /mount/path/on/ubuntu

Se o servidor estiver enviando informações de propriedade, pode ser necessário adicionar as opções forceuide forcegid.

sudo mount -t cifs -o username=${USER},password=${PASSWORD},uid=$(id -u),gid=$(id -g),forceuid,forcegid, //server-address/folder /mount/path/on/ubuntu
Huygens
fonte
funcionou para mim! Mas devemos acrescentar que, se a pasta compartilhada está em um PC com um domínio de login que você deve adicionar a opção domain. Algo assim: sudo mount -t cifs -o username=${USER},password=${PASSWORD},dom=${DOMAIN}, uid=<user>,gid=<group> //server-address/folder /mount/path/on/ubuntuNa verdade, o domínio pode ir na opção "nome de usuário", mas lembre-se de que você deve usar em /vez de `, like nome de usuário = DOMAIN / user.name`.
João Portela
Sim esta correto. :-) Pode ser necessário especificar o domínio ou o grupo de trabalho (para a versão mais antiga do Windows) através da opção "domain =" ou do nome de usuário, esse é um bom argumento. E, às vezes, é necessário especificar o esquema de criptografia ou a versão CIFS a ser usada. Mas tudo isso não fazia parte dessa pergunta, então deixei de lado. :-)
Huygens
2
Isso é exatamente o que eu precisava. Eu tinha uma entrada no / etc / fstab para montar automaticamente a unidade de rede na inicialização. Eu não poderia escrever ao monte então eu adicionei, uid = <MyUserID> para uma linha parecida com esta://192.168.1.7/public /colmustang cifs username=<uname>,password=<upassword>,uid=<myUserID> 0 0
James
5
@ 71GA usernameé o login remoto para autenticação. O uidé o ID do usuário local em que você deseja tirar uma soneca de todos os arquivos / pastas. Portanto, o nome de usuário é dissociado do uid, o nome de usuário é o login do usuário remoto enquanto o uid é seu ID de usuário local. Observe que pode ser a mesma coisa se seu servidor for Samba e você usar um LDAP ou outra conta centralizada no cliente e no servidor :-).
Huygens
1
@ Tak boa pergunta. Veja a resposta editada.
Gilles
20

Testei o seguinte comando com sucesso:

sudo mount -t cifs -o username=[username],password=[password],uid=1001,gid=1001 //172.16.148.2/dfsgob01 /home/ususario/Documentos/benz-win
ricardo leon
fonte
20
Use "id -u <usuário>" e "id -g <usuário> para obter o uid e o gid, respectivamente.
nvd
3
Note que você pode usar o nome de usuário diretamente como documentado emman mount.cifs
jstricker
2
Para evitar escrever a senha ao lado do comando, basta omitir a opção de senha durante a chamada - um prompt solicitará que ela seja digitada de forma invisível.
conceptdeluxe