نصب و پیکر بندی Samba Server روی Ubuntu 16.04

در این آموزش قصد داریم نحوه نصب و پیکر بندی Samba Server را بر روی سیستم عامل Ubuntu 16.04 آموزش دهیم.

Samba نرم افزار رایگان و متن باز پروتکل SMB/CIFS است که برای سیستم های UNIX/LINUX توسعه داده شده و امکان اشتراک گذاری فایل و پرینتر ها را بین سیستم های UNIX/LINUX و همچنین Windows را در یک شبکه local فراهم میکند.

Samba شامل برنامه های متععدی است که خدمات متفاوتی را عرضه میکنند، اما مهم ترین های آنها عبارتند از :

smbd : سرویس SMB/CIFS را فراهم میکند (File Sharing – Printing ) همچنین میتواند به عنوان windows domain controler عمل کند.

nmbd : سرویس NetBIOS name را فراهم میکند.همچنین این امکان را به Samba Server میدهد که توسط سایر کامپیوتر ها در شبکه دیده شود.

نصب Samba Server روی Ubuntu

بسته Samba در اکثر توزیع های لینوکسی وجود دارد لذا برای نصب تنها کافی است دستور زیر را در ترمینال وارد نمایید :

nix@samba-server:~$ sudo apt install samba samba-common-bin

با استفاده از دستور زیر میتوانید ورژن Samba را چک کنید :

nix@samba-server:~$ sudo smbstatus
OR
nix@samba-server:~$ smbd –version

برای بررسی وضعیت سرویس Samba دستور زیر در ترمینال وارد کنید :

nix@samba-server:~$ systemctl status smbd
nix@samba-server:~$ systemctl status nmbd

برای شروع به کار کردن این دو سرویس دستورات زیر را وارد نمایید :

nix@samba-server:~$ sudo systemctl start smbd
nix@samba-server:~$ sudo systemctl start nmbd

Smbd برروی پورت TCP 135 و TCP 445 و همچنین سرویس nmbd بر روی پورت UDP 137 و UDP 138 کار میکنند.

TCP 139: file and printer sharing
TCP 445: NetBIOS-less CIFS port
UDP 137: NetBIOS network browsing
UDP 138: NetBIOS name service

ساخت Samba Share اختصاصی

در این قسمت با ساخت Samba share اختصاصی آشنا میشویم که کاربران برای دسترسی به محتویات آن میبایست از نام کاربری و رمز عبور استفاده کنند.

فایل اصلی حاوی تنظیمات samba درetc/samba/smb.conf قرار دارد که میتوانید با ادیتور مورد علاقه خود آن را ویرایش کنید.

nix@samba-server:~$ sudo vim /etc/samba/smb.conf

در قسمت [global] مطمئن شوید که مقدار workgroup با تنظیمات کامپیوتر های ویندوزی یکسان میباشد.

برای پیدا کردن تنظیمات در کامپیوتر های ویندوزی میتوانید به آدرس زیر بروید :

Control Panel > System and Security > System

به آخر فایل بروید و قسمت جدید [Private] را ایجاد کنید.(اگر از vim استفاده میکنید با میانبر G و اگر از nano استفاده میکنید با میانبر CTRL+W سپس CTRL+V به آخر متن بروید)

[Private]
comment = needs username and password to access
path = /srv/private/
browseable = yes
guest ok = no
writable = yes
valid users = @samba

توضیحات :

Private : اسم دایرکتوری خواهد بود که کاربران به آن دسترسی خواهند داشت.

comment : یک توضیح برای دایرکتوری به اشتراک گذاشته شده میباشد.

Path : آدرس دایرکتوری است که قصد به اشتراک گذاری آن را داریم، srv/private تنها یک مثال است.شما میتوانید یک دایرکتوری در home خود ایجاد نمایید.

browseable = yes: این گزینه به کاربران این امکان را میدهد کامپیوتر ها درون شبکه بتوانند Samba Server و Share Directory را پیدا کنند، اگر این گزینه برابر با no باشد کاربران میبایست اسم Samba Server را بدانند.

guest ok = no: دسترسی مهمان را غیر فعال کنید، در واقع کاربر میبایست نام کاربری و پسورد را وارد کند تا بتواند به محتویات دسترسی داشته باشد.

writable = yes:به کاربران امکان خواندن و نوشتن را میدهیم.

valid users = @samba: فقط کاربران عضو گروه samba قابلت دسترسی به Samba Server رو دارند.

فایل را ذخیره و خارج شوید.

حالا باید کاربر samba بسازیم.ابتدا باید یه کاربر استاندارد لینوکس ایجاد کنیم.در دستور زیر username را با نام کاربری مورد نظر خود جایگزین نمایید.

nix@samba-server:~$ sudo adduser smbus

سپس نیاز داریم که پسورد مجزای samba را برای این کاربر در نظر بگیریم.

nix@samba-server:~$ sudo smbpasswd -a smbus

با استفاده از دستور زیر گروه samba را ایجاد میکنیم :

nix@samba-server:~$ sudo groupadd samba

کاربر را به گروه samba اضافه میکنیم

nix@samba-server:~$ sudo gpasswd -a smbus samba

 با استفاده از دستور زیر دایرکتوری share را ایجاد میکنیم :

nix@samba-server:~$ sudo mkdir /srv/private/

گروه samba باید مجوز read, write ,execute را به دایرکتوری به اشتراک گذاشته شده را داشته باشه، برای انجام این کار دستور زیر را در ترمینال وارد نمایید

nix@samba-server:~$ sudo setfacl -R -m “g:samba:rwx” /srv/private/

با اجرای دستور زیر میتوانید چک خطای syntax را چک نمایید :

nix@samba-server:~$ Testparmnix

در نهایت سرویس samba را با استفاده از دستور زیر restart نمایید :

nix@samba-server:/root$ sudo systemctl restart smbd nmbd

ساخت Samba Public Share بدون احراز هویت

برای ساخت samba public share بدون نیاز به نام کاربری و رمز عبور شرایط زیر را در قسمت [global] باید در نظر گرفت.

  • security = user : البته میتوانید security = share قرار دهید ولی این روش منسوخ شده است و توصیه میکنم از حالت share جداً اجتناب کنید.
  • map to guest = bad user : این باعث میشود smbd از guest account برای احراز هویت کاربرانی که در سرور حساب کاربری ندارند استفاده نماید.از آنجایی که کاربر guest میباشد نیاز به وارد کردن پسورد ندارد.
  • guest ok = yes
  • اعطای دسترسی read, write ,execute به گروه nobody که در واقع حساب پیش فرض guest میباشد.

نکته : بصورت پیش فرض samba دو شرط اول را استفاده میکند.

ابتدا فایل تنظیمات Samba را با ویرایشگر مورد نظر خود باز نمایید :

nix@samba-server:/root$ sudo vim /etc/samba/smb.conf

در قسمت [global] مطمئن شوید که مقدار workgroup با تنظیمات کامپیوتر های ویندوزی یکسان میباشد.

برای پیدا کردن تنظیمات در کامپیوتر های ویندوزی میتوانید به آدرس زیر بروید :

Control Panel > System and Security > System

به آخر فایل بروید و قسمت جدید [public] را ایجاد کنید.(اگر از vim استفاده میکنید با میانبر G و اگر از nano استفاده میکنید با میانبر CTRL+W سپس CTRL+V به آخر متن بروید)

[public]
comment = public share, no need to enter username and password
path = /srv/public/
browseable = yes
writable = yes
guest ok = yes

فایل را ذخیره و خارج شوید.سپس دایرکتوری srv/public را ایجاد نمایید :

nix@samba-server:/root$ sudo mkdir /srv/public

سپس مطمئن شوید که گروه nobody دسترسی read, write and execute را این دایرکتوری دارد، با استفاده از دستور زیر میتوانید دسترسی های لازم را ایجاد نمایید :

nix@samba-server:/root$ sudo setfacl -R -m “u:nobody:rwx” /srv/public/

حالا میبایست سرویس smbd و  nmbd را restart نمایید :

nix@samba-server:/root$ sudo systemctl restart smbd nmbd

دسترسی به Samba Server از طریق ویندوز :

این کار را میتوانید از طریق تب Network در File Explorer انجام دهید یا اینکه در RUN آدرس/اسم samba server را وارد نمایید.

زمانی که بر روی Private کلیک نمایید از شما نام کاربری و رمز عبور تعیریف شده در samba server را میخواهد.برای دسترسی به Public به نام کاربری و رمز عبور نیاز نخواهید داشت.

نکته : اگر بطور همزمان دایرکتوری Private و Public را باز داشته باشید ممکن است امکان ساخت فایل یا دایرکتوری جدید را نداشته باشید.

خطا های احتمالی :

اگر با خطای زیر برخورد کردید سعی کنید که از طریق CMD به samba متصل شوید.

Error : You do not have permission to access \\hostname\share-name. Contact your network administrator to request access.

دستور زیر را در CMD وارد نمایید تا کانکشن بازی که هم اکنون وجود دارد را ببندد :

net use \\hostname\share-name /delete

سپس با استفاده از دستور زیر به Samba Server تصل شوید:

net use \\hostname\share-name /user:samba-username password

بعد از اجرای این دستو قادر خواهید بود در تب Network در File Explorer به دایرکتوری های به اشتراک گذاشته شده ی samba دسترسی داشته باشید.

دسترسی به Samba Server از طریق Ubuntu :

در File Manager خود بر روی تب Network در پنل سمت چپ کلیک نمایید سپس Windows Network را انتخاب نمایید.

سپس Workgroup ، آدرس سرور، نام کاربری و پسورد را در پنجره باز شده وارد نمایید.