Samba系统和autofs自动挂载

2014年08月29日

有的时候需要用实验室其他人的计算机来算东西,这个时候需要把代码、配置文件啊神马的在几台电脑上倒来倒去。过去我写了一个通用的Makefile来简化代码和数据的rsync操作,其实还有更好的办法。通过网络文件系统(如NFS或Samba)加上autofs服务自动挂载,可以很好地解决这个问题。

前次配置过NFS,现在想大规模应用网络文件系统,就有点担心NFS的安全性,所以现在配置samba来做基础的文件系统。采用autofs的一个原因是担心网络不稳定的情况下文件系统的错误不好自动修复。同时,结合NIS服务,可以实现在任意一台计算机上登录而不需要预先建立用户和同步家目录。

我按照鸟哥Linux私房菜在我自己的电脑上配置好NFS服务器,把我的home目录共享出去。我改动的主要的设置如下:

[global]

        dos charset = cp950 #不同系统的编码
        unix charset = utf8
        workgroup = NICOLAS # 工作组名称
        security = user # 密码验证方式及密码数据库
        passdb backend = tdbsam
        load printers = No
        case sensitive = Yes # 开启文件名大小写敏感

[home] # 要分享的项目名称
        comment = My home dirctory
        path = /my/home #需要共享的我的家目录
        read only = No
        create mask = 0664 #设置权限
        directory mask = 0775
        force user = your-user-name
        force group = your-user-name

我用Linux比较多,如果不打开大小写敏感的话自己写的有些命令运行不了。

配置好后可以用命令testparm命令查看语法什么的都对了没。

然后,需要加入分享文件的用户民和密码到samba数据库:

sudo smbpasswd -a your_user_name

完成后重启smbd服务:

sudo service smbd restart

然后到其他客户端机器上输入以下命令安装cifs客户端后挂载:

sudo apt-get install cifs-utils
sudo mount //IP/项目名称 /mnt -o credentials=/path/to/smbcredentials,uid=your_uid,gid=your_gid

一般来说共享服务方和客户端上的GID/UID会不一样,需要在选项里填上你在客户端机器上账户的uid和gid,这可以通过id your_user_name查看。同时,为保障samba账号安全性将账号密码存放在权限为600的单独文件smbcredentials中:

username=your_user_name
password=your_smb_password

如果samba服务器在路由器后面,那么应该在路由器上打开137/138/139/445这几个端口映射。

NFS配置成功后在客户端上装好autofs服务:

sudo apt-get install autofs

autofs的主配置文件为/etc/auto.master,里面主要内容形如:

# 挂载点   配置文件          选项
#/misc  /etc/auto.misc
#/net   -hosts
/home   /etc/auto.home
/-      /etc/auto.home.direct #直接挂载方式,在配置文件中指明挂载点
# Include /etc/auto.master.d/*.autofs
+dir:/etc/auto.master.d
+auto.master

配置文件/etc/auto.home/etc/auto.misc复制过来修改就行,规定了有哪些设备被挂载到/home目录下:

# mount dirctory name under /home and mount options for samba
your_home   -fstype=cifs,credentials=/path/to/smbcredentials,uid=your_uid,gid=your_gid    ://IP/项目名称
*           server:/home/&   #[模糊表达方式](https://help.ubuntu.com/community/Autofs)

依次是挂载的文件夹名称,挂载选项和挂载设备地址。

挂载好后重启autofs就可以了。

这之后我遇到一个问题,因为我把共享目录挂载到/home目录,那么原来别人的用户目录就被掩盖掉了(基本没用过),可以采用命令usermod -m -d /path/to/new/home/dir userNameHere迁移该用户的主目录地址,然后移动数据过去就行了。为了方便以后新加用户自动到其他目录,可以修改默认/etc/default/useradd文件中的HOME变量。

另外一个解决方案是采用autofs的直接挂载方式,在配置文件中指明挂载点。

至此,大功告成。