CentOS 6 编译安装samba4

         微软输了反垄断案,被法院判决向samba项目贡献代码,samba与微软的战争结束,换来了samba4 十多年来的第一个正式版,完全兼容win2k至win8所有的客户端。

        主流linux发行版里的samba4版本比较旧,debian wheezy用的也是beta2,其他都是alpha18,最新的fedora 18 自带了samba4正式版,但是使用的kerberos是MIT的,与samba4自带的heimdal kerberos有些出入,鉴于目前samba4的文档比较少,在redhat系的平台上,还是按照官方wiki说的做成功率比较高,也就是编译安装。

 

samba4内置了kerberos、dns和ldap,外加一个ntp就可以完成一个AD了。

 

环境:CentOS 6.3  x64

少废话,将经过测试和总结的精华写个脚本分享给大家,简单说明如下:

1、请根据需要修改【10-13行】,注意大小写;

2、主机名没有特别要求,非fqdn即可,不带域名的那种,比如samba;

3、samba4 AD 安装一步到位(加上启动脚本实际为2步,ntp请另行配置)

4、脚本可重复执行,除去下载,安装编译耗时约15分钟

5、配置文件位于/etc/samba,可执行文件和库文件都位于/usr/local/,

手册在/usr/share/samba,pid和lock都位于/var,日志位于/var/log/samba,做了日志轮转

 

  
  
  
  
  1. #!/usr/bin/env bash 
  2. name = setup-samba4-ad.sh 
  3. # author = [email protected] 
  4. # test under centos 6.3 mininal only , 
  5. at your own risk. 
  6.  
  7. set -e 
  8.  
  9. #------------------------------ 
  10. realm=TEST.ORG 
  11. domain=TEST 
  12. adminpass="1q2w3edc4RFV" 
  13. DomainName=test.org 
  14.  
  15. #install development packages 
  16. yum groupinstall "Development tools"  -y 
  17. yum install python-devel ctdb-devel docbook-style-xsl libacl-devel readline-devel \ 
  18.     openssl-devel cups-devel libaio-devel pam-devel libtevent-devel libcap-devel \ 
  19.     expect libuuid-devel libtdb-devel quota-devel openldap-devel krb5-workstation -y 
  20.  
  21. rm -rf samba-4.0.3* 
  22.  
  23. #wget http://www.samba.org/ftp/samba/samba-4.0.3.tar.gz 
  24. #wget http://192.168.122.1/pkg/samba-4.0.3.tar.gz 
  25.  
  26. [ -f samba-4.0.3.tar.gz ] || wget http://www.samba.org/ftp/samba/samba-4.0.3.tar.gz 
  27. [ -d samba-4.0.3 ] || tar zxvf samba-4.0.3.tar.gz 
  28.  
  29. mkdir -p /etc/samba/private 
  30.  
  31. cd samba-4.0.3 
  32. ./configure \ 
  33.     --enable-debug \ 
  34.     --enable-selftest \ 
  35.     --disable-cups \ 
  36.     --disable-gnutls \ 
  37.     --enable-fhs \ 
  38.     --prefix=/usr/local \ 
  39.     --sysconfdir=/etc \ 
  40.     --localstatedir=/var \ 
  41.     --datarootdir=/usr/share \ 
  42.     --with-privatedir=/etc/samba/private 
  43. #   --with-aio-support 
  44. make && make install 
  45.  
  46. rm -rf /etc/samba/smb.conf 
  47. samba-tool domain provision \ 
  48.     --realm=$realm \ 
  49.     --domain=$domain \ 
  50.     --workgroup=$DomainName \ 
  51.     --adminpass="$adminpass" \ 
  52.     --server-role=dc \ 
  53.     --use-rfc2307 
  54.  
  55. cat /etc/samba/private/krb5.conf > /etc/krb5.conf 
  56. echo "[kdc]" >>/etc/krb5.conf 
  57. echo "check-ticket-address = false" >>/etc/krb5.conf 
  58.  
  59. #/usr/sbin/samba -D 
  60. #echo "/usr/local/sbin/samba -D" >>/etc/rc.local 
  61.  
  62. curl http://192.168.122.1/samba4.init.sh >/etc/init.d/samba4 
  63. chmod 755 /etc/init.d/samba4 
  64. chkconfig --add samba4 
  65. chkconfig --level 2345 samba4 on 
  66. /etc/init.d/samba4 start 
  67. service iptables stop 
  68.  
  69. echo domain $DomainName >/etc/resolv.conf 
  70. echo nameserver 127.0.0.1 >>/etc/resolv.conf 
  71.  
  72. #for rsyslog 
  73. cat > /etc/rsyslog.d/samba.log <<SAMBA-LOG 
  74. /var/log/samba/* { 
  75.     notifempty 
  76.     olddir /var/log/samba/old 
  77.     missingok 
  78.     sharedscripts 
  79.     copytruncate 
  80. SAMBA-LOG 
  81.  
  82. #DNS test 
  83. host -t SRV _ldap._tcp.$DomainName. 
  84. host -t SRV _kerberos._udp.$DomainName. 
  85. host -t A $HOSTNAME.$DomainName. 
  86.  
  87. service samba4 restart 
  88.  
  89. sleep 10 
  90.  
  91. #samba-client test 
  92. smbclient --version 
  93. smbclient -L localhost -U% 
  94. smbclient //localhost/netlogon -U administrator -P $adminpass -c 'ls' 
  95.  
  96. #kerberos test 
  97. expect -c " 
  98.    set timeout 5; 
  99.    spawn kinit [email protected] 
  100.    expect { 
  101.        "Password*" {send \"$adminpass\r\";} 
  102.    } 
  103. expect eof;" 
  104.  
  105. #echo please enter your passwd of administrator 
  106. #kinit [email protected] 
  107. klist 
  108.  
  109. cat <<NOTE >&2
  110. #Warnning# 
  111. #Remember to open the following ports in your iptables firewall 
  112. #53         tcp/udp 
  113. #88         tcp/udp 
  114. #389        tcp/udp 
  115. #464        tcp/udp 
  116. #137        udp 
  117. #138        udp 
  118. #139        tcp 
  119. #445        tcp 
  120. #636        tcp 
  121. #1024       tcp 
  122. #3268       tcp 
  123. #3269       tcp 
  124. NOTE
  125.  
  126. echo "Congratuations! everything done successful" 
  127. #end of the script 

 

 samba4开机脚本/etc/init.d/samba4

  
  
  
  
  1. #!/bin/sh 
  2. # chkconfig: 2345 91 35 
  3. # description: Initialization script for Samba 
  4.  
  5. #source function library 
  6. . /etc/rc.d/init.d/functions 
  7.  
  8. # Make sure the configuration file exists 
  9. [ -f /etc/samba/smb.conf ] || exit 1 
  10.  
  11. prog=samba 
  12. pidfile=/var/run/samba/samba.pid 
  13. lockfile=/var/lock/samba/samba 
  14. RETVAL=0 
  15.  
  16. samba_start() { 
  17.     echo "Starting $prog: " 
  18.     /usr/local/sbin/samba -D 
  19.  
  20. samba_stop() { 
  21.     echo -n $"Stopping $prog: " 
  22.     killproc -p ${pidfile} ${prog} 
  23.     RETVAL=$? 
  24.     echo 
  25.     [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} 
  26.  
  27. samba_reload() { 
  28.     echo -n \$"Reloading $prog: " 
  29.     killproc -p ${pidfile} ${prog} -HUP 
  30.     RETVAL=$? 
  31.     echo 
  32.  
  33. # See how we were called 
  34. case "$1" in 
  35.     'start') 
  36.         samba_start 
  37.         ;; 
  38.     'stop') 
  39.         samba_stop 
  40.         ;; 
  41.     'restart') 
  42.         samba_stop 
  43.         sleep 1 
  44.         samba_start 
  45.         ;; 
  46.     'reload') 
  47.         samba_reload 
  48.         ;; 
  49.     *) 
  50.         echo "Usage: $0 {start|stop|restart|reload}" 
  51.  
  52.         ;; 
  53. esac 

 

使用方法

  
  
  
  
  1. chmod 755 /etc/init.d/samba4 
  2. chkconfig --add samba4 
  3. chkconfig --level 2345 samba4 on 
  4. /etc/init.d/samba4 start 

 

防火墙脚本也一并送上

  
  
  
  
  1. #!/usr/bin/env bash 
  2. # Name :firewall.sh 
  3. # Authhor :[email protected] 
  4. # Description:setup a simple host-based iptables firewall 
  5.  
  6. if [ "$(id -u)" != "0" ]; then 
  7.    echo "This script is designed to run as root" 1>&2 
  8.    exit 1 
  9. fi 
  10.  
  11. #only one net card 
  12. lan=192.168.0.0/16 
  13.  
  14. # Load modules 
  15. modprobe ip_tables 
  16. modprobe iptable_filter 
  17. modprobe ipt_REJECT 
  18. modprobe ip_conntrack 
  19. modprobe xt_limit 
  20. modprobe xt_recent 
  21. modprobe xt_state 
  22.  
  23. # Flush the current iptables rules 
  24. iptables -F 
  25. iptables -X 
  26. iptables -Z 
  27.  
  28. # To prevent us blocked out of the server 
  29. # Set the INPUT policy to ACCEPT for the moment 
  30. iptables -P INPUT ACCEPT 
  31.  
  32. # Allow related,established connection 
  33. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
  34. # Limit the speed of ping,1 package per second 
  35. iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT 
  36.  
  37. # Always trust lookback interface 
  38. iptables -A INPUT -i lo -j ACCEPT 
  39.  
  40. # Allow ssh but limit 10 new connections per minute 
  41. # This will help to prevent too much password failure 
  42. iptables -A INPUT -s $lan -p tcp --dport 22 -m recent --set --name ssh --rsource 
  43. iptables -A INPUT -s $lan -p tcp --dport 22 -m recent ! --rcheck --seconds 60 --hitcount 10 --name ssh --rsource -j ACCEPT 
  44.  
  45.  
  46. # Open some port to local network only 
  47. iptables -A INPUT -s $lan --dport 53 -j ACCEPT 
  48. iptables -A INPUT -s $lan --dport 88 -j ACCEPT 
  49. iptables -A INPUT -s $lan --dport 389 -j ACCEPT 
  50. iptables -A INPUT -s $lan --dport 464 -j ACCEPT 
  51. iptables -A INPUT -s $lan -p udp --dport 137 -j ACCEPT 
  52. iptables -A INPUT -s $lan -p udp --dport 138 -j ACCEPT
  53. iptables -A INPUT -s $lan -p tcp --dport 135 -j ACCEPT
  54. iptables -A INPUT -s $lan -p tcp --dport 139 -j ACCEPT 
  55. iptables -A INPUT -s $lan -p tcp --dport 445 -j ACCEPT 
  56. iptables -A INPUT -s $lan -p tcp --dport 636 -j ACCEPT 
  57. iptables -A INPUT -s $lan -p tcp --dport 1024 -j ACCEPT 
  58. iptables -A INPUT -s $lan -p tcp --dport 3268 -j ACCEPT 
  59. iptables -A INPUT -s $lan -p tcp --dport 3269 -j ACCEPT 
  60.  
  61. iptables -A INPUT -s $lan -p udp --dport 123 -j ACCEPT 
  62.  
  63.  
  64. # Set the global polciy now 
  65. iptables -P INPUT DROP 
  66. iptables -P FORWARD DROP 
  67. iptables -P OUTPUT ACCEPT 
  68.  
  69. # Drop some output request 
  70. iptables -A OUTPUT -s 224.0.0.0/8 -j DROP 
  71. iptables -A OUTPUT -d 224.0.0.0/8 -j DROP 
  72. iptables -A OUTPUT -s 255.255.255.255/32 -j DROP 
  73. iptables -A OUTPUT -m state --state INVALID -j DROP 
  74.  
  75. # Save rules to /etc/sysconfig/iptables 
  76. /etc/init.d/iptables save 
  77. # Restart iptables service 
  78. /etc/init.d/iptables restart 
  79. # Show the final rules on the screen 
  80. iptables -n -v -L 

 

windows 客户端配置(以win2003为例)

"我的电脑" =>"属性" =>"计算机名" =>"更改" =>勾选"隶属于域",填上test.org ,然后输入域管理员的用户名和密码即可。

linux客户端配置(以centos6为例)

 在终端运行命令authconfig-tui,user information选择winbind,authentication选择winbind,但不要取消shadows passwords

 

Samba4 AD甚至可直接使用微软的工具进行管理,见samba官网wiki (点击进入)

 

 

顺带提点一下,本文仅为测试,实际环境中,会有潜在的风险,你懂的。

脚本运行结果,截图如下 

update2013-02-27

更新samba版本为4.0.3

修正kerberos测试中的嵌入的expect脚本,从而消除脚本中唯一交互之处,实现完全自动。

 

你可能感兴趣的:(centos,ad,samba4)