2018年8月

昨天把 Samba 服务器搞定了,现在已经开始用上了,之后,我把以前的移动硬盘插在了新买的华为荣耀路由器上面,启用了路由器的 Samba 服务,配置情况如下:

  • IP: 192.168.3.13
  • 用户名:username
  • 密码:password

接下来,在我的 Elementary 上面,连接该服务,并将里面的文件同步到本机。

继续之前,需要先安装 smbclient 工具:

sudo apt-get install smbclient

使用 smbclient 连接

smbclient 可以用于浏览 Samba 服务器上面的所有共享资源,也可以用于直接访问 Samba 服务器指定的共享资源。

浏览 Samba 服务器所有共享资源可以使用如下命令:

smbclient -L 192.168.3.13 -U username

输入上面命令之后,终端会要求你输入该用户名的密码,如果想直接连同密码一起输入到命令行工具中,可以像下面这样:

smbclient -L 192.168.3.13 -U username%password

终端输出如下结果:

Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.37]

    Sharename       Type      Comment
    ---------       ----      -------
    Seagate_usb1_1  Disk      
    Seagate_usb1_2  Disk 

如果要直接访问 Samba 服务器指定共享资源,可以使用下面这行命令:

smbclient //192.168.3.13/Seagate_usb1_2 -U username%password

输出:

Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.37]
smb: \> 

在 smb 环境下,我们就可以对文件进行操作。

使用 mount 方式

使用 smbclient 访问,还是很麻烦,一般我们都会将资源挂载到本地计算机上面,这样使用起来就会方便得多:

mount -t cifs //192.168.3.13/Seagate_usb1_2 /home/pantao/CloudStorages/HonorRouter -o username=username%password

如果要永久使用 Samba 服务器共享资源,可以将挂载信息写入到 /etc/fstab 文件中,在最后添加以下这行:

//192.168.3.13/Seagate_usb1_2 /home/pantao/CloudStorages/HonorRouter cifs defaults,username=username%password 0 0

由于 /etc/fstab 文件的默认权限是 0644,也就是说所有用户都可以读取,如果你不希望其它用户看到你的 Samba 用户名与密码的话,那可在 /etc/samba/pwd.conf 文件中,添加以下内容:

username=username password=password

然后在 /etc/fstab 中添加下面这行:

//192.168.3.13/Seagate_usb1_2 /home/pantao/CloudStorages/HonorRouter cifs defaults,credentials=/etc/samba/pwd.conf 0 0

 使用自动挂载

/etc/auto.master 文件中加入以下内容:

/home/pantao/CloudStorages/HonorRouter /etc/samba.misc--timeout=30 # timeout 值可以根据实际网络情况设置

然后建立 /etc/samba.misc 文件,加入以下内容:

samba-fstype=cifs,username=username,password=password ://192.168.3.13/Seagate_usb1_2

Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。第三版不仅可访问及分享SMB的文件夹及打印机,本身还可以集成入Windows Server的网域,扮演为网域控制站(Domain Controller)以及加入Active Directory成员。简而言之,此软件在Windows与UNIX系列操作系统之间搭起一座桥梁,让两者的资源可互通有无。

 安装软件

sudo apt-get install samba

 配置共享

sudo vi /etc/samba/smb.conf

在文件末尾添加以下内容:

[public]
path=/data/nfs
browseable=yes
read only=no
guest ok=yes

文件夹的可读写权限我在已经设置好了,添加了匿名的文件读写权限。

 添加系统用户到 Samba 账号:

sudo smbpasswd -a pantao # 添加系统用户 pantao 至 samba 
在执行 smbpasswd 前,需要先添加好用户 pantao,否则命令会执行失败。

重启 samba 服务

sudo service smbd restart

客户端访问

Linux 访问

smbclient -L //192.168.3.3/public

Windows 客户端访问

可以直接访问如下地址即可:

\\192.168.3.3\public

如果 public=no,则此时需要输入 samba 的用户名与密码,如果 public=yes,则作为 nobody 用户直接访问。

另外,在 Windows 客户端可以使用 net use * /del /y 这条命令清理访问缓存。

Samba 常用参数

  • comment=smb share test:该共享的备注信息
  • path=/data/nfs:共享路径
  • allow hosts=host(subnet):设置该 Samba 服务器允许的工作组或域
  • deny hosts=host(subnet):设置该 Samba 服务器拒绝的工作组或域
  • available=yes|no:设置该共享目录是否可用
  • browseable=yes|no:设置该共享目录是否可显示
  • writable=yes|no:指定该目录缺省是否可写,也可以用 readonly = no 来设置可写
  • public=yes|no:指明该共享资源是否能给游客使用, guest ok=yes 其实与 public=yes 是一样的
  • user=user,@group: user 设置所有可能使用该共享资源的用户,也可以用 @group 代表 group 这个组的所有成员,不同的项目之间使用空格或者英文逗号隔开
  • valid users=user,@group:指定能够使用该共享资源的用户和组
  • invalid users=user,@group:指定不能够使用该共享资源的用户和组
  • read list=user,@group:指定只能读取该共享资源的用户和组
  • write list=user,@group:指定能读取和写入该共享资源的用户和组
  • admin list=user,@group:指定能管理该共享资源(包括读写和权限赋予等)的用户和组
  • hide dot files=yes|no:是否像 Unix 一样,隐藏以 . 号开头的文件
  • create mode=0755:指明新建立的文件的属性,一般是0755
  • directory mode=0755:指明新建立的目录的属性,一般是 0755
  • sync always=yes|no:指明对该共享资源进行写操作后是否进行同步操作
  • short preserve case=yes|no:是否区分文件名大小写
  • preserve case=yes|no:是否保持大小写
  • case sensitive=yes|no:是否能大小写敏感,一般选 no,不然可能会引起错误
  • mangle case=yes|no:指明混合大小写
  • default case=upper|lower:指明默认的文件名是全部大写还是小写
  • force user=testuser:强制设置新建立的文件的属主是谁,如果我有一个目录, guest 用户 可以写,那么 guest 就也可以删除文件 ,但是如果我强制把建痒痒的文件的属主设置为 testuser,同时限制 create mode=0755,那么 guest 就不能删除了
  • wide links=yes|no:指明是否允许共享外符号连接,比如共享资源里面有一个连接指向非共享资源里面的文件或者目录,如果设置为 wide links=no,将使该链接不可用
  • max connections=100:最大同时连接数
  • delete readonly=yes|no:是否能删除共享资源里面已经被指定为只读的文件

以前还没有在 Linux 下使用大于 2T 的硬盘,今天入的一块 8T 硬盘,按以前的 fdisk ,发现一直就只有 2T,才发现,原来还有这么个问题,先记录下今天格式化的命令:

parted                 # 打开 parted 程序
select /dev/sdc        # 选择需要操作的硬盘
mklabel gpt            # 将 MBR 硬盘格式为 GPT
mkpart primary 0% 100% # 将整块硬盘分成一个分区
print                  # 打印分区信息
quit                   # 退出

完成上面的步骤之后,可以开始格式化刚才创建的分区了:

mkfs.ext4 -T largefile /dev/sdc1

完成之后,可以直接 mount 刚才格式化的硬盘

sudo mkdir /data
mount /dev/sdc1 /data

使用 df -h 就可以看到该磁盘的大小,如果想让系统每次启动之后自动挂载,可以编辑 /etc/fstab 文件,添加下面这一行:

/dev/sdc1 /data ext4 defaults 0 0

这么多年积累下来的照片(RAW文件都保留着)太多,西数的 NAS 有点不够用了,想着就入了一块 8T 的硬盘,扩展一下家里面的这台老台式机(安装的是 Elementary OS),搭建了一个 NFS 服务。

安装软件

sudo apt-get install nfs-kernel-server nfs-common

修改配置文件

sudo vi /etc/exports

在末尾添加下面这行:

/data/nfs *(rw,sync,no_root_squash,no_subtree_check)

上面这段表达的意思是:

/data/nfs            : 共享的目录
*                    : 指定哪些用户 可以访问
                       *             所有可以 ping 通本主机的用户 
                       192.168.3.*   指定网段,在该网段中的用户可以挂载
                       192.168.3.14  只有该 IP 的用户才能挂载
(                    : 共享参数
  rw,                  : 权限
                         ro: 只读
                         rw: 读写
  sync,                : 同步写入硬盘
  no_root_squash,      : root 用户访问此目录,具有 root 操作权限
  no_subtree_check     : 不检查父目录权限
)

常用的共享参数还有:

  • ro:只读访问
  • rw:读写访问
  • sync:同步写入硬盘
  • async:暂存内存
  • secure:NFS 通过 1024 以下的安全 TCP/IP 端口发送
  • insecure:NFS 通过 1024 以上的端口发送
  • wdelay:多个用户对共享目录进行写操作时,则按组写入数据(默认)
  • no_wdelay:多个用户对共享目录进行写操作时,则立即写入数据
  • hide:不共享其子目录
  • no_hide:共享其子目录
  • subtree_check:强制 NFS 检查父目录的权限
  • no_subtree_check:不检查父目录权限
  • all_squash:任何访问者,都转为匿名
  • root_squash :root 用户访问此目录, 映射成如 anonymous 用户一样的权限(默认)
  • no_root_squash:root 用户访问此目录,具有 root 操作权限

重启 nfs 服务

sudo /etc/init.d/nfs-kernel-server restart

到此,nfs 的服务就搭建好了

客户端访问服务器

  1. 检查客户端与服务端的网络是否连通

    ping 192.168.3.3
  2. 查看服务端的共享目录设置

    showmount -e 192.168.3.3
    
    Export list for 192.168.3.3:
    /data/nfs *
  3. 将该目录挂载到本地

    mount 192.168.3.3:/data/nfs /path/to/local/folder
  4. 访问

    cd /path/to/local/folder

前几天把家里这台用了五六年的台式机的系统,从 Windows 10 换成了 Elementary.IO 了,一个 Ubuntu 的衍生版本,使用起来,更接近 Mac 的 OSX 系统一些,本文记录了一下整个电脑工作环境的配置过程。

安装系统

这个很简单了,直接下载了 Elementary 系统之后,使用官方文档里面说明的U盘刻录工具,直接将 ISO 刻录至U盘,然后在电脑上使用U盘直接安装即可,安装过程很简单。

这里面有一个小问题,安装完了之后,我使用是 TP-Link 的 WN7200 这款WIFI网卡,这个系统好像没有驱动,最后我想了一最笨的办法解决的,买了一条20米的网线直接走了一个线,到了电脑边上,然后 再加了一个无线路由器,一来提升一下自己房间的网络速度,二来,不用再去纠结网卡驱动的问题。

安装工作软件

  • Visual Studio Code
  • Chromium 浏览器
  • Git
  • Docker
  • MySQL
  • Nginx
  • MySQL Workbench

上面这些软件反正都是直接找了官方文档安装的,还是很简单的,要安装其它的软件,系统自带有一个App Store,也可以直接使用这个工具安装。

整体来讲,这个系统除了微信跟QQ外,其它的功能基本上都可以了,哦,不对,还没有找到一个很好的图片处理软件。

不过好处是,我准备把台式机的硬盘都换一下下,换成几块大硬盘,直接做成一个家庭的 NAS 服务器。