免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1014 | 回复: 0
打印 上一主题 下一主题

用 Samba 集成 Linux 和 Windows [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-16 17:46 |只看该作者 |倒序浏览
用 Samba 集成 Linux 和 Windows(转)
步骤 1. 安装 Samba
debian下安装samba: apt-get install samba
其他linux系统安装 Samba:
1. 查看您的发行版本是否已经安装了 Samba。在终端中执行下面的命令:
>rpm -qa | grep samba
如果没有得到 samba-3.x.x 的响应,那么您应该进行升级,或者重新安装(后面将提到)。
2. 如果您没有 Samba,那么到发行商的镜像站点去下载一个二进制的软件包。在我的例子中,我到 Samba mirror 下载了 samba-3.0.0-15.i386.rpm。然后执行下面的命令:
>rpm -Uvh samba-3.0.0-15.i386.rpm
步骤 2. 创建共享驱动器
我们使用 useradd 为三个用户组(engineering、marketing 和 management)各自创建一个共享驱动器。这个工具在 /home 目录中创建一个目录,作为共享的驱动器。这个命令还会创建一个相关联的 UNIX 用户组,我们后面会用它来为普通用户授予访问共享驱动器的权限。以 root 身份执行下面的命令:
adduser -s /sbin/nologin marketing
adduser -s /sbin/nologin management
adduser -s /sbin/nologin engineering
注意:-s /sbin/nologin 选项是一个安全措施,目的是防止某些人使用三个 ID 中的某个登录进入您的 Linux 机器。
步骤 3. 设置 Windows 域口令 第 4 页(共9 页)
在这个例子中,我们的 Microsoft Windows 域叫做 BIGTIME。通过 Microsoft Windows 网上邻居浏览您的网络的用户将看到一个名为 BIGTIME 的工作组。
由于我们的 Samba 服务器配置为一个 Microsoft Windows 控制器,所以需要设置域口令,以使得 Microsoft Windows 工作站可以加入到我们的域中。为了设置域口令,我们将为特定的 Samba 用户 root 创建一个 Samba 口令。这个用户与您的 Linux 服务器的 root 用户不同,安全起见,不应该拥有相同的口令。
以 root 身份执行下面的操作(不要使用您的 Linux 服务器的 root 口令):
smbpasswd -a root
步骤 4. 添加一些用户 第 5 页(共9 页)
这一个步骤是添加一些用户,并为每个用户指派一个安全配置文件。这个列表确定了用户及其被分配到的组:
* Marketing 组:catbert。
* Management 组:boss。
* Engineering 组:dilbert,wally。
然后,在我们的 Linux 上创建这些用户,创建每个用户的过程有三个步骤:
1. 在系统上创建用户 ID。
2. 设置系统口令。
3. 设置 Samba 口令。
系统和 Samba 口令必须相同。以 root 身份执行下面的命令:
useradd -G marketing,management,engineering boss
passwd boss
smbpasswd -a boss
useradd -G marketing catbert
passwd catbert
smbpasswd -a catbert
useradd -G engineering dilbert
passwd dilbert
smbpasswd -a dilbert
useradd -G engineering wally
passwd wally
smbpasswd -a wally
步骤 5. 创建一个配置文件 第 6 页(共9 页)
如果您是在 Fedora 上安装的二进制版本的 Samba,那么应该已经拥有了一个名为 /etc/samba 的配置目录。这个目录中容纳了 Samba 的两个后台进程(smbd 和 nmbd)所使用的多个文件。Samba 的主配置文件 smb.conf 位于此目录中。
我们根据 Windows 网络修改 smb.conf。下面是带有注释的文件(后面的步骤会解释一些更相关的配置指示符)。 Samba 手册中描述了这个配置文件中的所有指示符,您可以输入 man smb.conf 进行查阅。
/etc/samba/smb.conf 的内容:
1. # Global parameters
2. [global]
3. # The Windows workgroup name
4. workgroup = BIGTIME
5. # A descriptive string describing your server (this is not the server name)
6. server string = Samba Server
7. pam password change = Yes
8. unix password sync = Yes
9. # This is where Samba will write logs. The %m is the name of the machine that is
10. # connecting to your Samba server. For example, if Wally's Windows machine's
11. # name is luddite, then the server would log his transactions in log.luddite.
12. log file = /var/log/samba/log.%m
13. max log size = 50
14. # Act as a time server. Only do this if you Linux server is keeping accurate
15. # time. I recommend using this in conjunction with ntpd.
16. time server = Yes
17. # This is used to automate the process of adding machines to your Windows
18. # network.
19. add machine script = /usr/sbin/useradd -d /dev/null -g machines -s /sbin/nologin -M %u
20. logon script = %U.bat
21. domain logons = Yes
22. preferred master = Yes
23. domain master = Yes
24. wins support = Yes
25.
26. [netlogon]
27. # The following three directives define the actions that are taken when a user
28. # logs into your network. In this case we'll be running a batch file that mounts
29. # drives based on their security profile.
30. path = /var/lib/samba/netlogon
31. browseable = No
32. # Pass the user who is logging on and their IP address to the batch file
33. # logon generator.
34. root preexec = /var/lib/samba/netlogon/logon.pl %U %I
35. # The next three blocks define the shared drives that we will be exposing. They are all
36. # nearly identical. The important thing to note is that all files on these drives are
37. # readable and writeable by any user in a that group.
38. [marketing]
39. comment = Marketing material
40. path = /home/marketing
41. # Any files written to this drive will have this UNIX user group.
42. force group = marketing
43. read only = No
44. create mask = 0774
45. directory mask = 0775
46. browseable = No
47.
48. [engineering]
49. comment = Common material
50. path = /home/engineering
51. force group = engineering
52. read only = No
53. create mask = 0774
54. directory mask = 0775
55. browseable = No
56.
57. [management]
58. comment = Management Data
59. path = /home/management
60. force group = management
61. read only = No
62. create mask = 0774
63. directory mask = 0775
64. browseable = No
65.
66. [printers]
67. comment = All Printers
68. path = /var/spool/samba
69. printable = Yes
70. browseable = No
步骤 6. 创建登录配置文件生成器 第 7 页(共9 页)
我们的 Samba 服务器被配置为一个 Microsoft Windows 域控制器,同样,它可以控制某个 Windows 客户机登录到我们的域之后可以进行的操作。这些操作包括获取存储的漫游用户配置文件(roaming profile)、挂载驱动器以及与时间服务器进行同步等事情。
我们的 Samba 服务将不会存储漫游用户配置文件,因为这些文件会占用相当多的空间。我们将强制每个登录到我们的域的 Microsoft Windows 挂载驱动器,并与某个时间服务器同步。
在这个步骤中,我们创建了一个 Perl 脚本,可以生成 Window 批处理文件,每次当用户登录到 BIGTIME 域时会执行它。那个批处理文件会使用户的 Window 机器自动挂载他/她的安全配置文件授权访问的驱动器。对拥有很多公共驱动器和不同安全策略的大型组织来说,这一操作是实用的。
下面给出了 Perl 脚本,以及它为用户 Dilbert 创建的示例批处理文件。要安装 Perl 登录脚本:
1. 执行:mkdir -p /var/lib/samba/netlogon
2. 创建一个名为 logon.pl 的文件,写入下面的代码清单中给出的内容。
3. 执行: chmod 755 /var/lib/samba/netlogon/logon.pl
/var/lib/samba/netlogon/logon.pl 的内容:
1. #!/usr/bin/perl
2. use strict;
3. # Set the permissions on any file we create to 640 (i.e. -rw-r-----)
4. umask(022);
5.
6. my $SERVERNAME = "linus";
7. # Change these values to match your mountpoints. The mountpoint
8. # must exactly match what was created in step 2 by the useradd command.
9. my %MOUNTPOINTS = (
10. "marketing" => "NET USE Z: \\\\$SERVERNAME\\marketing \/YES\r\n",
11. "engineering" => "NET USE Y: \\\\$SERVERNAME\\engineering \/YES\r\n",
12. "management" => "NET USE X: \\\\$SERVERNAME\\management \/YES\r\n"
13. );
14.
15. # Security: Make sure that there is a user name and that it contains a valid
16. # user name string (i.e. no invalid chars).
17. if ($#ARGV != 1 ||
18. $ARGV[0] =~ /[^a-zA-Z0-9-_]/) {
19. exit(1);
20. }
21.
22. # Security: Make sure that the user exists on our system and log attempts
23. # with invalid IDs.
24. my $uid = getpwnam($ARGV[0]);
25. if ($uid == /[^0-9]/){
26. my $now = localtime;
27. open LOG, ">>/var/log/samba/log.netlogon";
28. print LOG "$now";
29. print LOG " - Error: Unknown user $ARGV[0] logged into $SERVERNAME from $ARGV[1]\n";
30. close LOG;
31. exit(1);
32. }
33.
34. # Log the logon attempt
35. my $now = localtime;
36. open LOG, ">>/var/log/samba/log.netlogon";
37. print LOG "$now";
38. print LOG " - User $ARGV[0] logged into $SERVERNAME from $ARGV[1]\n";
39. close LOG;
40.
41.
42. # Create a custom logon batch file.
43. open FH, ">/var/lib/samba/netlogon/$ARGV[0].bat";
44.
45. # Turn echo off
46. print FH "\@ECHO OFF\r\n";
47.
48. # Synchronize time between windoze client and Linux server.
49. print FH "NET TIME \\\\$SERVERNAME \/SET \/YES\r\n";
50.
51. foreach my $key (keys(%MOUNTPOINTS)) {
52. if (isMember($ARGV[0], $key)) {
53. # Put mount points in file
54. print FH "$MOUNTPOINTS{$key}";
55. }
56. }
57. close FH;
58.
59.
60. # Checks to see if the given user is a member of
61. # the given group.
62. # Returns 1 if true and 0 otherwise.
63. sub isMember{
64. my ($user, $group) = @_;
65. my ($name, $passwd, $gid, $members) = getgrnam($group);
66. my @members = split /\s+/, $members;
67.
68. for(@members){
69. if ($user eq $_) {
70. return 1;
71. }
72. }
73. return 0;
74. }
为 Dilbert 在 /var/lib/samba/netlogon/dilbert.bat 中生成的示例批处理登录文件(logon.pl 生成的):
1. @ECHO OFF
2. NET TIME \\linus /SET /YES
3. NET USE X: \\linus\engineering /YES
4. NET USE V: \\linus\marketing /YES
5. NET USE Z: \\linus\management /YES
步骤 7. 启动后台进程 第 8 页(共9 页)
现在启动 Samba 后台进程。通过 RPM 安装 Samba 的 Fedora 用户已经拥有一个 Samba 启动脚本,即 /etc/init.d/smb。如果您使用的是一个不同的发行版本,或者 Samba 是通过源文件构建的,那么您可能需要编写您自己的启动脚本。Fedora 用户应该执行下面的命令来启动 Samba:
/etc/init.d/smb start
启动后台进程后,查看并确定它在运行。执行下面两个命令中的一个:
* /etc/init.d/smb status
* ps -ef | grep smb
如果后台进程没有运行,那么浏览 syslog 消息文件来确定是哪里的问题。这个文件通常是 /var/log/messages。另外查看 /var/log/samba/log.smb 和 /var/log/samba/log.nmbd。
用户遇到的关于 Samba 的大部分问题与实际的后台进程本身无关。反而,它们会是与配置或者网络相关的问题。这里是为了解决常见的问题您可以做的一些事情:
* 检查 smb.conf 的文字内容:/usr/bin/testparm /etc/samba/smb.conf。
* 如果 Samba 后台进程在运行(ps -ef | grep smb),那么尝试列出您的服务器通过 Linux 提供的服务: /usr/bin/smbclient -U s -L 。
* 测试名称解析:/usr/bin/nmblookup -B  __SAMBA__。您应该会看到您的服务器被解析到一个 IP 地址。如果没有,那么去查看并确定 nmbd 在运行(ps -ef | grep nmbd)。nmbd 非常重要,因为它是您的 Linux 服务器和 Windows 客户机用来将 Windows 主机名解析为 IP 地址的系统。
* Samba 有非常好的文档。阅读 Samba 问题诊断技巧。
步骤 8. 将 Microsoft Windows 工作站添加到您的域 第 9 页(共9 页)
拥有一个由 Samba 服务器管理的完全功能的 Microsoft Windows 域的最后一个步骤是,将每一台 Windows 工作站添加到 BIGTIME 域。为了这个步骤,需要设置每一台计划授权访问的工作站。(下面是针对 Microsoft Windows XP Professional 的步骤,但是它们适用于其他不同的 Microsoft Windows。)
以管理员身份登录到每一台 Windows 工作站,执行下面的操作:
1. 进入控制面板(Control Panel),并选择 System。
2. 选择 Computer Name 选项卡。
3. 单击 rename this computer or join a domain 按钮。
4. 会出现一个新窗口。在这个窗口中,单击 domain 单选按钮并输入 BIGTIME 作为域。单击 OK。
5. 当提示您输入用户 ID 和口令时,使用用户 ID root 以及在 步骤 3. 设置 Windows 域口令 步骤中给定的口令。会提示您重新启动工作站。
6. 重新启动后,在 Log on to: 选择框中选择 BIGTIME。然后,输入您配置的任意一个用户(boss、wally、catbert 或者 dilbert)并登录到那台工作站。工作站将根据其安全配置文件自动挂载那个用户可以访问的驱动器。
7. 在网络中的每一台工作站上重复步骤 1 到步骤 6。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/4636/showart_68354.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP