//samba基础知识

1.工作端口
UDP协议端口:137,138
tcp协议端口:139,445

2.软件包
samba samba-client.x86_64 samba-common

3.启动服务
service smb restart

4.配置文件
[global]---全局设置
-------------------------
A.
security:share/user/server/domain
share:不需要用户名和密码,匿名登录
user:需用户名和密码
server: 用户名和密码在指定的一台samba上验证,验证错误,客户端会用user级别访问
domain:服务器加入window域环境,验证工作由windows域控制器负责。
ads:使用ads安全级别加入到windows域环境中,包含有domain级别中的所有功能,可以具备域控制器的功能。
B.
config file = /etc/samba/smb.conf.%U 
#%U是变量,指代登录用户名
[说明]
##security设为user时,samba服务器必须创建一些用户名和密码供客户端登录使用,这些帐号必须是linux系统中存在的用户,当用户登录时,其在共享文件夹里的权限是其所用帐号在samba所在linux中的权限
--------------------------
[share_config]---共享目录设置
-------------------
[public]                  ---共享目录名称  //10.10.54.226/public
comment = Public Stuff    ---标识
path = /home/samba        ---服务器端共享目录的存储路径(要有权限)
writable = yes            ---是否具有写入权限
read only = yes  ---只读权限
browseable = no           ---共享目录是否可见(no为隐藏,yes可见)
guest ok = yes            ---匿名用户是否可以访问
write list = +staff       ---指定那些用户或者用户组可以写入
--------------------

//samba测试工具

1:pdbedit:管理samba 用户数据库的一个工具
pdbedit -a -u username 增加一个samba用户
pdbedit -x samba_user 删除用户
pdbedit 查看创建的samba用户

2.工具2:samba测试命令
smbstatus -pS -u username  
smbclient -L 10.10.54.150  #查看后面所接主机上提供的共享资源
smbclient -L 10.10.54.150 -Uboss#以帐号boss访问主机上的资源
smbclient //10.10.54.150/centos -Uboss%boss1   #类似ftp的登录,直接操作服务器共享文件夹
mount -t cifs //10.10.54.150/centos /mnt/smb -o username=boss,password=boss1 #挂载


//例一:建立共享目录为softs,安全级别为share,只允许10.10.54.0/24网段访问

1.一下题目中,环境都是:
samba服务器:10.10.54.150---centos6.4
客户机:10.10.54.158----ubuntu13
2.配置文件
----------------------
shell> vim /etc/samba/smb.conf
[global]
security = share
hosts allow = 10.10.54.0/24
[softs]
comment = public
path = /home/softs
writeable = no
browseable = yes
---------------------

//例二:建立共享目录为share,对所有人只有只读权限

1.##配置[服务器:150]
-----------------------------
shell> vim /etc/samba/smb.conf
[global]
security = share
[share]
comment = public
path = /pub
read only = yes
writable = no
------------------------------

2.##测试[客户机:158]
shell> smbclient //10.10.54.150/softs
WARNING: The security=share option is deprecated
Enter root's password: 
Domain=[HELLO,1003-LJ] OS=[Unix] Server=[Samba 3.6.9-151.el6]
Server not using user level security and no password supplied.
smb: \> ls
smb: \> mkdir 12
NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory \12   #只读

//例三:使用smbclient命令登录samba服务器,并下载共享资源到/temp目录

1.配置[服务器:150]
-------------------------------
shell> vim /etc/samba/smb.conf
[global]
security = share
[share]
comment = public
path = /pub
read only = yes
writable = yes
-------------------------------

2.测试[客户机:158]
shell> cd /tmp
shell> smbclient //10.10.54.150/share
smb: \> mkdir
mkdir <dirname>
smb: \> ls
  .                                   D        0  Tue Mar  4 17:03:55 2014
  ..                                  D        0  Tue Mar  4 15:43:53 2014
  openssl-1.0.1e.tar.gz               A  4459777  Mon Mar  3 09:38:52 2014
smb: \> get openssl-1.0.1e.tar.gz 
getting file \openssl-1.0.1e.tar.gz of size 4459777 as openssl-1.0.1e.tar.gz (82174.4 KiloBytes/sec) (average 82174.5 KiloBytes/sec)

//例四:建立共享目录为centos,其绝对路径为/share/centos,只有boss帐号可以读写该目录,其他人只能读取

1.配置[服务器:150]
------------------------------
shell> vim /etc/samba/smb.conf
[global]
security = user
[centos]
comment = public
path = /pub
guest ok = no
read only = yes
writable = boss
---------------------------

2.建立帐号
shell> useradd boss
shell> useradd test
shell> pdbedit -a -u boss
shell> pdbedit -a -u test
shell> pdbedit -L
boss:502:
test:504:

3.测试[客户机:158]
----测试boss
shell> smbclient //10.10.54.150/centos -Uboss
Enter boss's password: 
Domain=[HELLO,1003-LJ] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: \> mkdir 12
smb: \> ls
  .                                   D        0  Tue Mar  4 17:14:35 2014
  ..                                  D        0  Tue Mar  4 15:43:53 2014
  12                                  D        0  Tue Mar  4 17:14:35 2014
39371 blocks of size 524288. 32159 blocks available
---测试test
shell> smbclient //10.10.54.150/centos -Utest
Enter test's password: 
Domain=[HELLO,1003-LJ] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: \> ls
  .                                   D        0  Tue Mar  4 17:14:35 2014
  ..                                  D        0  Tue Mar  4 15:43:53 2014
  12                                  D        0  Tue Mar  4 17:14:35 2014
39371 blocks of size 524288. 32159 blocks available
smb: \> mkdir 13
NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory \13

//结合window2008活动目录,配置samba,用户名和密码认证来自活动目录。

//环境说明
1.linux上的samba作为一台文件服务器监听用户请求,用户使用用户名和密码认证方式登录samba服务器,默认情况下,samba服务器自带一个保存登录用户名和密码的数据库来实现对登录用户的身份确认
2.samba加入windows2008活动目录后,samba服务器不再保存用户名和密码这些信息,而是把这些信息存储在windows server域控制器上,当用户使用用户名和密码登录samba服务器时,身份认证工作由windows server上的活动目录负责,认证通过的用户就可以使用samba服务器提供的资源
3.由上面两点,我们可以知道,要验证samba是否成功加入windows server的域,首先要在windows server的test.com(下面步骤中会创建)域中创建一个用户,然后在linux主机上使用这个创建的用户名和密码登录samba服务器,如果可以登录,那么说明samba加入成功

//windows域和工作组概念
1.局域网上的资源需要管理,“域”和“工作组”就是两种不同的网络资源管理模式
2.工作组:局域网上可能有很多的计算机存在,为了管理和查找的方便,将不同的电脑按不同分类分成一个个的工作组,这样方便管理和查找
3.工作组的不足之处是:
A.工作组中每一台计算机都独立维护自己的资源,不能集中管理所有的网络资源
B.每一台计算机都在本地存储用户的账户
C.一个账户只能登录到一台计算机
D.工作组中的计算机都是平等的,对于其它计算机来说即是服务器,也是客户机
4.域(Domain)是一个共用“目录服务数据库”的计算机和用户的集合,域是逻辑分组,与网络的物理拓扑无关,可以很小,比如只有一台DC,也可以很大,包括遍布世界各地的计算机,比如大型跨国公司网络上的域
正是由于所有域成员计算机和域用户都共用这个域的“目录服务数据库”,域管理员就可以基于域的“目录服务数据库”来进行集中管理、共享资源,如用户、组、计算机帐号、权限设置、组策略设置等等。目录服务为管理员提供从网络上任何一个计算机上查看和管理用户和网络资源的能力。目录服务也为用户提供唯一的用户名和密码,用户只需一次登录,即可访问本域或有信任关系的其它域上的所有资源(当然用户得有权限才行),而不需要多次提供用户名和密码登录。

//windows2008上创建域控制器
##10.10.54.152机子作为域控制器和DNS服务器
1.域控制器上存储着Active Directory,首先在网络和共享中心里更改网卡的首选DNS为改本机IP
2.开始菜单-运行对话框中输入dcpromo开始安装,新的域名为test.com,安装过程大多默认即可,DNS提示那一步选是
3.完成后重启系统

//linux上配置samba加入windows域
#Win 2008 Server是域控制器,linux是samba服务器,客户端提交的认证请求和授权是通过Kerberos5协议来完成的,所以要让Linux的samba服务器支持windows server的域认证
1.软件安装
shell> yum install krb5* -y      
shell> rpm -qa | grep krb5
krb5-server-1.10.3-10.el6.x86_64
pam_krb5-2.3.11-9.el6.x86_64
krb5-workstation-1.10.3-10.el6.x86_64
krb5-devel-1.10.3-10.el6.x86_64
krb5-libs-1.10.3-10.el6.x86_64

2.配置/etc/krb5.conf
-----------------------------------------
[logging]#日志文件位置
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log
[kdc]
 profile = /var/kerberos/krb5kdc/kdc.conf
[libdefaults]
 default_realm = TEST.COM     #大写,windows2008活动目录域名,刚才在windows上创建的test.com
 dns_lookup_realm = true
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
[realms]
 TEST.COM = {
  kdc = 10.10.54.152:88        #域控制器的IP
  admin_server = 10.10.54.152:749   
  default_domain = TEST.COM   
}
[domain_realm]
 .test.com = TEST.COM        #指定域
 test.com = TEST.COM
[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }
        
shell>vim /var/kerberos/krb5kdc/kdc.conf 
[realms]
 TEST.COM = {     #修改为TEST.COM
 ...
-------------------------------------------------
3.配置/etc/nsswitch.conf
passwd:     files winbind  #先读files,然后再通过winbind认证
shadow:     files winbind
group:      files winbind

4.配置/etc/samba/smb.conf
------------------------------------------        
        workgroup = TEST    #工作组
        server string = Filesrv
        password server = 10.10.54.152    #密码服务器地址,用于存放身份信息
        realm = TEST.COM    #认证服务器域名,所有认证信息都将由该服务器来提供。
        security = ads    #ads:使用ads安全级别加入到windows域环境中
        netbios name = MYSERVER       #centos netbios名,加入后会显示在windows server域的computers中
        idmap uid = 16777216-33554431
        idmap gid = 16777216-33554431
        template shell = /bin/bash
        template homedir = /home/%U
        winbind use default domain = true
        winbind offline logon = true
        winbind enum groups = yes
        winbind enum users = yes
        winbind separator = /
[centos]        #共享的目录
comment = centos
path = /home/samba
guest ok = no
read only = yes
write list = boss
browseable = yes
#passdb backend = tdbsam       #这行注释掉,不使用samba本身的密码认证
-----------------------------------------

5.修改linux DNS服务器指向windows域IP
shell> vim /etc/resolv.conf
nameserver 10.10.54.152

6.重启samba和winbind服务
shell> service winbind restart
shell> service smb restart

//samba加入windows域控制器中
1.
shell> kinit administrator@TEST.COM    #TEST.COM为在windows上创建的域,注意大小写
Password for administrator@TEST.COM: 
#输入的密码是windows 2008管理员密码,没有提示说明测试成功

2.net 命令加入windows域
shell> net ads/rpc  join -U administrator@TEST.COM
Enter administrator@TEST.COM's password:
Using short domain name -- TEST
Joined 'MYSERVER' to dns domain 'test.com'
No DNS domain configured for myserver. Unable to perform DNS Update.
DNS update failed!
#此时在windos2008 Active Directory管理中心 test.com 域下可以看到myserver

3.一些验证
#验证加入是否成功
shell> net ads testjoin
Join is OK
#查看域用户
sehll> wbinfo -u
MYSERVER/boss
MYSERVER/me
MYSERVER/test
MYSERVER/shift1
MYSERVER/shift2
MYSERVER/shift3
administrator
guest
krbtgt
#查看域用户组
shell>  wbinfo -g
domain computers
domain controllers
schema admins
enterprise admins
cert publishers
domain admins
domain users
domain guests
group policy creator owners
ras and ias servers
allowed rodc password replication group
denied rodc password replication group
read-only domain controllers
enterprise read-only domain controllers
dnsadmins
dnsupdateproxy

//测试windows活动目录认证是否生效
1.在windows 活动目录中创建用户test,然后在linux上查看用户信息
shell> wbinfo -u
MYSERVER/boss   #linux机子上用户
MYSERVER/me
MYSERVER/test
administrator    #下面是windows server上用户
guest
krbtgt
test       #刚才在windows server上创建的域用户

2.验证是否可以登录samba服务器
[ubuntu:158机子]
shell> smbclient //10.10.54.150/centos -Utest    #用刚才在windows2008中创建的test用户登录
WARNING: The security=share option is deprecated
Enter test's password: 
session setup failed: NT_STATUS_LOGON_FAILURE      ##登录失败了!
/etc/samba/smb.conf 中指定的realm是 TEST.COM
shell> smbclient //10.10.54.150/centos -W=TEST.COM -Utest    #使用TEST.COM这个域组
WARNING: The security=share option is deprecated
Enter test's password: 
Domain=[TEST] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: \> ls
  .                                   D        0  Wed Mar  5 21:20:25 2014
  ..                                  D        0  Wed Mar  5 21:20:20 2014
  game.sh                             A     4846  Wed Mar  5 21:20:25 2014
39371 blocks of size 524288. 32159 blocks available
##测试成功