Jak zamontować udział CIFS?


64

Używam Ubuntu 11.10 i próbuję zamontować serwer Freenas. Mam serwer ustawiony do udostępniania w cifs i nfs bez powodzenia.

próbowałem smbmount //192.168.1.### /mnt/

Nie jestem nowy w Ubuntu, ale nie jestem w pobliżu zaawansowanego użytkownika, więc wolałbym opcję GUI, jeśli jest dostępna.

Jak zamontować udział CIF w 11.10?

Odpowiedzi:


88

Istnieje pyNeighborhood, który jest przewodnikiem do montowania udziałów samby i dostępny w centrum oprogramowania do pobrania.

Jest dobry artykuł znajduje się tutaj , jak go skonfigurować i używać.

Najpierw zainstaluj narzędzia cifs

sudo apt-get install cifs-utils

Alternatywnie podstawowa komenda terminalowa to:

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

Jeśli chcesz zobaczyć swojego mounta w Nautilus, dobrze byłoby najpierw utworzyć podfolder w / media / USERNAME / na przykład:

mkdir /media/paul/cifsShare

hasło może również zostać pominięte w poleceniu mount na przykład (pokaże także tryby plików / folderów):

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

w takim przypadku zostaniesz poproszony o podanie hasła (właściwie 2 haseł) w momencie montażu.

Zapoznaj się z dokumentacją Samby tutaj, jak to zrobić i skonfiguruj ją poprawnie, aby zainstalować podczas uruchamiania itp.


2
czy istnieje sposób na zamontowanie udziału samba bez 1) twardego kodowania hasła i 2) konieczności rootowania?
mcExchange

1
@mcExchange root jest potrzebny i możesz użyć pliku poświadczeń smb, aby chronić cię poświadczeń
adampski

4
również upewnić się, że cifs-utilszainstalowane: sudo apt-get install cifs-utils. Aby uzyskać więcej informacji, ten dokument pomocy Ubuntu jest świetny.
Marco Pashkov

1
pyNeighborhood daje mi błąd segmentacji po uruchomieniu przez ssh w Ubuntu 14.04
Pavel Niedoba

1
@MarcoPashkov cifs-utilsmnie podnieca . Nic z tego nie działałoby inaczej. Powinno to zostać bezpośrednio uwzględnione w odpowiedzi.
rubynorails

13

Jest tak, jak powiedział map7, ale jeśli nie chcesz używać uprawnień roota za każdym razem, gdy zmieniasz plik na dysku, będziesz musiał zamontować w folderze użytkownika i upewnić się, że gid i uid są ustawione na twoją nazwę użytkownika .

Polecenie je ustawiające:

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

Zauważ, że mntfolder został utworzony ~/mnt/sharezamiast /mnt/share.

Możesz także pominąć hasło = PASSWD, jeśli chcesz, aby wyświetlał monit zamiast komendy, która jest potencjalnie przechowywana w historii twojej powłoki:

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

1
Podaj bardziej kompletną odpowiedź, z kilkoma przykładami, a ja będę głosować :)
burza

5

1) Mój udział w sambie pokazuje się w Caja (ubuntu 16.04 „explorer“) as

smb://thinkpad/ddrive/

To dobry test lithmus, nie ma problemów z połączeniem / ścieżką.

( zastrzeżenie : jeśli zostaniesz zapytany przez caja o poświadczenia hasła z komputera z systemem Windows, możesz chcieć zmienić domenę z WORKGROUP na nazwę komputera, tj. „thinkpad”. Wtedy powinny wystarczyć autentyczne lokalne dane logowania na dysku.)

2) Jeśli to zadziała, oto polecenie:

sudo mount -t cifs -o username=frank //thinkpad/ddrive /mnt/ddrive
  • Upewnij się wcześniej, że / mnt / ddrive istnieje jako pusty katalog.
  • Przeziębienie dodajesz także ,password=supersecretbezpośrednio (bez spacji) po nazwie użytkownika =, ale możesz także poczekać na monit po wprowadzeniu polecenia.

2
Trochę mi zajęło ustalenie, gdzie mogę wpisać ścieżkę smb: // .... w Nemo / Linux Mint 18, ale w rzeczywistości jest to dość proste: jeśli pole wprowadzania ścieżki nie jest widoczne, włącz je w Zobacz menu.
Pedi T.,

3

Nie zgadzam się z twierdzeniem, że root jest zawsze niezbędny do nawiązania połączenia cifs. To prawda, zawsze jest potrzebne dla interfejsu smbmount z interfejsem CLI, ale menedżer plików, taki jak nautilus, ma możliwość zamontowania udziału cifs i nie musi być rootem.

Nie używam Gnome, ale nadal mam zainstalowany Nautilus. Uruchom to w terminalu, aby zapobiec próbie przejęcia pulpitu

$ nautilus --no-desktop &

W Ubuntu 16.04, menu po lewej stronie drzewa ma „Połącz z serwerem” na dole. Kliknij, że propozycja to wpisz „smb: //foo.example.com”. smb to stare słowo na „cifs”, a jeśli wpiszesz swój serwer i udostępnisz smb: // na początku, połączenie działa! Obiecuję. Jeśli Twój udział jest nazwany, jest wymagany po ukośniku „smb: //foo.example.com/myshare”.

Korzystałem z innych menedżerów plików w ten sam sposób. Protokół musi być „smb: //”.


3
  1. Możesz umieścić wszystkie te szczegóły w / etc / fstab, aby mieć katalogi zamontowane podczas uruchamiania systemu. Jeśli serwer Windows lub SMB ma adres IP 192.168.1.1

    /etc/fstab
    //192.168.1.1/SharedFolder/    /mnt/linux_smb   cifs    username=winuser,password=TopSecret   0    0
    
  2. Utwórz katalog jako punkt montowania Linuxa

    mkdir /mnt/linux_smb
    chmod 755  /mnt/linux_smb
    
  3. Po raz pierwszy zamontuj to ręcznie

    mount -a
    
  4. Ewentualne błędy można znaleźć przez

    dmesg | tail 
    

3
  1. Istnieje konkretny problem możliwy i bardzo frustrujący do rozwiązania, gdy wersje CIF / SMB nie są kompatybilne między Linux a Windows. W takim przypadku możesz po prostu zrobić drobne zmiany w linii fstab, dodając „vers = 2.1”

    Tak więc, jeśli serwer Windows lub SMB ma adres 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. Kroki 2, 3 i 4 pozostają takie same jak w poprzedniej odpowiedzi.


1

Złożyłem mały skrypt (przeznaczony jednak dla Fedory), aby zamontować system plików CIFS z wiersza poleceń i utworzyć / usunąć plik testowy. Może się przydać:

#!/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

jak działają różne metody montażu, ale jest coś, co warto rozważyć

jeśli nie chcesz wpisywać swoich poświadczeń bezpośrednio w / etc / fstab, możesz zamiast tego użyć opcji montowania: credentials = / your / path / here / .credentials

powinno to zawierać nazwę użytkownika = msusername password = mspassword

Zapisz plik i zamknij edytor wyboru.

uprawnienia należy zmienić na chmod 600

jeśli masz zaszyfrowany katalog domowy i chcesz, aby twój mount był uruchomiony przy starcie, upewnij się, że umieściłeś plik poza katalogiem domowym. w / etc / lub / media / może być odpowiednim i łatwym do zapamiętania miejscem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.