每个windows客户端用户必须有一个对应的LINUX帐户,SAMBA使用UID/GID来完成这种帐号的映射,Samba用户的UID是与Linux系统用户的UID一一对应的。
必须首先存在一个Linux系统用户,才能为他增加一个Samba帐号,每个Samba用户在Linux上的权限,最终由这个帐号对应的Linux用户所决定 。
root@ubuntu-sv:/usr# mkdir tmp
root@ubuntu-sv:/usr/tmp# wget http://samba.org/samba/ftp/rc/samba-3.5.0rc2.tar.gz
--2010-02-16 20:01:44-- http://samba.org/samba/ftp/rc/samba-3.5.0rc2.tar.gz
Resolving samba.org... 216.83.154.106
Connecting to samba.org|216.83.154.106|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 30734155 (29M) [application/x-gzip]
Saving to: `samba-3.5.0rc2.tar.gz'
100%[======================================>] 30,734,155 231K/s in 2m 14s
2010-02-16 20:03:58 (224 KB/s) - `samba-3.5.0rc2.tar.gz' saved [30734155/30734155]
root@ubuntu-sv:/usr/tmp# wget http://nchc.dl.sourceforge.net/project/openantivirus/samba-vscan/0.3.6/samba-vscan-0.3.6.tar.bz2
--2010-02-17 12:35:45-- http://nchc.dl.sourceforge.net/project/openantivirus/samba-vscan/0.3.6/samba-vscan-0.3.6.tar.bz2
Resolving nchc.dl.sourceforge.net... 211.79.60.17, 2001:e10:ffff:1f02::17
Connecting to nchc.dl.sourceforge.net|211.79.60.17|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 166733 (163K) [application/x-bzip2]
Saving to: `samba-vscan-0.3.6.tar.bz2'
100%[===================================================================================>] 166,733 110K/s in 1.5s
2010-02-17 12:35:50 (110 KB/s) - `samba-vscan-0.3.6.tar.bz2' saved [166733/166733]
root@ubuntu-sv:/usr/tmp# tar -xf samba-vscan-0.3.6.tar.bz2
root@ubuntu-sv:/usr/tmp/samba-vscan-0.3.6# apt-get install gcc
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会安装下列额外的软件包:
binutils cpp-4.4 gcc-4.4 gcc-4.4-base libc-bin libc-dev-bin libc6 libc6-dev libgcc1 libgomp1 libstdc++6 linux-libc-dev
建议安装的软件包:
binutils-doc gcc-4.4-locales gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc
gcc-4.4-multilib libmudflap0-4.4-dev gcc-4.4-doc libgcc1-dbg libgomp1-dbg libmudflap0-dbg libcloog-ppl0 libppl-c2 libppl7
glibc-doc
下列【新】软件包将被安装:
binutils gcc gcc-4.4 libc-dev-bin libc6-dev libgomp1 linux-libc-dev
下列的软件包将被升级:
cpp-4.4 gcc-4.4-base libc-bin libc6 libgcc1 libstdc++6
共升级了 6 个软件包,新安装了 7 个软件包,要卸载 0 个软件包,有 54 个软件未被升级。
需要下载 17.6MB 的软件包。
解压缩后会消耗掉 31.7MB 的额外空间。
您希望继续执行吗?[Y/n]y
root@ubuntu-sv:/usr/tmp# tar -xf samba-3.5.0rc2.tar.gz
root@ubuntu-sv:/usr/tmp/samba-3.5.0rc2# apt-get install libcups2-dev libldap2-dev libkrb5-dev libpam0g-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会安装下列额外的软件包:
comerr-dev libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libgcrypt11-dev libgnutls-dev libgpg-error-dev
libgssapi-krb5-2 libgssrpc4 libk5crypto3 libkadm5srv6 libkdb5-4 libkrb5-3 libkrb5support0 libtasn1-3-dev zlib1g-dev
建议安装的软件包:
doc-base cups-common libgcrypt11-doc gnutls-doc gnutls-bin guile-gnutls krb5-doc krb5-user
下列【新】软件包将被安装:
comerr-dev libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libcups2-dev libgcrypt11-dev libgnutls-dev
libgpg-error-dev libgssrpc4 libkadm5srv6 libkdb5-4 libkrb5-dev libldap2-dev libpam0g-dev libtasn1-3-dev zlib1g-dev
下列的软件包将被升级:
libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5support0
共升级了 4 个软件包,新安装了 17 个软件包,要卸载 0 个软件包,有 50 个软件未被升级。
需要下载 4,022kB 的软件包。
解压缩后会消耗掉 11.6MB 的额外空间。
您希望继续执行吗?[Y/n]
root@ubuntu-sv:/usr/tmp/samba-3.5.0rc2#cd source3
root@ubuntu-sv:/usr/tmp/samba-3.5.0rc2/source3# ./configure --prefix=/usr/local/samba --enable-cups --with-ads --with-ldap --with-pam --with-quotas --with-utmp --with-acl-support --with-aio-support --with-winbind
--with-utmp表示开户utmp审计
--enable-cups 表示开启CUPS打印系统
--with-ads 表示开启微软active directory
--with-quotas 支持磁盘限额
--with-aio-support 支持异步IO
root@ubuntu-sv:/usr/tmp/samba-3.5.0rc2/source3# make
root@ubuntu-sv:/usr/tmp/samba-3.5.0rc2/source3# make install
root@ubuntu-sv:/usr/tmp/samba-3.5.0rc2/source3# cp /usr/tmp/samba-3.5.0rc2/examples/tridge/smb.conf /usr/local/samba/lib/smb.conf
建立2个用户(df和lx,属于smbusers用户组)
root@ubuntu-sv:/home# groupadd smbusers
root@ubuntu-sv:/home# useradd -m -s /bin/false df
ubuntu-sv:/home# useradd -m -s /bin/false lx
root@ubuntu-sv:/home# usermod -G smbusers df
root@ubuntu-sv:/home# usermod -G smbusers lx
root@ubuntu-sv:/# cd home
root@ubuntu-sv:/home# mkdir smbsv
root@ubuntu-sv:/home# useradd -m -s /bin/false myguest
root@ubuntu-sv:/home# cd smbsv
建立public目录,myguest用户都可以读写文件
root@ubuntu-sv:/home/smbsv# mkdir public
建立sharefiles目录,smbusers用户组中的任何用户可以读和写自己的文件,只能读其他人的文件
root@ubuntu-sv:/home/smbsv# mkdir sharefiles
还有一个mydoc,用户的私有空间(这个就是每个用户的HOME目录下的子目录 )
root@ubuntu-sv:/home/smbsv# smbpasswd -a lx
root@ubuntu-sv:/home/smbsv# smbpasswd -a df
root@ubuntu-sv:/home/smbsv# smbpasswd -a myguest
设置文件权限属性
root@ubuntu-sv:/home/smbsv# chgrp myguest public
root@ubuntu-sv:/home/smbsv# chown myguest public
root@ubuntu-sv:/home/smbsv# chmod 755 public
root@ubuntu-sv:/home/smbsv# chgrp smbusers sharefiles
root@ubuntu-sv:/home/smbsv# chown df sharefiles
root@ubuntu-sv:/home/smbsv# chmod 775 sharefiles
root@ubuntu-sv:/cdrom#
编辑/usr/local/samba/lib/smb.conf(并且加上mydoc的文件删除后不物理删除,而是放在.recycle_files的隐含目录中)
root@ubuntu-sv:/# cat /usr/local/samba/lib/smb.conf
[global]
config file = /usr/local/samba/lib/smb.conf.%m
security = user
encrypt passwords = yes
server string = Welcome to deepfuture server ! (%v,%h)
load printers = yes
log level = 1
log file = /usr/local/samba/var/log.%m
hosts allow = 192.168.1. 127.0.0.1
password level = 0
auto services = df
message command = csh -c '/usr/bin/X11/xedit -display :0 %s;rm %s' &
socket options = TCP_NODELAY
share modes = yes
locking = yes
strict locking = yes
keepalive = 30
include = /usr/local/samba/lib/smb.conf.%m
include = /usr/local/samba/lib/smb.conf.%a
unix charset=gb2312
dos charset=cp936
netbios name =DPF
[sharedoc]
comment=sharedoc
path=/home/smbsv/sharefiles
read only = no
valid users=@smbusers
create mask = 0755
vfs object=recycle
recycle:repository=.recycle_files
[publicdoc]
comment=publicdoc
path=/home/smbsv/public
read only= no
valid users=myguest
create mask=0775
[mydoc]
comment=mydoc
path=/home/%U
guest ok = no
read only = no
invalid users=myguest
root@ubuntu-sv:/#
在sharedoc中删除文件后,可以看到.recycle_files自动建立了,并且删除的文件都在这里
root@ubuntu-sv:/home/smbsv/sharefiles# ls -a
. .. dd-df .recycle_files
root@ubuntu-sv:/home/smbsv/sharefiles# cd .recycle_files
root@ubuntu-sv:/home/smbsv/sharefiles/.recycle_files# ls -l
total 8
-rwxr--r-- 1 lx lx 5 2010-02-18 17:04 lx.txt
-rwxr--r-- 1 lx lx 10 2010-02-18 17:24 ??????.txt
root@ubuntu-sv:/home/smbsv/sharefiles/.recycle_files#
运行发现有以下错误
root@ubuntu-sv:/usr/local/samba/bin# smbd
smbd: error while loading shared libraries: libwbclient.so.0: cannot open shared object file: No such
原因在于:
LD_LIBRARY_PATH
移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中。
当执行函数动态链接.so时,如果此文件不在缺省目录下‘/usr/local/lib’ and ‘/usr/lib’.
那么就需要指定环境变量LD_LIBRARY_PATH
假如现在需要在已有的环境变量上添加新的路径名,则采用如下方式:
LD_LIBRARY_PATH=NEWDIRS:$LD_LIBRARY_PATH.(newdirs是新的路径串)
(注:gnu系统可以自动添加在 /etc/ld.so.conf文件中来实现环境变量的设置)
修改后,/etc/environment应如下内容:
root@ubuntu-sv:/usr/local/samba/bin# cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/java/bin:/usr/local/samba/bin:
/usr/local/samba/sbin"
CLASSPATH=/usr/lib/jvm/java/lib
JAVAHOME=/usr/lib/jvm/java/
LD_LIBRARY_PATH=/usr/local/samba/lib
还有一个错误要注意:
不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连
C:\Documents and Settings\Administrator>net use * /del
您有以下的远程连接:
\\192.168.0.250\zhangjm
继续运行会取消连接。
是否继续此操作? (Y/N) [N]:
选择y 。
事实上这个不是samba的限制。
是Windows的限制。
始终要用public=yes的话,上面的方法都不能有效解决,因为:
在打开存在public=yes的samba服务器时,如果首先点击了有public=yes的共享资源的时候,widows会用默认的用户名去连接服务器,一般就是windows的登录名(可以在服务器端查看到的),这时候,再去点击没有public=yes的共享资源,由于使用了user级别,服务器就会要求验证,这时,之前的默认登录已经存在,就出现故障了。即使注销连接后如果没有采用正确的顺序访问共享资源,还是会陷入这个泥潭中。
因此,最好办法就是不用public=yes,给公共帐号建立一个共用的账户并公示出来。这样处理,其实权限更清晰一些。