在使用了Mikrotik的RouterOS作为出口路由使用了相当一段时间之后,我彻底成为了ROS的粉丝,现在手里有一个x86的小机和一直RB750Gr3分别在家里和出租屋做出口路由。

虽然设备不多,管理员也就我一个,根本没有3A什么的出场的机会,只不过嘛,生命在于折腾,研究研究不是也很好嘛。

安装NAPS服务器并配置

首先,安装网络访问策略服务器(NAPS),这可以用来作为Radius服务器。通过服务器管理器添加角色与功能,一路下一步,在角色一页勾选上“网络策略与访问服务”,然后继续下一步直至安装完毕为止。我因为懒得卸掉重装,后面的就没继续截图了。

安装完NPS之后,就可以开始配置。当然,首先,是添加用户组,并将用户添加到组,顺便确认一下用户的拨入属性由NAPS控制。

然后,去网络策略服务器,添加radius客户端。允许ROS使用NPS作为radius服务器。IP地址写ROS使用的源地址,机密随意只要和ROS设备上一样即可。

下一步是新建网络策略,填写策略名称之后,服务类型选择未指定。

然后下一步里面,指定匹配那个Mikrotik管理员组;这时候可以限定NAS标识符或者限定被叫站ID(前者默认是ROS的system identity,后者默认是radius客户端的IP地址)。

选择匹配策略的授权访问。至于身份验证方法,暂时知道ROS使用的mschapv2,以后会不会改就不知道了。至于约束,默认下一步。

到了配置设置的一步,把默认的两个标准删掉,手动添加Service-Type,值为Login,虽然默认的似乎也能用。

然后就是精华所在:在“供应商特定”一项里面,手动添加一个属性,属性是Vendor-Specific,添加。添加一个属性,供应商为“14988”,符合RFC规格,然后配置属性。供应商分配的属性号为3,属性格式为字符串,属性值就是用户组的名字。系统默认最高权限的组的名字是full,我这里填的就是full。

然后禁用BAP(因为感觉没什么乱用,似乎不禁用也行),下一步,完成。Windows Server这边就OK了。

配置ROS

首先,选好ROS的系统名称,保证能够匹配到NAPS上的那个过滤策略。

然后,在ROS上配置Radius客户端。Service选择login就行,address填NAPS的地址,Secret就是刚才在NAPS添加Radius客户端的机密,同时,建议指定一下源地址,特别是ROS有多个接口IP地址的时候。

下一步,在system-users中启用AAA登录,Default Group选择最低权限的一个,那就行了。

最后验证一下,大功告成!

参考:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-fixing_problems-allowing_access_audit2allow

Redhat系的linux发行版,默认都打开了SELinux,总所周知,SELinux可以很好的提高系统安全性,但同时也会对系统的配置造成影响,所以,很多教程开始都会包含关闭SELinux的内容,避免出现异常。

Redhat对于配置SELinux也提供了一些很有用的帮助,比如说/var/log/audit/audit.log里面就包含了SELinux的审计日志,只要一搜denied就能看到SELinux拦截了的内容,配合audit2allow工具,就可以很方便的新增SELinux的放通策略。

下面是摘抄于参考文档中的内容:

第一步,先检查/var/log/audit/audit.log,里面包含了被SELinux拦截的内容,比如说这样内容

type=AVC msg=audit(1226270358.848:238): avc:  denied  { write } for  pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir

type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)

例子中一个叫做certwatch(comm="certwatch")的进程被拦截了,被禁止写操作({ write }),写的目标文件夹的带有的var_t标签(tcontext=system_u:object_r:var_t:s0)。如果仔细阅读另外一节之后发现,这个拦截不能用简单的sebool来解决,就需要使用audit2allow来根据audit的日志来生成允许策略。

第二步,用audit2allow -w -a生成一个方便人看懂的报告。audit2allow可以读取/var/audit/audit.log,需要root权限运行,-w参数代表方便阅读,-a参数表示读取所有的audit日志。结果会是类似这样的

~]# audit2allow -w -a
type=AVC msg=audit(1226270358.848:238): avc:  denied  { write } for  pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
 Was caused by:
 Missing type enforcement (TE) allow rule.

 You can use audit2allow to generate a loadable module to allow this access.

第三步,执行audit2allow -a检查需要放通的权限

~]# audit2allow -a


#============= certwatch_t ==============
allow certwatch_t var_t:dir write;

原文中提到一个重要的提醒,提到,出现这种情况都算软件没配好,是应该向Redhat提交故障报告的。

第四步,用 audit2allow -a -M 生成一个可以加载的模块

~]# audit2allow -a -M mycertwatch

******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i mycertwatch.pp

~]# ls
mycertwatch.pp  mycertwatch.te

生成模块后,用semodule加载上。原文中提到,生成的模块往往会超出实际所需的权限,建议先提交结果去  fedora-selinux-list 之类的让大家先看看有没有问题。

最后,如果出现多个denied的原因,建议用grep过滤出几个结果,分开几个模块来允许。

参考:http://www.cnblogs.com/mannyzhoug/p/3546160.html

最近重新部署了pxe,考虑到性能,扔掉路由,改用小主机当nfs服务器,但是,却遇到了非常诡异的权限问题,在这里记录一下。

在nsf共享了文件夹之后,遇上了input/output error,但是能够正确的显示磁盘空间,这让我非常纠结,明明文件夹已经提供了访问的权限,为什么还是会有这样的问题呢?

最后发现,是一个ntfs的权限出了问题……参考解决办法:

nfsfile /v /ru=-2 /rg=-2 /s /cx e:\test
操作 NFS 文件的服务属性。

NFSFILE [/v] [/s] [/i[[u=<uid>]|[g=<gid>]|[wu=<account>]|[wg=<account>]]] [/r[[u=<uid>]|[g=<gid>]|[m=<mode>]]] [/c[w|x]] <filespec>

/? - 此消息

/v - 详细

/s - 扫描子目录查找匹配的文件

/i - 包括与指定标准相匹配的文件

u <uid> - NFS 所有者 SID 匹配<uid>

g <gid> - NFS 组 SID 匹配<gid>

wu <account> - NFS 所有者 SID 匹配<account>

wg <account> - NFS 组 SID 匹配<account>

/r - 替换文件上指定的选项

u <uid> - 设置 uid

g <gid> - 设置 gid

m <mode> - 将模式位设置为<mode>

wu <account> - 设置 Windows 所有者帐户

wg <account> - 设置 Windows 组帐户

/c - 转换文件依据

w - Windows 样式 ACL (已映射)

x - Unix 样式 ACL (未映射)

然后就能够正常访问了。