第一节、samba是干什么的?它有什么用? Samba(SMB是其缩写) 是一个网络服务器,它是Linux作为本地服务器最重要的一个服务,用于Linux和Windows共享文件之用;Samba可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件;不过对于Linux和Linux之间共享文件有更好的网络文件系统NFS,NFS也是需要架设服务器的; 大家知道在Windows 网络中的每台机器即可以是文件共享的服务器,也可以同是客户机;Samba 也一样能行,比如一台Linux的机器,如果架了Samba Server 后,它能充当共享服务器,同时也能做为客户机来访问其它网络中的Windows共享文件系统,或其它Linux的Sabmba 服务器; 我们在Windows网络中,看到共享文件功能知道,我们直接就可以把共享文件夹当做本地硬盘来使用。在Linux的中,就是通过Samba的向网络中的机器提供共享文件系统,也可以把网络中其它机器的共享挂载在本地机上使用;这在一定意义上说和FTP是不一样的。 Samba 应该范围主要是Windows和Linux 系统共存的网络中使用;如果一个网络环境都是Linux或Unix类的系统,没有必要用Samba,应该用NFS更好一点; 那Samba 能为我们提供点什么服务呢?主要是共享文件和共享打印机; samba包括两个服务器守护进程,smbd和nmbd。这两个进程各司其职,功用不同:smbd是samba服务的内核,是建立对话、验证用户、提供文件系统和打印服务的基础,负责硬盘驱动器和打印机的共享。用户通过客户端访问这个进程来进行文件和打印机共享;nmbd实现的是网络浏览,使得samba服务器显示在windows的网络邻居中,同时允许用户浏览可用资源。它负责NETBIOS信息的管理和传递,使得windows的用户可以在Explorer中使用“\\serverip”来访问samba的共享文件。 2、安装及服务操作命令 安装samba程序非常简单,使用rpm -q samba查看当前系统是否已经安装了samba软件。 如果没有那就进入光盘,rpm -ivh *samba*.rpm即可。 仔细说下安装的包: samba-common-3.0.28-0.el5.8 //samba服务器和客户端中的最基本文件 samba-3.0.28-0.el5.8 //samba服务器核心软件包 system-config-samba-1.2.39-1.el5 //samba图形配置界面 samba-client-3.0.28-0.el5.8 //samba客户端软件 启动、暂停和停止服务:/etc/init.d/smb start /etc/init.d/smb stop /etc/init.d/smb restart 或service smb start service smb stop service smb restart 第二节、由最简单的一个例子说起,匿名用户可读可写的实现 第一步: 更改smb.conf 我们来实现一个最简单的功能,让所有用户可以读写一个Samba 服务器共享的一个文件夹;我们要改动一下smb.conf ;首先您要备份一下smb.conf文件; [root@localhost ~]# cd /etc/samba [root@localhost samba]# cp smb.conf smb.conf.bak [root@localhost samba]# vi smb.conf 或geidt smb.conf & 然后我们把下面这段写入smb.conf中: [global] workgroup = WORKGROUP netbios name = Liukai server string = Liukai's Samba Serversecurity = share [test] path = /opt/test writeable = yes browseable = yes guest ok = yes 注解: [global]这段是全局配置,是必段写的。其中有如下的几行; workgroup 就是Windows中显示的工作组;在这里我设置的是WORKGROUP (用大写); netbios name 就是在Windows中显示出来的计算机名; server string 就是Samba服务器说明,可以自己来定义;这个不是什么重要的; security 这是验证和登录方式,这里我们用了share ;验证方式有好多种,这是其中一种;另外一种常用的是user的验证方式;如果用share呢,就是不用设置用户和密码了; [test] 这个在Windows中显示出来是共享的目录; path = 可以设置要共享的目录放在哪里; writeable 是否可写,这里我设置为可写; browseable 是否可以浏览,可以;可以浏览意味着,我们在工作组下能看到共享文件夹。如果您不想显示出来,那就设置为 browseable=no,guest ok 匿名用户以guest身份是登录; 第二步:建立相应目录并授权 [root@localhost ~]# mkdir -p /opt/test[root@localhost ~]# id nobody uid=99(nobody) gid=99(nobody) groups=99(nobody) [root@localhost ~]# chown -R nobody:nobody /opt/test 注释:关于授权nobody,我们先用id命令查看了nobody用户的信息,发现他的用户组也是nobody,我们要以这个为准。有些系统nobody用户组并非是nobody ; 第三步:启动服务器 第四步:访问Samba 服务器的共享; 1、在Linux 中您可以用下面的命令来访问; [root@localhost ~]# smbclient -L //liukai 或 smbclient /test Password: 注:直接按回车 2、在Windows中,您可以用下面的办法来访问; 或 3、说明:如果用了netbiosname,就不能用主机名访问,如果没用netbiosname,就可以用“\\主机名”来访问。 第三节、简单的密码验证服务器修改smb.conf文件:security = userguest account = liukaiencrypt passwords = yessmb passwd file = /etc/samba/smbpasswd然后,建立一个新用户useradd liukaipasswd liukai成功后,cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswdsmbpasswd -a liukai这就成功地添加了一个smb用户。重启服务,使用这个用户进行登录即可。 第四节、复杂一点的用户共享模型(适合10人左右的小型企业) 比如一个公司有五个部门,分别是linuxsir,sir01,sir02,sir03,sir04。我们想为这家公司设计一个比较安全的共享文件模型。每个用户都有自己的网络磁盘,sir01到sir04还有共用的网络硬盘;所有用户(包括匿名用户)有一个共享资料库,此库为了安全是只读的;所有的用户(包括匿名用户)要有一个临时文件终转的文件夹... .... 1 共享权限设计实现的功能; 1)linuxsir部门具有管理所有SMB空间的权限; 2)sir01到sir04拥有自己的空间,并且除了自身及linuxsir有权限以外,对其它用户具有绝对隐私性; 3)linuxsir01到linuxsir04拥有一个共同的读写权限的空间; 4) 所有用户(包括匿名用户)有一个有读权限的空间,用于资料库,所以不要求写入数据。 5)sir01到sir04还有一个共同的空间,对sir01到sir04的用户来说是隐私的,不能让其它用户来访问。 6) 还要有一个空间,让所有用户可以写入,能删除等功能,在权限上无限制 ,用于公司所有用户的临时文档终转等; 2 在服务器上创建相应的目录; [root@localhost ~]# mkdir -p /opt/linuxsir [root@localhost ~]# cd /opt/linuxsir [root@localhost linuxsir]# mkdir sir01 sir02 sir03 sir04 sirshare sir0104rw sirallrw [root@localhost linuxsir]# ls sir01 sir0104rw sir02 sir03 sir04 sirallrw sirshare 注:功用如下: /opt/linuxsir 这是管理员目录,负责管理其下所有目录; /opt/linuxsir/sir01 是sir01的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写; /opt/linuxsir/sir02 是sir02的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写; /opt/linuxsir/sir03 是sir03的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写; /opt/linuxsir/sir04 是sir04的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写; /opt/linuxsir/sirshare 所用用户(除了linuxsir有权限写入外)只读目录 /opt/linuxsir/sir0104rw 是用于sir01到sir04用户可读可写共用目录,但匿名用户不能读写; /opt/linuxsir/sirallrw 用于所有用户(包括匿名用户)的可读可写; 3 添加用户用户组,设置相应目录家目录的权限; 3.1 添加用户组; [root@localhost ~]# /usr/sbin/groupadd linuxsir [root@localhost ~]# /usr/sbin/groupadd sir01 [root@localhost ~]# /usr/sbin/groupadd sir02 [root@localhost ~]# /usr/sbin/groupadd sir03 [root@localhost ~]# /usr/sbin/groupadd sir04 [root@localhost ~]# /usr/sbin/groupadd sir0104 3.2 添加用户; [root@cuc03 ~]# adduser -g sir01 -G sir0104 -d /opt/linuxsir/sir01 -s /sbin/nologin sir01 [root@cuc03 ~]# adduser -g sir02 -G sir0104 -d /opt/linuxsir/sir02 -s /sbin/nologin sir02 [root@cuc03 ~]# adduser -g sir03 -G sir0104 -d /opt/linuxsir/sir03 -s /sbin/nologin sir03 [root@cuc03 ~]# adduser -g sir04 -G sir0104 -d /opt/linuxsir/sir04 -s /sbin/nologin sir04 [root@cuc03 ~]# adduser -g linuxsir -d /opt/linuxsir -G linuxsir,sir01,sir02,sir03,sir04,sir0104 -d /opt/linuxsir -s /sbin/nologin linuxsir 为什么这样添加用户?请参考: 《Linux 文件和目录的属性》 《Linux 用户管理工具介绍》 当然我们还得学会查看用户信息的工具用法,比如 用finger和id来查看用户信息,主要是看用户是否添加正确;比如;请参考《Linux 用户(User)查询篇》 [root@localhost ~]# id linuxsir [root@localhost ~]# finger linuxsir 3.3 添加samba用户,并设置密码; 我们用的方法是先添加用户,但添加的这些用户都是虚拟用户,因为这些用户是不能通过SHELL登录系统的;另外值得注意的是系统用户密码和Samba用户的密码是不同的。如果您设置了系统用户能登入SHELL,可以设置用户的Samba密码和系统用户通过SHELL登录的密码不同。 我们通过smbpasswd 来添加Samba用户,并设置密码。原理是通过读取/etc/passwd文件中存在的用户名。 [root@localhost sir01]# smbpasswd -a linuxsir New SMB password: 注:在这里添加Samba用户linuxsir的密码; Retype new SMB password: 注:再输入一次; 用同样的方法来添加 sir01、sir02、sir03、sir04的密码; 3.4 配置相关目录的权限和归属; [root@cuc03 ~]# chmod 755 /opt/linux [root@cuc03 ~]# chown linuxsir:linuxsir /opt/linuxsir [root@cuc03 ~]# cd /opt/linuxsir [root@cuc03 ~]# chmod 2770 sir0* [root@cuc03 ~]# chown sir01.linuxsir sir01 [root@cuc03 ~]# chown sir02.linuxsir sir02 [root@cuc03 ~]# chown sir03.linuxsir sir03 [root@cuc03 ~]# chown sir04.linuxsir sir04 [root@cuc03 ~]# chown linuxsir.sir0104 sir0104rw [root@cuc03 ~]# chown linuxsir.linuxsir sirshare [root@cuc03 ~]# chmod 755 sirshare [root@cuc03 ~]# chown linuxsir:linuxsir sirallrw [root@cuc03 ~]# chmod 3777 sirallrw 4 修改Samba配置文件 smb.conf; 配置文件如下,修改/etc/samba/smb.conf后,不要忘记重启smbd和nmbd服务器; [global] workgroup = LINUXSIR netbios name = LinuxSir server string = Linux Samba Test Server security = share [linuxsir] comment = linuxsiradmin path = /opt/linuxsir/ create mask = 0664 #create mask是用户创建文件时的权限掩码;对用户来可读可写,对用户组可读可写,对其它用户可读; directory mask = 0775 #directory mask 是用来设置用户创建目录时的权限掩码,意思是对于用户和用户组可读可写,对其它用户可读可执行; writeable = yes valid users = linuxsir browseable = yes [sirshare] path = /opt/linuxsir/sirshare writeable = yes browseable = yes guest ok = yes [sirallrw] path = /opt/linuxsir/sirallrw writeable = yes browseable = yes guest ok = yes [sir0104rw] comment = sir0104rw path = /opt/linuxsir/sir0104rw create mask = 0664 directory mask = 0775 writeable = yes valid users = linuxsir,@sir0104 #@sir0104是用户组; browseable = yes [sir01] comment = sir01 path = /opt/linuxsir/sir01 create mask = 0664 directory mask = 0775 writeable = yes valid users = sir01,@linuxsir browseable = yes [sir02] comment = sir02 path = /opt/linuxsir/sir02 create mask = 0664 directory mask = 0775 writeable = yes valid users = sir02,@linuxsir browseable = yes [sir03] comment = sir03 path = /opt/linuxsir/sir03 create mask = 0664 directory mask = 0775 writeable = yes valid users = sir03,@linuxsir browseable = yes [sir04] comment = sir04 path = /opt/linuxsir/sir04 create mask = 0664 directory mask = 0775 writeable = yes valid users = sir04,@linuxsir browseable = yes 第五节、Samba 文件服务器用户复杂权限模型设计和实现http://www.linuxsir.org/main/node/278 附: 1、出现问题: 在使用user模式时,先做的share,然后新建一个账号newman进行user模式登陆,出现“samba不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接”。 2、问题解决: 在xp中,运行cmd,输入如下命令 net use * /del /y 清空登陆信息后,就能够正常访问了。 3、错误原因: 事实上这个不是samba的限制,而是Windows的限制。 在打开存在public=yes的samba服务器时,如果首先点击了有public=yes的共享资源的时候,widows会用默认的用户名去连接服务器,一般就是windows的登录名,之后再去点击没有public=yes的共享资源,由于使用了user级别,服务器就要验证,可是由于之前的默认登录已经存在,就出现了上述故障。即使注销连接后如果没有采用正确的顺序访问共享资源,仍然会陷入这个泥潭中。 因此,最好办法就是不用public=yes,给公共帐号建立一个共用的账户并公示出来。这样处理,其实权限更清晰一些。