همانطور که می دانید برای به اشتراک گذاری و انتقال اطلاعات بین سیستم عامل لینوکس و دیگر سیستم عاملها نظیر ویندوز می توان از سرویس سامبا استفاده کرد به عبارتی دیگر، سامبا پروتکل به اشتراک گذاری فایل ها و منابع موجود در شبکه می باشد. پیکربندی سرویس سامبا به دو روش Secure و Anonymous قابل انجام است که در این مقاله به تشریح مراحل پیکربندی این سرویس به هر دو این روشها در محیط اوراکل لینوکس 7.6 می پردازیم.
پیکربندی به روش Secure
مرحله اول: به عنوان گام اول، بسته سامبا را نصب می کنیم:
[root@OLinux7 ~]# yum install samba
—> Package samba.x86_64 0:4.8.3-4.el7 will be installed
–> Processing Dependency: samba-libs = 4.8.3-4.el7 for package: samba-4.8.3-4.el7.x86_64
–> Processing Dependency: samba-common-tools = 4.8.3-4.el7 for package: samba-4.8.3-4.el7.x86_64
–> Processing Dependency: libxattr-tdb-samba4.so(SAMBA_4.8.3)(64bit) for package: samba-4.8.3-4.el7.x86_64
–> Processing Dependency: libxattr-tdb-samba4.so()(64bit) for package: samba-4.8.3-4.el7.x86_64
—> Package samba-common-tools.x86_64 0:4.8.3-4.el7 will be installed
—> Package samba-libs.x86_64 0:4.8.3-4.el7 will be installed
–> Processing Dependency: libpytalloc-util.so.2(PYTALLOC_UTIL_2.1.9)(64bit) for package: samba-libs-4.8.3-4.el7.x86_64
–> Processing Dependency: libpytalloc-util.so.2(PYTALLOC_UTIL_2.1.6)(64bit) for package: samba-libs-4.8.3-4.el7.x86_64
–> Processing Dependency: libpytalloc-util.so.2(PYTALLOC_UTIL_2.0.6)(64bit) for package: samba-libs-4.8.3-4.el7.x86_64
–> Processing Dependency: libpytalloc-util.so.2()(64bit) for package: samba-libs-4.8.3-4.el7.x86_64
—> Package pytalloc.x86_64 0:2.1.13-1.el7 will be installed
Installed size: 3.7 M
Is this ok [y/d/N]: y
Installing : pytalloc-2.1.13-1.el7.x86_64 1/4
Installing : samba-libs-4.8.3-4.el7.x86_64 2/4
Installing : samba-common-tools-4.8.3-4.el7.x86_64 3/4
Installing : samba-4.8.3-4.el7.x86_64 4/4
Installed: samba.x86_64 0:4.8.3-4.el7
Complete!
مرحله دوم: فایل پیکربندی سرویس سامبا، در مسیر etc/samba/ قرار دارد:
[root@OLinux7 ~]# cd /etc/samba
[root@OLinux7 samba]# ls -l
-rw-r–r–. 1 root root 20 Oct 30 2018 lmhosts
-rw-r–r–. 1 root root 706 Oct 30 2018 smb.conf
-rw-r–r–. 1 root root 11327 Oct 30 2018 smb.conf.example
این فایل در oracle linux 7u6، به صورت پیش فرض شامل قسمتهای [global]، [homes]، [printers] ، [print$] می باشد که از این بین، پارامترهای تعیین شده در قسمت global که شامل پیکربندی کلی هم می باشند، از اهمیت بیشتری برخوردارند همچنین پارامترهای تعریف شده در قسمت homes، امکان دسترسی به home directory را برای کاربران هموار می سازند.
با این اوصاف، تنظیم هیچ کدام از این چهار قسمت الزامی نمی باشد و در صورت اطلاع از تنظیمات پیش فرض سرویس سامبا، می توان از هر کدام از این چهار قسمت صرف نظر کرد:
[root@OLinux7 samba]# cat smb.conf
[global]
workgroup = WORKGROUP
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775
نکته: برای دسترسی به object به اشتراک گذاشته شده در یک کلاینت ویندوزی، باید workgroup تعیین شده در این سرویس(در قسمت GLOBAOL)، با workgroup تعیین شده برای کلاینت ویندوز یکسان باشد. با اجرای دستور net config workstation در محیط ویندوز می توان workgroup آن را تعیین کرد:
>net config workstation
Computer name \\USEF-PC
Full Computer name USEF-PC
Workstation domain WORKGROUP
COM Open Timeout (sec) 0
COM Send Count (byte) 16
COM Send Timeout (msec) 250
The command completed successfully.
در ادامه قصد داریم دایرکتوری bkp/ را به روش Secured با محیط ویندوز به اشتراک بگذاریم برای این کار، قسمت جدیدی را با عنوان [bkp] به این فایل اضافه می کنیم:
[root@OLinux7 ~]# mkdir /bkp
[root@OLinux7 samba]# vi smb.conf
[global]
workgroup = WORKGROUP
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[bkp]
comment = backup server
browseable = yes
path = /bkp
writable = yes
create mask = 0755
valid users = user1 user2 @oinstall @dba
توضیحی در مورد پارامترهای استفاده شده در قسمت [bkp]:
[bkp]: نام دایرکتوری و یا منبعی که به اشتراک گذاشته شده.
Path: تعیین مسیر دایرکتوری که قرار است به اشتراک گذاشته شود.
browsable: دایرکتوری bkp قابل رویت باشد؟
Writable: با تنظیم این پارامتر به مقدار yes، امکان انجام تغییرات در محتویات دایرکتوری bkp/ بوجود خواهد آمد به عبارت دیگر، با تنظیم این پارامتر، کاربر می تواند کارهایی نظیر ایجاد فایل و یا دایرکتوری را انجام دهد.
comment: توضیحی در مورد شی به اشتراک گذاشته شده.
create mask: تنظیم permission پیش فرض برای فایلهایی که در مسیر اشتراکی ایجاد می شوند، با کمک این پارامتر قابل انجام است.
valid users: با کمک پارامتر valid users می توان اسامی کاربران و گروه های کاربری معتبر را مشخص کرد. برای مثال با تنظیم پارامتر زیر، می توان از یکی از دو کاربر user1 و user2 به منبع اشتراک گذاری شده دسترسی پیدا کرد یا اینکه کاربر مورد نظر عضو یکی از دو گروه oinstall و dba باشد:
[root@OLinux7 ~]# useradd -g oinstall user1
[root@OLinux7 ~]# useradd -g dba user2
valid users = user1 user2 @oinstall @dba
بعد از تنظیم پارامترهای مورد نظر در فایل smb.conf، می توانیم از طریق دستور testparm درستی پارامترهای وارد شده را چک کنیم.
[root@OLinux7 samba]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section “[homes]”
Processing section “[printers]”
Processing section “[print$]”
Processing section “[bkp]”
Loaded services file OK.
Server role: ROLE_STANDALONE
برای مثال، با وارد کردن عبارت بی معنی در انتهای فایل smb.conf، دستور فوق خطایی را برمی گرداند:
[root@OLinux7 ~]# echo “pat=/u01”>> /etc/samba/smb.conf
[root@OLinux7 ~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section “[homes]”
Processing section “[printers]”
Processing section “[print$]”
Processing section “[bkp]”
Unknown parameter encountered: “pat”
Ignoring unknown parameter “pat”
Loaded services file OK.
Server role: ROLE_STANDALONE
مرحله سوم: برای پیکربندی سرویس سامبا به روش Secured، باید کاربری را در محیط لینوکس ایجاد می کنیم تنظیم پسورد برای این کاربر الزامی نیست و ارتباطی به سرویس سامبا ندارد:
[root@OLinux7 ~]# useradd usef
[root@OLinux7 ~]# passwd usef
Changing password for user usef.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
پسورد سامبا را برای کاربر usef تنظیم می کنیم:
[root@OLinux7 samba]# smbpasswd -a usef
New SMB password:
Retype new SMB password:
Added user usef.
سوییچ a در دستور فوق سبب می شود تا نام این کاربر به فایل account_policy.tdb اضافه شود:
[root@OLinux7 samba]# ls -lh /var/lib/samba/
total 1.7M
-rw——- 1 root root 412K Jan 25 12:05 account_policy.tdb
drwxrwxr-x 2 root printadmin 6 Oct 30 2018 drivers
-rw-r–r– 1 root root 1.3M Jan 25 12:05 gencache.tdb
-rw——- 1 root root 696 Jan 25 12:05 group_mapping.tdb
drwxr-xr-x. 3 root root 84 Jan 25 12:05 lock
drwx——. 3 root root 59 Jan 25 12:05 private
مالکیت دایرکتوری bkp/ را به کاربر usef تغییر می دهیم:
[root@OLinux7 samba]# chown usef /bkp
نکته: دستور pdbedit نام کاربرانی که برای انها پسورد smb تنظیم شده است را نمایش می دهد:
[root@OLinux7 samba]# pdbedit -Lv
—————
Unix username: usef
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1761771055-2017651478-3314902110-1000
Primary Group SID: S-1-5-21-1761771055-2017651478-3314902110-513
Full Name:
Home Directory: \\OLinux7\usef
HomeDir Drive:
Logon Script:
Profile Path: \\OLinux7\usef\profile
Domain: OLINUX7
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 10:06:39 EST
Kickoff time: Wed, 06 Feb 2036 10:06:39 EST
Password last set: Sat, 25 Jan 2020 12:05:09 EST
Password can change: Sat, 25 Jan 2020 12:05:09 EST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
مرحله چهارم: در این مرحله سرویس سامبا را استارت می کنیم:
[root@OLinux7 samba]# systemctl status smb
â smb.service – Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2020-01-25 12:10:59 EST; 4s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 40570 (smbd)
Status: “smbd: ready to serve connections…”
CGroup: /system.slice/smb.service
ââ40570 /usr/sbin/smbd –foreground –no-process-group
ââ40572 /usr/sbin/smbd –foreground –no-process-group
ââ40573 /usr/sbin/smbd –foreground –no-process-group
ââ40574 /usr/sbin/smbd –foreground –no-process-group
Jan 25 12:10:59 OLinux7 systemd[1]: Starting Samba SMB Daemon…
Jan 25 12:10:59 OLinux7 smbd[40570]: [2020/01/25 12:10:59.966198, 0] ../lib/util/become_daemon.c:138(daemon_ready)
Jan 25 12:10:59 OLinux7 smbd[40570]: daemon_ready: STATUS=daemon ‘smbd’ finished starting up and ready to serve connections
Jan 25 12:10:59 OLinux7 systemd[1]: Started Samba SMB Daemon.
برای استارت خودکار سرویس smb بعد از هر بار reboot کردن سرور می توان از دستور زیر استفاده کرد:
[root@OLinux7 ~]# systemctl enable smb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
نکته: با کمک دستور smbstatus می توان لیست همه کلاینتهایی که با کمک سرویس سامبا به سرور متصل شده اند را مشاهده کرد:
[root@OLinux7 ~]# smbstatus
Samba version 4.8.3
PID Username Group Machine Protocol Version Encryption Signing
—————————————————————————————————————————————-
5182 usef usef 192.168.1.20 (ipv4:192.168.1.20:53375) SMB3_02 – partial(AES-128-CMAC)
Service pid Machine Connected at Encryption Signing
———————————————————————————————
bkp 5182 192.168.1.20 Sun Feb 2 10:02:09 AM 2020 EST – –
Locked files:
Pid Uid DenyMode Access R/W Oplock SharePath Name Time
————————————————————————————————–
5182 54323 DENY_NONE 0x100081 RDONLY NONE /bkp . Sun Feb 2 10:02:08 2020
5182 54323 DENY_NONE 0x100081 RDONLY NONE /bkp . Sun Feb 2 10:02:08 2020
مرحله پنجم: برای مشاهده وضعیت منابع به اشتراک گذاشته شده می توان بسته samba-client را نصب کرده و از دستور smbclient استفاده کنیم:
[root@OLinux7 samba]# yum install samba-client
Loaded plugins: ulninfo
Resolving Dependencies
–> Running transaction check
—> Package samba-client.x86_64 0:4.8.3-4.el7 will be installed
–> Finished Dependency Resolution
Total download size: 617 k
Installed size: 2.0 M
Is this ok [y/d/N]: y
Installing : samba-client-4.8.3-4.el7.x86_64 1/1
Verifying : samba-client-4.8.3-4.el7.x86_64 1/1
Installed:
samba-client.x86_64 0:4.8.3-4.el7
Complete!
جهت بررسی وضعیت منابع اشتراک گذاشته شده میتوانیم از دستور زیر استفاده کنیم:
[root@OLinux7 samba]# smbclient -L //OLinux7 -U usef
Enter SAMBA\usef’s password:
Sharename Type Comment
——— —- ——-
print$ Disk Printer Drivers
bkp Disk backup server
IPC$ IPC IPC Service (Samba 4.8.3)
usef Disk Home Directories
Reconnecting with SMB1 for workgroup listing.
Server Comment
——— ——-
Workgroup Master
——— ——-
مرحله ششم: با طی کردن مراحل زیر در محیط ویندوز، به دایرکتوری bkp/ دسترسی پیدا خواهیم کرد:
[root@OLinux7 ~]# cd /bkp/
[root@OLinux7 bkp]# ls -lh
-rwxr–r– 1 usef usef 0 Jan 25 16:18 myfile.txt
بروزرسانی(1402/11/29): فعال بودن selinux می تواند مانعی برای استفاده از سرویس سامبا باشد.
برای mount کردن فضای bkp/ در یک ماشین لینوکسی، می توان از دستور زیر استفاده کرد:
[root@myhost ~]#mkdir /mydir
[root@myhost ~]# mount -t cifs -o rw,username=usef,password=c //192.168.1.20/bkp /mydir
پیکربندی Anonymous Samba
در قسمت فوق، نحوه پیکربندی سامبا به روش Secured مورد بررسی قرار گرفت برای پیکربندی Anonymous Samba sharing می توان فایل کانفیگ smb.conf را به صورت زیر تنظیم کرد:
[root@OLinux7 ~]# chown -R nobody:nobody /bkp
[root@OLinux7 ~]# chmod -R 775 /bkp/
[root@OLinux7 ~]# vi /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[bkp]
path = /bkp
browsable =yes
writable = yes
guest ok = yes
read only = no
[root@ ~]# systemctl restart smb
با کمک پارامتر guest ok می توان بدون انجام هرگونه اعتبارسنجی از منبع به اشتراک گذاری شده استفاده کرد.