李 鹏 曲广平
1.烟台职业学院电子工程系 山东 烟台 264670
2.烟台职业学院信息工程系 山东 烟台 264670
文件共享是局域网中经常用到的一项功能,如何设置并使用文件共享在技术上并不复杂,其中的问题主要集中在权限设置方面。比如教师要设置一个共享文件夹以便于学生上交作业,但又不希望学生能够随便去改动甚至删除其他同学的作业,即需要每个学生只可以改动或删除自己上传的文件,但不能去改动或删除别人的文件。这个权限要求看似简单,但在利用Windows系统搭建的文件服务器中很难实现,因为无论是共享权限还是NTFS安全权限都没有提供这种权限功能。在Linux系统中则有一种称为粘滞位(sticky bit,简称sbit)的特殊权限,结合Samba服务器就可以实现上面这个要求。
本文以上述要求为例,分析了如何在Samba服务器中应用sbit粘滞位权限,系统环境采用RedHat Enterprise Linux 6(以下简称 RHEL6)系统。
Linux系统中的基本权限只有读、写、执行三种,分别用权限字符r、w、x表示,结合着文件所有者、文件所属组和其他用户来为文件或目录分配权限,如图1所示。
图1 Linux系统中的权限结构
例如,查看目录/home/test的权限:
[root@localhost~]# ll-d/home/test
drwxrwxrwx.2 root root 4096 12 月 3 16:56/home/test
可以看到所有用户都对/home/test目录具有“读、写、执行(rwx)”权限。
Linux系统规定,用户只要对某个目录具备“写入(w)”权限,那么便可以修改或删除该目录中的任何文件,而不论这个文件的权限是什么。
例如,查看/home/test目录中file1文件的权限:
[root@localhost~]# ll/home/test/file1
-rw-r--r--.1 root root 0 12 月 3 17:01/home/test/file1
这个文件看似只有root用户才具有 “写入(w)”权限,但因为所有用户都从/home/test目录获得了“写入(w)”权限,因而其实所有人都可以来修改或删除file1文件。
在这种情况下就可以为/home/test目录设置sbit粘滞位权限。当目录被设置了sbit权限之后,即便用户对目录有“写入(w)”权限,也不能删除该目录中其他用户的文件数据,而是只有该文件的所有者和root用户才有权将其删除。设置了sbit权限之后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据。
sbit作为一种特殊权限,只能针对目录设置,对于文件无效。
sbit权限的权限字符是 “t”,而且它只能针对“其他用户(other)”设置,使用chmod命令设置目录权限时,“o+t”、“o-t”权限模式可分别用于添加、移除sbit权限。
例如,为/home/test目录设置sbit权限:
[root@localhost~]# chmod o+t/home/test
[root@localhost~]# ll-d/home/test
drwxrwxrwt.2 root root 4096 12 月 3 17:01/home/test
可以看到,在设置了sbit权限之后,“其他用户(other)”的“执行(x)”权限位被“sbit(t)”给占据了。至于原先的执行权限标记“x”,Linux系统是这样规定的:如果本来在该位上有“x”执行权限,则sbit权限显示为小写字母“t”;否则,显示为大写字母“T”。
sbit权限对应的八进制数字为1,也可以通过数字的方式来添加或去除sbit权限:
[root@localhost~]# chmod 1777/home/test #添加sbit权限
[root@localhost~]# chmod 0777/home/test #去除sbit权限
这样,在设置了sbit权限之后,在/home/test目录中除了所有者和root用户之外,其他用户就不能再随意改动或删除别人的文件了。
Samba是Linux系统中提供的文件服务器,它既可以支持Linux客户端也可以支持Windows客户端访问,而且Samba服务是免费的,其安全性、易用性和稳定性等各方面都能够得到保证,因而是Linux系统中应用最为广泛的服务之一。
下面通过Samba服务将/share目录设成共享,同时结合sbit粘滞位权限以满足本文开头所提出的案例要求。
(1)安装并启动Samba服务
RHEL6系统默认并没有安装Samba服务,但在RHEL6的系统光盘中提供了Samba服务的安装包,下面将RHEL6系统光盘设置为yum源,并采用yum方式安装Samba。如果需要安装最新版本的Samba,也可以从网上下载相应的源码安装包进行安装。
挂载RHEL6系统光盘,并设置为yum源:
[root@localhost ~]# mkdir /mnt/cdrom#创建挂载点目录
[root@localhost ~]#mount/dev/cdrom /mnt/cdrom #挂载光盘
[root@localhost~]# vim/etc/yum.repos.d/dvd.repo #生成yum源定义文件
[dvd]
name=rhel6 dvd
baseurl=file:///mnt/cdrom/
enabled=1
gpgcheck=0
yum源定义好之后,接下来利用yum方式安装Samba服务:
[root@localhost~]# yum install samba
Samba对应的进程服务名为smb,下面启动smb并将之设为永久启动:
[root@localhost~]# service smb start
[root@localhost~]# chkconfig smb on
(2)配置 Samba服务
Samba服务的主配置文件为“/etc/samba/smb.conf”,利用vi编辑器打开该文件之后,首先在【global】全局项中设置:
security=user
“security”项用于设置安全级别,设为“user”表示禁止匿名访问,这样当客户端在访问Samba服务器时,要由本地服务器对其进行身份验证。
smb.conf文件中默认还有【homes】项和【printers】项,分别用于共享用户的家目录和打印机,如果不需要这些默认的共享,可以在相关设置行前加上“#”将它们注释掉。
(3)将/share 目录设为共享
在smb.conf文件中添加如下内容,将/share目录设为共享:
对设置项目的说明:
·[share]:共享名。
·commnet:对共享的描述信息。
·path:共享目录的路径,必须为绝对路径。
·public:是否允许所有用户访问。
·writable:是否允许写入。
用户在访问Samba共享目录时的最终权限,是共享目录的系统权限与Samba权限的最小交集。这里设置“writable=yes”,即将Samba权限完全开放,如此只需设置系统权限便是用户访问共享时的最终权限。
设置完成后,将文件保存退出。
(4)添加 Samba用户
Samba用户即客户端在访问Samba服务器时所要输入的用户名和密码,Samba用户必须依赖于系统用户,要创建一个Samba用户,首先必须保证要有相应的系统用户存在,但是Samba用户的密码可以与系统用户的密码不相同。
下面先分别创建两个名为zhangsan和lisi的系统用户:
[root@localhost~]# useradd zhangsan
[root@localhost~]# useradd lisi
然后再将他们设置为Samba用户:
[root@localhost~]# smbpasswd-a zhangsan
[root@localhost~]# smbpasswd-a lisi
在设置Samba用户时,需要为用户设置Samba密码,这里强烈建议不要再用passwd命令为用户设置系统用户密码,以防止利用该用户登录系统。也就是说,这些用户只能用来访问Samba共享,而无法登录系统,这样以增强系统的安全性。
至此,Samba服务便配置好了,最后重启smb服务,使配置生效:
[root@localhost~]# service smb restart
为了使客户端能够顺利访问Samba服务器,还需要将服务器中的防火墙以及SELinux安全机制全部关闭:
[root@localhost~]# service iptables stop # 关闭防火墙
[root@localhost~]#setenforce 0#关闭SELinux
首先创建共享目录/share:
[root@localhost~]# mkdir/share
然后设置所有人都对/share目录具有“读、写、执行(rwx)”权限:
[root@localhost~]# chmod 777/share
[root@localhost~]# ll-d/share
drwxrwxrwx.2 root root 4096 12 月 3 18:37/share
最后为/share目录设置sbit粘滞位权限:
[root@localhost~]# chmod o+t/share
[root@localhost~]# ll-d/share
drwxrwxrwt.2rootroot409612 月 318:37/share
下面在一台Windows客户端上进行访问测试。
在客户端可以通过UNC路径的形式访问Samba服务器,本实验环境中的Samba服务器IP地址为192.168.137.10,因而在客户端的【开始运行】中输入“\192.168.137.10share”,在随后出现的身份验证对话框中输入用户名“zhangsan”以及相应的密码,可以成功打开share共享目录,并在目录中创建测试文件zhangsan.txt。
在客户端将打开的share共享目录关闭,并执行“net use*/del”命令删除以 zhangsan用户的身份与Samab服务器之间建立好的共享连接。然后再次输入UNC路径,并以用户“lisi”的身份访问共享。lisi同样可以在共享目录中上传文件,但却无法删除zhangsan之前上传的文件zhangsan.txt。
测试成功。
在生产环境中,sbit粘滞位权限主要是针对权限比较开放的公共目录设置,其用途就是防止随意删除他人的文档,当需要为用户提供一个开放目录而又不希望造成管理混乱时,通过为目录设置sbit权限便可以解决问题,像Linux系统中的“/tmp”和“/var/tmp”目录默认便都设置了sbit权限。熟练掌握并灵活运用sbit权限,可以为网络运维与管理工作带来很大的便利。
[1]余洪春.构建高可用 Linux服务器[M].北京:机械工业出版社,2011.
[2]董良,宁方明.Linux系统管理[M].北京:人民邮电出版社,2012.