Como monto um compartilhamento CIFS?


64

Estou usando o Ubuntu 11.10 e estou tentando montar um servidor freenas. Eu tenho o servidor definido para compartilhar cifs e nfs sem sorte.

eu tentei smbmount //192.168.1.### /mnt/

Eu não sou novo no Ubuntu, mas não estou nem perto de um usuário avançado, por isso prefiro uma opção de GUI, se disponível.

Como montar um compartilhamento cifs na 11.10?

Respostas:


88

pyNeighborhood, que é uma interface gráfica para a montagem de compartilhamentos de samba e está disponível no software center para download.

Há um bom artigo localizado aqui sobre como configurá-lo e usá-lo.

Primeiro instale cifs utils

sudo apt-get install cifs-utils

Como alternativa, o comando básico do terminal é:

mount -t cifs -o username=USERNAME,password=PASSWD //192.168.1.88/shares /mnt/share

Se você gostaria de ver sua montagem no Nautilus, seria bom criar uma subpasta primeiro em / media / USERNAME / por exemplo:

mkdir /media/paul/cifsShare

Além disso, a senha pode ser omitida no comando mount, por exemplo (também demonstrará os modos de arquivo / pasta):

sudo mount -t cifs //nas-server/cifsShare /media/paul/cifsShare -o username=paulOnNAS,iocharset=utf8,file_mode=0777,dir_mode=0777,soft,user,noperm

neste caso, você será solicitado a senha (na verdade, 2 senhas) no momento da montagem.

Leia a documentação do Samba aqui sobre como fazê-lo e configure-o corretamente para montar na inicialização, etc.


2
existe uma maneira de montar o compartilhamento samba sem 1) codificar a senha e 2) ter que ser root?
precisa saber é o seguinte

11
A raiz do @mcExchange é necessária e você pode usar o arquivo de credenciais smb para protegê-lo.
adampski

4
Também certifique-se de ter cifs-utilsinstalado: sudo apt-get install cifs-utils. Para mais informações, este documento de ajuda do ubuntu é ótimo.
Marco Pashkov 31/03

11
pyneighborhood me dá falha de segmentação quando começou sobre ssh no Ubuntu 14.04
Pavel Niedoba

11
@MarcoPashkov cifs-utilsé o que me deixou de pé. Nada disso funcionaria de outra maneira. Isso deve ser incluído diretamente na resposta.
rubynorails

13

É como o map7 disse, mas se você não quiser usar permissões de root toda vez que alterar um arquivo na unidade, será necessário montar em uma pasta de usuário e garantir que gid e uid estejam definidos como seu nome de usuário .

O comando que os define:

mount -t cifs -o username=USERNAME,password=PASSWD,uid=$USER,gid=$USER //192.168.1.88/shares ~/mnt/share

Observe que a mntpasta foi criada em ~/mnt/sharevez de /mnt/share.

Além disso, você pode deixar de fora a senha = PASSWD se desejar que você solicite, em vez de tê-lo no comando, que é potencialmente armazenado no histórico do seu shell:

mount -t cifs -o username=USERNAME,uid=$USER,gid=$USER //192.168.1.88/shares ~/mnt/share

11
Faça uma resposta mais completa, com alguns exemplos e eu vou upvote :)
tempestade

5

1) Meu compartilhamento de samba é exibido no Caja (o ubuntu 16.04 „explorer“) como

smb://thinkpad/ddrive/

Este é um bom teste litográfico, não há problemas de conexão / caminho.

( ressalva : se você for solicitado pelo caja sobre credenciais de senha da sua máquina Windows, convém alternar Domínio de GRUPO DE TRABALHO para o nome da máquina, ou seja, 'thinkpad'. Em seguida, as credenciais de login verdadeiramente locais da sua unidade devem fazer isso.)

2) Se isso funcionar, aqui vem o comando:

sudo mount -t cifs -o username=frank //thinkpad/ddrive /mnt/ddrive
  • Certifique-se de antemão, / mnt / ddrive existe como um diretório vazio.
  • Você também adiciona um ,password=supersecretdiretamente (sem espaço) após o nome de usuário =, mas também pode esperar que seja solicitado quando digitar o comando.

2
Demorei um pouco para descobrir, onde posso digitar o caminho smb: // .... no Nemo / Linux Mint 18, mas na verdade é bem simples: se a caixa de entrada do caminho não estiver visível, ative-a no Exibir menu.
precisa

3

Não concordo com a afirmação de que o root é sempre necessário para fazer com que as conexões CIFs funcionem. É verdade, é sempre necessário para a montagem de CLI, mas um gerenciador de arquivos como o nautilus tem capacidade de montar um compartilhamento cifs e não é necessário ser root.

Não uso o Gnome, mas ainda tenho o Nautilus instalado. Execute isso em um terminal para evitar que ele tente dominar a área de trabalho

$ nautilus --no-desktop &

No Ubuntu 16.04, o menu da árvore do lado esquerdo tem "Connect to Server" na parte inferior. Clique nisso, a sugestão é do tipo "smb: //foo.example.com". smb é a palavra antiga para "cifs", e se você colocar no servidor e compartilhar com smb: // no início, a conexão funcionará! Eu prometo. Se o seu compartilhamento for nomeado, será necessário após uma barra "smb: //foo.example.com/myshare".

Eu usei outros gerenciadores de arquivos da mesma maneira. O protocolo deve ser "smb: //".


3
  1. Você pode colocar todos esses detalhes em / etc / fstab para ter diretórios montados na inicialização do sistema. Se o Windows ou servidor SMB estiver no endereço IP 192.168.1.1

    /etc/fstab
    //192.168.1.1/SharedFolder/    /mnt/linux_smb   cifs    username=winuser,password=TopSecret   0    0
    
  2. Criar diretório como ponto de montagem linux

    mkdir /mnt/linux_smb
    chmod 755  /mnt/linux_smb
    
  3. Pela primeira vez, monte isso manualmente

    mount -a
    
  4. Eventuais erros podem ser encontrados por

    dmesg | tail 
    

3
  1. Há um problema específico possível e muito frustrante de resolver quando as versões do CIF / SMB não são compatíveis entre o Linux e o Windows. Nesse caso, você pode apenas fazer pequenas alterações na linha fstab adicionando "vers = 2.1"

    Portanto, se o servidor Windows ou SMB estiver no endereço IP 192.168.1.1

    /etc/fstab
    
    //192.168.1.1/SharedFolder/   /mnt/linux_smb   cifs   vers=2.1,username=winuser,password=TopSecret   0    0
    
  2. Os passos 2, 3 e 4 permanecem os mesmos da resposta anterior.


1

Eu montei um pequeno script (para o Fedora) para montar o sistema de arquivos CIFS a partir da linha de comando e criar / excluir um arquivo de teste. Pode ser de alguma utilidade:

#!/bin/bash
# Passes https://www.shellcheck.net/

set -o nounset

# See 
#   https://wiki.samba.org/index.php/Mounting_samba_shares_from_a_unix_client
#   https://access.redhat.com/solutions/448263
# and also
#   https://serverfault.com/questions/309429/mount-cifs-credentials-file-has-special-character

# One needs to run "yum install cifs-utils" to have the kernel module, man page
# and other stuff.

rpm --query cifs-utils > /dev/null

if [[ $? != 0 ]]; then
   echo "Package cifs-utils is not installed -- exiting" >&2
   exit 1
else 
   ver=$(rpm --query cifs-utils)
   echo "Package $ver exists ... good!" >&2
fi

# Where to find credentials? Use the "credential file" approach, which
# we call "authfile". Example content (w/o the leading #) below.
# Make sure there are no spaces around '=' (this is different than
# for "smbclient" which can deal with spaces around '='.)
# ----8<------8<----------------
# username=prisoner
# password=KAR120C
# domain=VILLAGE
# ----8<------8<----------------
# Trailing empty lines will lead to (harmless) error messages
# "Credential formatted incorrectly: (null)"

authfile='/etc/smb.passwd' # Make sure read permissions are restricted!!

# Server to contact.
# In the UNC path, we will use DNS name instead of the (more correct?)
# NetBIOS name.
# mount.cifs manpage says: "To mount using the cifs client, a tcp name
# (rather than netbios name) must be specified for the server."

server_dns=thedome.example.com

# The name of the connecting client, just to be sure (probably useless)

client_nbs=$(hostname --short | tr '[:lower:]' '[:upper]')

if [[ -z $client_nbs ]]; then
  client_nbs=UNKNOWN
fi

# Connect to a certain service (which is a fileservice)
# and then switch to the given directory.
# Instead of appending $directory to form the complete UNC
# (Uniform Naming Convention) path, one could also use the option 
# "prefixpath".
# If there is no need to mount a subdirectory of the service,
# the UNC would just be unc="//$server_dns/$service_name"

service_name='information'
directory='PERSONALDATA'

unc="//$server_dns/$service_name/$directory"

# Finally, we will mount the CIFS filesystem here (the
# permissions on that node are not directly of interest)

mntpoint=/mnt/portal

if [[ ! -d "$mntpoint" ]]; then
   mkdir "$mntpoint"
   if [[ $? != 0 ]]; then
      echo "Could not create mountpoint '$mntpoint' -- exiting" >&2
      exit 1
   fi
fi

# Only this user will be able to access the mounted CIFS filesystem

user=number6
group=number6

# Try to mount this so that only user "number6" can access it

mount -t cifs \
   "$unc" \
   "$mntpoint" \
   --read-write \
   --verbose \
   -o "credentials=$authfile,uid=$user,gid=$group,netbiosname=$client_nbs,file_mode=0660,dir_mode=0770"

res=$?

if [[ $res != 0 ]]; then
   echo "Mount failed!" >&2
   echo "Return code $res; more info may be in kernel log or daemon log" >&2
   echo "Try 'journalctl SYSLOG_FACILITY=0' or 'journalctl SYSLOG_FACILITY=3'" >&2
   echo "...exiting" >&2
   exit 1
fi

# Check permissions on the mount point

stat=$(stat --format="group=%G user=%U access=%A" "$mntpoint")
soll="group=$group user=$user access=drwxrwx---"

if [[ $stat != "$soll" ]]; then
   echo "Incorrect permissions on root of '$mntpoint'" >&2
   echo "Expected: $soll" >&2
   echo "Obtained: $stat" >&2
   echo "...exiting" >&2
   umount "$mntpoint"
   exit 1
fi

# CD to the mountpoint to be sure

cd "$mntpoint"

if [[ $? != 0 ]]; then
  echo "Could not cd to '$mntpoint'" >&2
  exit 1
fi

# CD to directory TEST which must exist (change as appropriate)

newcd="$mntpoint/TEST"

if [[ ! -d "$newcd" ]]; then
   echo "Directory '$newcd' not found - can't test!" >&2
   echo "...exiting" >&2
   exit 1
fi

cd "$newcd"

if [[ $? != 0 ]]; then
  echo "Could not cd to '$newcd'" >&2
  exit 1
fi

# Create a file and check the permissions

testfile=$(mktemp --tmpdir="$newcd")

if [[ $? != 0 ]]; then
   echo "Could not create temporary file in '$newcd'" >&2
   exit 1
fi

stat=$(stat --format="group=%G user=%U access=%A" "$testfile")
soll="group=$group user=$user access=-rw-rw----"

if [[ $stat != "$soll" ]]; then
   echo "Incorrect permissions on temporary file '$testfile'" >&2
   echo "Expected: $soll" >&2
   echo "Obtained: $stat" >&2
   echo "...exiting" >&2
   exit 1
fi

/bin/rm "$testfile"

echo "Mounted '$unc' on '$mntpoint'" >&2

1

como os diferentes métodos de montagem funcionam se esgotou, mas há algo que você pode querer considerar

se você não quiser inserir suas credenciais diretamente no / etc / fstab, use uma opção de montagem: credentials = / your / path / here / .credentials

isso deve conter nome de usuário = msusername senha = mspassword

Salve o arquivo e saia do seu editor de escolha.

permissões devem ser alteradas para chmod 600

se você possui um diretório inicial criptografado e deseja que sua montagem seja inicializada, certifique-se de colocar o arquivo fora do diretório inicial. em / etc / ou / media / pode ser um local adequado e facilmente memorável.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.