Configuring a Linux NFS server in a SELinux-managed environment

目录 原创

The Linux kernel has supported NFS for as long as I can remember. All of the major distributions (Redhat, CentOS, Fedora, Suse, Ubunut) ship with NFS client and server support and have all of the user land daemons and tools needed to configure and debug NFS. I spent some time this past weekend bringing up a new NFS server in a SELinux-managed environment, and thought I would share my experience with my readers.

Setting up a Linux NFS server with SELinux can be done in just a few simple steps:

  1. Configure SELinux to allow remote hosts to access content that is exported through NFS.
  2. Add file systems that you want to export to the /etc/exports file.
  3. Enable the NFS services.

SELinux does not allow remote content to be accessed by default. This can easily be fixed by enabling one of the three SELinux booleans listed below:

nfs_export_all_ro -- allows file systems to be exported read-only
nfs_export_all_rw -- allows file systems to be exported read-write
use_nfs_home_dirs -- allows home directories to be exported over NFS

To set a boolean you can use the setsebool utility:

setsebool -P nfs_export_all_rw=on

Once SELinux has been instructed to allow NFS exports, you can add the file systems you want to export to /etc/exports. This file has the following format:

FILE_SYSTEM_TO_EXPORT CLIENT_LIST(EXPORT_OPTIONS)

To export the file system/exports/nfs to clients on the 192.168.1.0/24 network or in the prefetch.net domain, we can add an entry similar to the following to /etc/exports

/export/nfs 192.168.1.0/255.255.255.0(rw,sync) *.prefetch.net(rw,sync)

To start the NFS services on your server, you will need to enable the portmap and nfs services. This can be accomplished with chkconfig and service:

chkconfig portmap on
chkconfig nfs on
chkconfig nfslock on
service portmap start
Starting portmap: [ OK ]
service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
service nfslock start
Starting NFS statd: [ OK ]

The file systems listed in /etc/exports should now be exported, and you can verify this with the exportfs utility:

exportfs
/export/nfs 192.168.1.0/255.255.255.0
/export/nfs *.prefetch.net

To verify a mount is functioning, you can try mounting it from a client that falls inside the ACL:

mount server:/export/nfs /export/nfs

If this fails or you receive a permission denied error you can check the following things:

  1. Check setroubleshootd to see if SELinux is blocking access.
  2. Verify that the portmap and nfs services are running.
  3. Check nfsstat and exportfs to view the NFS statistics and exported file systems.
  4. If a firewall is configured, verify that iptables is allowing access.

If everything is working as expected, you should pat yourself on the back for a job well done!

Linux /etc/fstab文件的详解

目录 原创

1. /etc/fstab文件的作用

磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。

2. 挂载的限制

在说明这个文件的作用之前我想先强调一下挂载的限制:

1) 根目录是必须挂载的,而且一定要先于其他mount point被挂载。因为mount是所有目录的跟目录,其他木有都是由根目录 / 衍生出来的
2) 挂载点必须是已经存在的目录
3) 挂载点的指定可以任意,但必须遵守必要的系统目录架构原则
4) 所有挂载点在同一时间只能被挂载一次
5) 所有分区在同一时间只能挂在一次
6) 若进行卸载,必须将工作目录退出挂载点及其子目录之外

3. /etc/fstab文件中的参数

下面我们看看看/etc/fstab文件,这是我的linux环境中/etc/fstab文件中的内容

[root@orcy ~]# cat /etc/fstab

# This file is edited by fstab-sync - see 'man fstab-sync' for details

# Device                Mount point        filesystem   parameters  dump fsck
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
none                    /dev/pts                devpts  gid=5,mode=620  0 0
none                    /dev/shm                tmpfs   defaults        0 0
none                    /proc                   proc    defaults        0 0
none                    /sys                    sysfs   defaults        0 0
LABEL=SWAP-sda3         swap                    swap    defaults        0 0
/dev/sdb1               /u01                    ext3    defaults        1 2
UUID=18823fc1-2958-49a0-9f1e-e1316bd5c2c5       /u02    ext3    defaults        1 2
/dev/hdc                /media/cdrom1           auto    pamconsole,exec,noauto,managed 0 0
/dev/fd0                /media/floppy           auto    pamconsole,exec,noauto,managed 0 0

在文件中我已经把每一列都做出来表示方便识别,我们可以看到一共有六列

第一列<Device>

磁盘设备文件或者该设备的Label或者UUID

1) 查看分区的label和uuid

Label就是分区的标签,在最初安装系统是填写的挂载点就是标签的名字。可以通过查看一个分区的superblock中的信息找到UUID和Label name,我们可以通过下面这个命令来查看。

[root@orcy u02]# blkid /dev/sda1
/dev/sda1: LABEL="/boot" UUID="3b10fe13-def4-41b6-baae-9b4ef3b3616c" SEC_TYPE="ext3" TYPE="ext2"

2)使用设备名和label及uuid作为标识的不同

使用设备名称(/dev/sda)来挂载分区时是被固定死的,一旦磁盘的插槽顺序发生了变化,就会出现名称不对应的问题。因为这个名称是会改变的。不过使用label挂载就不用担心插槽顺序方面的问题。不过要随时注意你的Label name。
至于UUID,每个分区被格式化以后都会有一个UUID作为唯一的标识号。使用uuid挂载的话就不用担心会发生错乱的问题了。

第二列<Mount point>

设备的挂载点,就是你要挂载到哪个目录下

第三列<filesystem>

磁盘文件系统的格式,包括ext2、ext3、reiserfs、nfs、vfat等

第四列<parameters>

文件系统的参数

Async/sync设置是否为同步方式运行,默认为async
auto/noauto  当下载mount -a 的命令时,此文件系统是否被主动挂载。默认为auto
rw/ro         是否以以只读或者读写模式挂载
exec/noexec         限制此文件系统内是否能够进行”执行”的操作
user/nouser是否允许用户使用mount命令挂载
suid/nosuid是否允许SUID的存在
Usrquota启动文件系统支持磁盘配额模式
Grpquota启动文件系统对群组磁盘配额模式的支持
Defaults同事具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置

第五列<dump>

能否被dump备份命令作用。dump是一个用来作为备份的命令。通常这个参数的值为0或者1

0代表不要做dump备份
1代表要每天进行dump的操作
2代表不定日期的进行dump操作

第六列<fsck>

是否检验扇区。开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)

0不要检验
1最早检验(一般根目录会选择)
21级别检验完成之后进行检验

4. 提示与技巧

1)自动挂载

如果 /home 分区较大,可以让不依赖 /home 分区的服务先启动。把下面的参数添加到 /etc/fstab 文件中 /home 项目的参数部分即可:

noauto,x-systemd.automount

这样 /home 分区只有需要访问时才会被挂载。内核会缓存所有的文件操作,直到 /home 分区准备完成

注意: 这样做会使 /home 的文件系统类型被识别为 autofs,造成 mlocate 查询时忽略该目录。实际加速效果因配置而异,所以请自己权衡是否需要。

2)交换分区 UUID

如果交换分区没有 UUID,可以手动加入。如果使用 lsblk -f 命令没有列出交换分区的 UUID 就说明发生了这种情况。下面是为交换分区指定 UUID 的步骤:

# 确定交换分区
swapon -s
# 禁用交换分区
swapoff /dev/sda7
# 用新 UUID 重新创建交换分区
mkswap -U random /dev/sda7
# 激活交换分区
swapon /dev/sda7

3)路径名有空格

如果挂载的路径中有空格,可以使用 “\040” 转义字符来表示空格(以三位八进制数来进行表示)

UUID=47FA-4071     /home/username/Camera\040Pictures   vfat  defaults,noatime      0  2
/dev/sda7          /media/100\040GB\040(Storage)       ext4  defaults,noatime,user  0  0

4)外部设备

外部设备在插入时挂载,在未插入时忽略。这需要 nofail 选项,可以在启动时若设备不存在直接忽略它而不报错

/dev/sdg1    /media/backup    jfs    defaults,nofail    0  2

5)更多技巧参考

https://wiki.archlinux.org/index.php/Fstab

通过 WebDAV 连接 NextCloud

目录 原创

NextCloud 支持 WebDAV 协议,用户可以完全通过 WebDAV 来连接并同步文件。虽然官方还是推荐 使用客户端来同步文件,不过如果要临时访问 NextCloud 上的文件,使用 WebDAV 方式还是很便捷的。

1.打开Nextcloud网页登录后,单击设置,复制WebDAV下的URL地址

2.回到电脑桌面,右击计算机,选择映射网络驱动器添加一个网络位置, 复制第1步中的URL,单击下一步

3.输入用户名密码,单击确定即可,在资源管理器->计算机,可以看到映射的网络位置,双击打开即可看到Nextcloud中的文件

4.复制文件到映射的驱动器,网页打开Nextcloud,查看文件是否同步

5.至此通过 WebDAV 连接 NextCloud成功

注意事项:

win10映射WebDAV

1) 修改注册表使得WIN同时支持http和https:

定位到

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters

BasicAuthLevel 值改成2,即同时支持http和https,默认只支持https

2)设置文件大小限制

定位到如1)中位置,把FileSizeLimitInBytes值改成十进制50000000,然后重启服务

net stop webclient
net start webclient