linux samba服务器的配置(Linux中Samba服务器的编译安装以及配置的宏的写法)
编译安装
查询系统是否安装samba# rpm -aq | grep samba
yast2-samba-client-2.13.36-0.8
samba-client-3.0.24-2.23
yast2-samba-server-2.13.22-0.8
samba-3.0.24-2.23卸载原有的samba
获取samba源代码
http://samba.org/samba/ftp/
获取samba源文件包(samba-3.0.24.tar.gz 做实验 ,路径/home/)
解包源文件包编译安装
新版本的source目录有两个:source3目录里是samba-3.x的源文件 ,source4目录里是samba-4.x的源文件
# ./autogen.sh
# ./configuresamba默认安装在/usr/local/samba目录
可以通过指定prefix=your location的方式来指定安装目录:期间 ,configure提示找不到cups头文件 ,于是又先安装了cups 。
# make
# make install配置动态链接库路径
加入一行
/usr/myname/install/samba/lib
<p># ldconfig执行ldconfig命令让配置生效
到安装目录
准备配置文件
# mkdir -v etc/
# cp -v /home/samba-3.0.24/examples/smb.conf.default ./etc/smb.conf修改配置文件 ,添加一个共享test
# vi ./etc/smb.conf
workgroup = MSHOME 改为你linux所在的工作组
security = share 开放共享在smb.conf最后加上
[test]
comment = test
path = /home/
public = no
writable = yes
user = kk检测配置文件
# cp -v ./etc/smb.conf ./lib/
# ./bin/testparm添加账户kk
输入密码
启动samba
# /sbin/service network restart
# ./sbin/smbd -D
# ./sbin/nmbd -D检测是否启动
# ps aux | grep smb
# ps aux | grep nmbwin7/win8 下访问Samba服务 密码出错 问题
windows系统中 ,单击[开始]——[运行] 输入 “secpol.msc ”打开管理工具 ,展开“本地策略 ”;
然后 ,单击“安全选项 ” 。 双击“网络安全:LAN Manager 身份验证级别 ”;
最后 ,单击列表中:发送LM和NTLMv2,如果已协商 ,则使用NTLMv2协议 。基本的宏的编写
Samba 字符处理系统
1. samba使用多字节字符串——unix字符串(unix strings)
unix字符串没有固定的字节长度 ,但是遵循以下原则:
a. 除非是在终端,否则不能含有NULL;
b. 兼容7位的C字符串(C strings) ,对于C中的常量字符和字符串 ,其每一位都要和unix字符(串)中的位完全等同;
c. 大小写转换是,转换后的字符(串)不能占更多的位;
d. 能够准确接收客户端传入的全部字符 。
UTF-8和大多数多字节的亚洲语言都能够很好的兼容unix 。UCS2是例外(含NULL) 。
在smb.conf中定义unix charset 。
在与客户端发送或接收数据的时候 ,为了兼容客户端的字符编码 ,需要使用pull_(接收) 和push_(发送)开头的函数在buffer中格式化数据 。
lp_开头的函数 ,返回值全部是unix strings 。
2. 相关宏定义(byteorder.h)
CVAL(buf,pos)将buf中pos处的字节以无符号字符返回
PVAL(buf,pos)将buf中pos处的字节以无符号整型返回
SCVAL(buf,pos,val)将buf中pos处的字节设置为val
SVAL(buf,pos)将buf中pos处的字节以无符号小端整型(16bit ,ushort)返回
IVAL(buf,pos)将buf中pos处的字节以无符号小端整型(32bit)返回
SVALS(buf,pos)将buf中pos处的字节以有符号小端整型(16bit)返回
IVALS(buf,pos)将buf中pos处的字节以有符号小端整型(32bit)返回
SSVAL(buf,pos,val)将buf中pos处的无符号小端整型(16bit)值设置为val
SIVAL(buf,pos,val)将buf中pos处的无符号小端整型(32bit)值设置为val
SSVALS(buf,pos,val)将buf中pos处的有符号小端整型(16bit)值设置为val
SIVALS(buf,pos,val)将buf中pos处的有符号小端整型(32bit)值设置为val
RSVAL(buf,pos)将buf中pos处的字节以无符号大端整型(16bit)返回
RIVAL(buf,pos)将buf中pos处的字节以无符号大端整型(32bit)返回
RSSVAL(buf,pos,val)将buf中pos处的无符号大端整型(16bit ,ushort)值设置为val
RSIVAL(buf,pos,val)将buf中pos处的无符号大端整型(32bit)值设置为valSamba DEBUG SYSTEM
DEBUG书写规则>debugfile<:=={>debugmsg<}
>debugmsg<:==>debughdr<’/n’>debugtext<
>debughdr<:==’[’TIME’,’LEVEL’]’FILE’:’[FUNCTION]’(’LINE’)’
>debugtext<:=={>debugline<}
>debugline<:==TEXT’/n’其中 ,
TIME 时间戳 ,
LEVEL DEBUG级别 ,
FILE DEBUG信息产生的源文件 ,
FUNCTION DEBUG信息产生的函数,
LINE DEBUG信息产生的行数 ,不支持 __FUNCTION__ 宏的显示不出来 ,
TEXT 不包含/n的DEBUG信息
EG:[2011/03/17 08:33:46, 3] smbd/process.c:switch_message(914)
switch message SMBclose (pid 12153) conn 0x7f60e9a2d330
[2011/03/17 08:33:46, 3] smbd/reply.c:reply_close(3298)
close directory fnum=6574DEBUG()宏
DEBUG(para1, para2);
其中,
para1 DEBUG级别 ,凡是小于等于全局变量DEBUGLEVEL的 ,该DEBUG信息将输出到日志,
para2 DEBUG信息 ,即书写规则中的TEXT。在TEXT中 ,每遇到/n ,将产生一条新的日志(书写规则中的debugfile);没遇到/n时 ,追加TEXT 。
EG:DEBUG(0, ("The test returned "));
if(test())
{
DEBUG(0, ("True"));
}
else
{
DEBUG(0, ("False"));
}
DEBUG(0, ("./n"));假设test() == true ,则会输出:
[2010/07/30 16:00:51, 0] file.c:function (256)
The test returned True.DEBUGADD()宏
DEBUGADD(para1, para2);
其中 ,
para1 DEBUG级别 ,凡是小于等于全局变量DEBUGLEVEL的 ,该DEBUG信息将输出到日志 ,
para2 DEBUG信息,即书写规则中的TEXT 。在TEXT中 ,每遇到/n ,将产生TEXT新行;没遇到/n时,追加。它与DEBUG()的区别就是 ,它从不产生书写规则中的debughdr 。EG:
DEBUG(0, ("This is the first line./n"));
DEBUGADD(0, ("This is the second line./n This is the third line./n"));输出:
[2010/07/30 16:00:51,0] file.c:function(512)
This is the first line.
This is the second line.
This is the third line.DEBUGLVL()宏
BOOL DEBUGLVL(para1);
其中 ,
para1 DEBUG级别,凡是小于等于全局变量DEBUGLEVEL的 ,该宏返回true ,
该函数主要为了解决书写规则中TEXT太长造成的不便 。
EG:可以替换为:
DEBUG(3, ("send_local_master_announcement: "));
DEBUGADD(3, ("type %x forname %s", type, global_myname));
DEBUGADD(3, ("on subnet %s", subrec->subnet_name));
DEBUGADD(3, ("for work group %s/n", work->work_group));更可以替换为:
if(DEBUGLVL(3))
{
dbgtext("send_local_master_announcement: ");
dbgtext("type %x forname %s", type, global_myname);
dbgtext("on subnet %s", subrec->subnet_name);
dbgtext("for workgroup %s/n", work->work_group);
}dbgtext()函数
用于调用相关函数输出DEBUG信息到日志文件 ,即输出书写规则中的TEXT。
函数调用vslprintf()函数对TEXT格式化后 ,调用format debug text()函数将TEXT输出 。
一般在DEBUGLVL()宏中使用 。dbghdr()函数
用于输出DEBUG信息中的头信息 ,即输出书写规则中的debughdr 。
不对输出内容进行格式化处理 。
一般在DEBUG()宏 & DEBUGADD()宏中使用 。format debug text()函数
用于输出DEBUG信息到日志文件 ,即输出书写规则中的TEXT 。
函数将要输出的TEXT保存到buffer中 ,直到找到一个/n ,增加缩进 ,调用Debug1()函数,输出TEXT到日志 ,并清空buffer 。创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!