怎样在Linux系统搭建Samba共享服务器
Samba是Linux发行版常用的文件共享服务器,可用于实现与Windows系统之间的文件共享交换,让即时不了解Linux的用户也能够轻易的访问Linux系统中的文件。但是如何搭建Samba服务器是其中的关键。这里我们就来搭建一个共享用户目录的Samba服务器。
首先需要登入安装了Linux系统的计算机,安装Samba。Fedora发行版一般使用yum工具安装Samba服务器,可以使用“ rpm -q samba”查询Samba服务器是否已经安装,当然,也可以直接使用“ yum install samba”安装Samba服务器。如果Samba已经安装,yum会给出提示,否则按照步骤,输入“y”就可以直接下载安装Samba服务器了。
安装完成之后,需要查看一下Samba是否已经加入到自启动服务。使用“ /sbin/chkconfig | grep smb”和“ /sbin/chkconfig | grep nmb”命令可以查看smb和nmb是否加入到系统服务。(SMB是Samba共享服务,nmb是NetBIOS服务,为配合Windows使用,他们两个服务都要加入到系统服务中)。然后再使用“ /sbin/service smb status”和“ /sbin/service nmb status”查看服务是否已经启用。
接下来就要配置samba服务器了。编辑修改“ /etc/samba/smbconf”,设置共享和认证参数。如图就是我在用的Samba用户共享典型配置文件。编辑修改完成之后,可以使用“ testparm /etc/samba/smbconf”验证配置文件的有效性,以免因配置文件错误而导致Samba服务无法启动。
验证OK的话,接下来就是添加Samba共享用户了,使用“ /usr/bin/smbpasswd -a 用户名称”的方式添加Samba共享用户,并为每个用户设置Samba共享认证的密码。
到这里基本上Samba服务器配置就完成了,如果上述步骤中smb和nmb服务没有自动添加到系统服务中,可以使用“ /sbin/chkconfig --level 2345 smb on”和“ /sbin/chkconfig --level 2345 nmb on”将其加入到系统服务中,其中2345是Linux的运行级别,一般都不会超出这几个运行级别。然后我们就可以使用“ /sbin/service smb restart”和“ /sbin/service nmb restart”重启服务了。
重启完成之后,Windows就可以访问用户共享了。在Windows资源管理器输入“ \\共享IP地址\共享用户”,就可以访问用户自己目录下的全部文件了。
为了测试共享权限,我们进入用户共享目录,尝试在Windows资源管理器中创建一个“ test”目录。
回到Linux的用户目录,我们就可以看到,Windows和Linux查看到的用户共享目录是一致的。(你可能觉得看到的文件和目录说不一致,这是因为我的Windows设置了显示隐藏文件和文件夹的缘故。)
本文记录配置Linux服务器的初步流程,也就是系统安装完成后,下一步要做的事情。这主要是我自己的总结和备忘,如果有遗漏,欢迎大家补充。
下面的操作针对Debian/Ubuntu系统,其他Linux系统也类似,就是部分命令稍有不同。
第一步:root用户登录
首先,使用root用户登录远程主机(假定IP地址是128199209242)。
ssh root@128199209242
这时,命令行会出现警告,表示这是一个新的地址,存在安全风险。键入yes,表示接受。然后,就应该可以顺利登入远程主机。
接着,修改root用户的密码。
passwd
第二步:新建用户
首先,添加一个用户组(这里假定为admin用户组)。
addgroup admin
然后,添加一个新用户(假定为bill)。
useradd -d /home/bill -s /bin/bash -m bill
上面命令中,参数d指定用户的主目录,参数s指定用户的shell,参数m表示如果该目录不存在,则创建该目录。
接着,设置新用户的密码。
passwd bill
将新用户(bill)添加到用户组(admin)。
usermod -a -G admin bill
接着,为新用户设定sudo权限。
visudo
visudo命令会打开sudo设置文件/etc/sudoers,找到下面这一行。
root ALL=(ALL:ALL) ALL
在这一行的下面,再添加一行。
root ALL=(ALL:ALL) ALLbill ALL=(ALL) NOPASSWD: ALL
上面的NOPASSWD表示,切换sudo的时候,不需要输入密码,我喜欢这样比较省事。如果出于安全考虑,也可以强制要求输入密码。
root ALL=(ALL:ALL) ALLbill ALL=(ALL:ALL) ALL
然后,先退出root用户的登录,再用新用户的身份登录,检查到这一步为止,是否一切正常。
exitssh bill@128199209242
第三步:SSH设置
首先,确定本机有SSH公钥(一般是文件~/ssh/id_rsapub),如果没有的话,使用ssh-keygen命令生成一个(可参考我写的SSH教程)。
在本机上另开一个shell窗口,将本机的公钥拷贝到服务器的authorized_keys文件。
cat ~/ssh/id_rsapub | ssh bill@128199209242 'mkdir -p ssh cat - ~/ssh/authorized_keys'# 或者在服务器端,运行下面命令echo "ssh-rsa [your public key]" ~/ssh/authorized_keys
然后,进入服务器,编辑SSH配置文件/etc/ssh/sshd_config。
sudo cp /etc/ssh/sshd_config ~sudo nano /etc/ssh/sshd_config
在配置文件中,将SSH的默认端口22改掉,可以改成从1025到65536之间的任意一个整数(这里假定为25000)。
Port 25000
然后,检查几个设置是否设成下面这样,确保去除前面的#号。
Protocol 2PermitRootLogin noPermitEmptyPasswords noPasswordAuthentication noRSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile ssh/authorized_keysUseDNS no
上面主要是禁止root用户登录,以及禁止用密码方式登录。
接着,在配置文件的末尾,指定允许登陆的用户。
AllowUsers bill
保存后,退出文件编辑。
接着,改变authorized_keys文件的权限。
sudo chmod 600 ~/ssh/authorized_keys chmod 700 ~/ssh/
然后,重启SSHD。
sudo service ssh restart# 或者sudo /etc/initd/ssh restart
下面的一步是可选的。在本机~/ssh文件夹下创建config文件,内容如下。
Host s1HostName 128199209242User billPort 25000
最后,在本机另开一个shell窗口,测试SSH能否顺利登录。
ssh s1
第四步:运行环境配置
首先,检查服务器的区域设置。
locale
如果结果不是en_USUTF-8,建议都设成它。
sudo locale-gen en_US en_USUTF-8 en_CAUTF-8sudo dpkg-reconfigure locales
然后,更新软件。
sudo apt-get updatesudo apt-get upgrade
最后,再根据需要,做一些安全设置,比如搭建防火墙,关闭HTTP、HTTPs、SSH以外的端口,这里就不一一介绍了,谢谢阅读,希望能帮到大家,请继续关注脚本之家,我们会努力分享更多优秀的文章。
1、关闭不需要的服务
这个应该很容易理解的,凡是我们的系统不需要的服务,一概关闭,这样一个好处是减少内存和CPU时间的占用,另一个好处相对可以提高安全性
那么哪些服务是肯定要保留的呢
在linux机器上通常有四项服务是必须保留的
iptables
linux下强大的防火墙,只要机器需要连到网上,哪里离得开它
network
linux机器的网络,如果不上网可以关闭,只要上网当然要打开它
sshd
这是openssh server,如果你的机器不是本地操作,而是托管到IDC机房,
那么访问机器时需要通过这个sshd服务进行
syslog
这是linux系统的日志系统,必须要有,
否则机器出现问题时会找不到原因
除了这四项必需的服务之外,其他的服务需要保留哪些呢
这时就可以根据系统的用途而定,比如:数据库服务器,就需要启用mysqld(或oracle)
web服务器,就需要启用apache
2、关闭不需要的tty
请编辑你的/etc/inittab
找到如下一段:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
这段命令使init为你打开了6个控制台,分别可以用alt+f1到alt+f6进行访问
此6个控制台默认都驻留在内存中,事实上没有必要使用这么多的
你用ps auxf这个命令可以看到,是六个进程
root 3004 00 00 1892 412 tty1 Ss+ Jun29 0:00 /sbin/mingetty tty1
root 3037 00 00 2492 412 tty2 Ss+ Jun29 0:00 /sbin/mingetty tty2
root 3038 00 00 2308 412 tty3 Ss+ Jun29 0:00 /sbin/mingetty tty3
root 3051 00 00 1812 412 tty4 Ss+ Jun29 0:00 /sbin/mingetty tty4
root 3056 00 00 2116 412 tty5 Ss+ Jun29 0:00 /sbin/mingetty tty5
root 3117 00 00 2396 412 tty6 Ss+ Jun29 0:00 /sbin/mingetty tty6
3如何关闭这些进程
通常我们保留前2个控制台就可以了,
把后面4个用#注释掉就可以了
然后无需重启机器,只需要执行 init q 这个命令即可
init q
q作为参数的含义:重新执行/etc/inittab中的命令
修改完成后需重启机器使之生效
4、如何关闭atime
一个linux文件默认有3个时间:
atime:对此文件的访问时间
ctime:此文件inode发生变化的时间
mtime:此文件的修改时间
如果有多个小文件时通常没有必要记录文件的访问时间,
这样可以减少磁盘的io,比如web服务器的页面上有多个小
如何进行设置呢
修改文件系统的配置文件:vi /etc/fstab
在包含大量小文件的分区中使用noatime,nodiratime两项
例如:
/dev/md5 /data/pics1 ext3 noatime,nodiratime 0 0
这样文件被访问时就不会再产生写磁盘的io
5、一定要让你的服务器运行在level 3上
做法:
vi /etc/inittab
id:3:initdefault:
让服务器运行X是没有必要的
6,优化sshd
X11Forwarding no //不进行x图形的转发
UseDNS no //不对IP地址做反向的解析
7、优化shell
修改命令history记录
# vi /etc/profile
找到 HISTSIZE=1000 改为 HISTSIZE=100
然后 source /etc/profile
一、获取源代码包并进行解压
从samba的官方网站可以下载最新的samba源代码包。下面我们以samba-359targz的源代码包作为案例进行解析。本例中,我们将源代码包放在目录/home/samba下,然后执行下面的命令进行解压缩。
代码如下:
# tar –xzvf samba-359targz
二、配置configure
对源代码包进行解压缩后,进入目录
代码如下:
# cd /home/samba/samba-359/source3
然后执行下面的命令进行配置。
代码如下:
# /configure
可能在刚开始时,该目录下没有configure文件,此时可先执行下面的命令
代码如下:
# /autogen-sh
此时要求系统安装了autoconf、automake等工具。
在运行上面的配置命令之前,我们可以通过命令
代码如下:
# /configure –-help
来查看配置命令的一些选项。
三、生成与安装make make install
在环境配置命令/configure成功执行后,可以运行命令
代码如下:
# make
来生成二进制可执行文件,这可能需要两到三分钟。成功生成可执行文件后,可以通过下面命令
代码如下:
#make install
来进行安装。系统默认的安装路径是/usr/local/samba
四、配置动态链接库路径
安装完成后,我们需要配置动态链接库路径,因为运行samba的进行smbd和nmbd需要到目录/usr/local/samba/lib下的动态链接库文件。但是该目录不是系统默认的动态链接库文件搜索路径,于是我们需要将该目录添加到文件ldsoconf中。执行下面的命令
代码如下:
# vi /etc/ldsoconf
打开ldsoconf文件,并在该文件中加入下面这一行内容。
代码如下:
/usr/local/samba/lib
然后执行命令
代码如下:
# ldconfig
来更新动态链接库缓冲。
五、samba配置文件smbconf
samba在运行过程中需要用到配置文件smbconf。smbconf配置文件是samba最重要的配置文件,该文件定义了samba的安全机制、文件共享和打印共享的目录和参数以及其他一些系统配置功能。
配置文件smbconf的默认路径是/usr/local/samba/lib/smbconf,我们可以在运行smbd进程时,通过-s选项来执行特定的smbconf文件(具体说明见下一节),一般不推荐使用-s选项,因为其配置工具,如smbclient、testparm等默认都是读取/usr/local/samba/lib/smbconf文件。下面我们以一个简单的配置文件进行说明,其路径为/etc/samba/smbconf。
代码如下:
[global]
workgroup = MYGROUP
server string = Samba Server %v
security = user
log file = /var/log/samba/%mlog
passdb backend = smbpasswd
smb passwd file = /etc/samba/smbpasswd
[root]
path = /
valid users = root
writeable = yes
[public]
path = /data
guest ok = yes
read only = yes
上面配置文件定义了root和public两个文件共享服务。关于上面这个配置文件的具体细节,我们这里不做详细的论述。这里主要说明的一点:在samba 3023版本以前验证用户密码的默认backend是smbpasswd,而3023版本之后的默认backend是tdbsam。我们可以通过参数passdb backend来选择特定的backend。在使用smbpasswd时默认读取的密码文件时/usr/local/samba/private/smbpasswd,我们可以通过smb passwd file来指定特定的密码文件。
在配置完smbconf文件后,我们可以运行testparm(目录/usr/local/samba/lib下)命令来对smbconf文件进行语法检查,其会检测出哪些参数名无法识别等问题。
六、启动samba
samba有两个主要的进程smbd和nmbd。smbd进程提供了文件和打印服务,而nmbd则提供了NetBIOS名称服务和浏览支持,帮助SMB客户定位服务器,处理所有基于UDP的协议。
配置smbconf文件后,在开始运行samba的服务进程之前。我们需要先做一些准备工作。运行smbpasswd命令(在目录/usr/local/samba/bin下)
代码如下:
# /smbpasswd –a root
向smbconf文件中指定的/etc/samba/smbpasswd文件中添加root用户以及密码信息。关于smbpasswd文件的详细内容介绍见相关文档。
然后运行命令
代码如下:
# service iptables stop
关闭防火墙,因为防火墙可能会阻止用户访问该机器。下面是运行samba的服务进程smbd和nmbd
代码如下:
# /usr/local/samba/sbin/smbd –D –s /etc/samba/smbconf
# /usr/local/samba/sbin/nmbd –D –s /etc/samba/smbconf
上面的-D选项指定smbd和nmbd以守护进程的方式启动,并且通过-s选项指定了特定的配置文件/etc/samba/smbconf。以守护进程方式启动smbd和nmbd的优势是响应速度快,但是要关闭的话只能kill掉。当然我们可以通过脚本来执行这些操作,这里就不提供脚本了。
七、smbclient进行测试检查
在启动samba之后,我们可以在本机使用smbclient(目录/usr/local/samba/bin下)来进行测试。下面命令
代码如下:
# cd /usr/local/samba/bin
# /smbclient –L //127001
可以列出本samba服务器所提供的服务列表,本例运行结果如下:
代码如下:
[root@localhost bin]# /smbclient –L //127001
Enter root’s password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 359]
p Sharename Type Comment
--------- ------- -------
IPC$ IPC IPC Service (Samba Server 359)
public Disk
root Disk
pDomain=[MYGROUP] OS=[Unix] Server=[Samba 359]
p Server Comment
----------- -------
LOCALHOST Samba Server 359
Workgroup Master
------------ -------
MYGROUP LOCALHOST
当然也可以通过smbclient来访问samba服务器提供的服务,其命令格式如下:
代码如下:
# /smbclient “//serverAdderss/aservice” –U username
其中serverAddress是要访问的samba服务器的IP地址,aservice指定samba服务器上提供的某个服务名称,选项-U username指定要以哪个用户名来访问samba服务器。例如
代码如下:
[root@localhost bin]# /smbclient “//127001/root” –U root
Enter root’s password: ; #这里输入samba用户root的密码
Domain=[MYGROUP] OS=[Unix] Server=[Samba 359]
smb: ; #访问成功,输入相关命令进行操作
上面个smb: 表明了访问成功,此时我们可以输入一些命令来在samba服务器上进行操作,比如ls、mkdir等。q或quit命令执行退出,并断开连接。
八、在Windows客户端访问samba服务器
在Windows客户端,可以在网上邻居中通过新建网上邻居来访问,或者在开始——运行中输入192168134root来访问samba服务器192168134上面提供的root服务。
九、重要选项说明
全局选项:
全局选项用于[global]的
选项定义中,其用于说明samba服务器的一些基本属性。其有些选项可以被其他
中的选项定义覆盖。
workgroup = MYGROUP
定义samba服务器所在的工作组或者域(如果设置security = domain的话)。
server string = Samba server
设定samba服务器的描述,通过网络邻居访问时可在备注中查看到该描述信息。
hosts allow = host (subnet)
设定允许访问该samba服务器的主机IP或网络,该选项的值为列表类型,不同的项目之间使用空格或逗号隔开,例如hosts allow = 19216830, 19216811,该选项设置允许主机19216811以及子网19216830/24内的所有主机访问该samba服务器。
hosts deny = host (subnet)
设定不允许访问该samba服务器的主机IP或网络,其格式与hosts allow一样。
guest account = guest
设定了游客的账号,在游客访问guest ok = yes的共享服务时,samba服务器将设置客户端以该游客账号来访问共享。
log file = MYLOGFILE
设定记录文件的位置。
max log size = size
设定记录文件的大小,单位为KB,如果设置为0则表示无大小限制。
security =
设定samba服务器的安全级,其有四种安全级别:share、user、server和domain,默认为user。关于这四种安全级别的详细信息,请查看相关文档。
password server = ServerIP
设定了用户账号认证服务器IP,其在设定security = server时有效。
encrypt passwords = yes | no
设定是否对密码进行加密。如果不对密码进行加密的话,在认证会话期间,客户端与服务器传递的是明文密码。但有些Windows系统默认情况下,不支持明文密码传输。
passdb backend = smbpasswd | tdbsam | ldapsam
设定samba服务器访问和存储samba用户账号的后端,在samba-30。23之前的默认值为smbpasswd,而之后的默认值为tdbsam。
smb passwd file =
设定samba的用户账号文件。对于源代码安装的samba,在samba-3023之前,其默认值为/user/local/samba/private/smbpasswd;而samba-3023之后,其默认值为/usr/local/samba/private/passwdtdb。
include = smbconfFile
通过include选项可以包含其他配置文件,通过该选项和一些samba定义的变量可以设定与不同机器相关的配置。
local master = yes | no
设定该samba服务器是否试图成为本地主浏览器,默认值为yes。若设置为no,则该samba服务器永远不可能成为本地主浏览器,而设置为yes不代表其一定能成为本地主浏览器,只是让其能参与本地主浏览器的选举。
os level = N
N是一个整数,设定了该samba服务器参加本地主浏览器选举时的权重,其值越大,权重越大。os level = 0时,该服务器将失去选举的机会。
domain master = yes | no
设定samba服务器成为域浏览器。域浏览器从各个本地主浏览器处获取浏览列表,并将整个域的浏览列表传递给各个本地主浏览器。
preferred master = yes | no
设定该samba服务器是否为工作组里的首要主浏览器,如果设置为yes,则在nmbd启动时,将强制一个浏览选择。
局部选项:
局部选项为除了global外的各个
中的参数。其定义了共享服务的属性。
comment =
设定共享服务的描述信息。
path =
设定共享服务的路径,其中可以结合samba预定义的变量来设置。
hosts allow = host(subnet)
hosts deny = host(subnet)
与全局的hosts allow和hosts deny含义相同,其会覆盖全局的设置。
read only = yes | no
设定该共享服务是否为只读,该选项有一个同义选项writeable。
user = user(@group)
设定所有可能使用该共享服务的用户,可以使用@group来设置群组group中的所有用户账号。该选项的值为列表,不同的项目之间使用空格或逗号隔开。在设置security = share时,客户端要访问某共享服务时提供的密码会与该选项指定的所有用户进行一一配对认证,若某用户认证通过,则以该用户权限进行共享服务访问,否则拒绝客户端的访问(设置security = share不是允许游客访问,只有guest ok = yes才是允许游客访问,切记!!!)。
valid users = user(@group)
设定能够使用该共享服务的用户和组,其值的格式与user选项一样。
invalid users = user(@group)
设定不能够使用该共享服务的用户和组,其值的格式与user选项一样。
read list = user(@group)
设定对该共享服务只有读取权限的用户和组,其值的格式与user选项一样。
write list = user(@group)
设定对该共享服务拥有读写权限的用户和组,其值的格式与user选项一样。
admin list = user(@group)
设定对该共享服务拥有管理权限的用户和组,其值的格式与user选项一样。
public = yes | no
设定该共享服务是否能够被游客访问,其同义选项有guest ok。
create mode = mode
mode为八进制值,如0755,其默认值为0744。该选项指定的值用于过滤新建文件的访问权限,新建文件的默认权限将与create mode指定的值进行按位与操作,将结果再与force create mode指定的值进行按位或操作,得到的结果即为新建文件的访问权限。
force create mode = mode
mode为八进制值,默认为0000。其作用参考选项create mode。
directory mode = mode
mode为八进制值,默认为0755。该选项指定的值用于过滤新建目录的访问权限,新建目录的默认权限将与directory mode指定的值进行按位与操作,将结果再与force directory mode指定的值进行按位或操作,得到的结果即为新建目录的访问权限。
force directory mode = mode
mode为八进制值,默认为0000。该选项的作用参考选项directory mode。
force user = user
强制设定新建文件的属性onwer。若存在一个目录,其允许guest可以写,则guest就可以删除。但设定force user为其他用户,并设置create mode = 0755,则gues用户不能够删除其新建文件。
上面只是简单的介绍了一些重要的选项,并且没有讨论有关[printers]的选项说明,更多选项请man smbconf进行查阅。
0条评论