文章目录
- ACL-设置权限
- 用ACL为用户授权
- 设置mask权限
- 设置默认权限(只能对目录执行)
- selinux
- selinux工作方式
- selinux的上下文
- selinux的几种模式
- selinux的布尔值(真或假)
- 网络用户介绍
- nfs客户端的使用
- 主服务器配置
- 客户端配置
ACL-设置权限
用ACL为用户授权
当我们需要对具体的某个用户/组,进行权限设置的时候,我们要考虑用ACL;
setfacl -m u:用户名:rw- file/dir
setfacl -m g:组名:rw- file/dir
查看权限:
getfacl file/dir
取消acl权限:
setfacl -x u:用户名 file/dir
setfacl -x g:组名 file/dir
设置mask权限
mask权限的作用是,临时让已经配置过acl的权限生效。
设置mask权限:setfacl -m m::r-- hosts(文件)
取消mask权限:setfacl -m u:任意一用户名即可:rw- hosts(文件)
针对权限,权限位—时,实际上文件还是可读的,因为other有r权限,规则是:只要mask没有设置—,则mask权限生效,如果mask设置了—,则other生效
设置默认权限(只能对目录执行)
设置默认权限以后,该文件后选择的所有文件权限都为该默认权限。(注:设置默认权限仅对新文件生效,之前存在的文件权限不会改变其属性。)
设置默认权限:setfacl -m d:u:用户名:rwx 文件
可以看到创建默认权限的时候给了x权限,但查看的时候并没有x权限,是因为创建文件的时候最多的权限是666,也就是rw,所以无论通过何种方式创建文件,都不可能有x权限的,只有后期手动的修改权限。
取消默认权限:setfacl -x d:u:用户名 文件
selinux
selinux工作方式
selinux是用于提高系统安全性的;
selinux会为所有的文件及进程分配一个标签,这个标签我们称之为标识,或者 上下文,只有特定的上下文的进程,才能访问特定的上下文资源。 如果上下文不匹配,即使权限是777,依然不能访问。
setenforce 1:开启selinux
setenforce 0:关闭selinux
systemctl stop firewalld
selinux使用方法:先开启selinux,然后安装APACHE阿帕奇(httpd)服务:yum -y install httpd,启动服务:systemctl start httpd, 启动以后打开浏览器网址栏输入该服务器ip,能正常访问内容即可:
现在http访问的是/var/www/html/index.html 里的文件,所以可以简单定义里面内容,然后就会正常显示啦,如,echo 11111111 > /var/www/html/index.html (也可以在/var/htm/中新建文件,然后输入网址的时候ip/新建文件名):
selinux的上下文
selinux会为所有的文件及进程分配一个标签,这个标签我们称之为标识,或者 上下文,只有特定的上下文的进程,才能访问特定的上下文资源。 如果上下文不匹配,即使权限是777,依然不能访问。
所以现在来说一下 上下文不匹配的情况是什么样:以上述的apache为例,在/var/www/html/**该目录下的任何文件都是可以通过浏览器正常访问的,这时候,我们在根目录下建一个www:mkdir /www ,然后 cd /var/www/html目录中,建一个/www的软连接:ln -s /www www :
在软连接www目录中新建index.html(默认访问该文件内容,所以该文件必须有) 并在里面写入任意内容:echo wwwwww > /www/index.html,这时候通过浏览器访问该软连接地址:
/var/www/html/www/index.html确实存在,为什么会Forbidden呢,这就是之前说的 上下文不一样,因为www实际是属于根目录下的www,并非/var/www/html/中的原生文件,所以解决这个问题就是,必须把上下文改成一致:
ps auZ |grep 服务名称:查看上下文信息
ls -ldZ 文件名:查看文件的上下文(::中间的便是上下文信息)
chcon -R -t 上下文 目录名称:修改上下文
修改成功以后,再次到浏览器访问该目录,即可正常访问了:
restorecon -R 目录名:撤销定义的上下文信息。
自定义文件默认的上下文信息:semanage fcontext -a -t 上下文 文件名,如:semanage fcontext -a -t httpd_sys_content_t '/www(/.)?’ ——(/.)?解释:()?代表括号里的内容可有可无,(/.*) /固定存在,.代表一个或多个,所以整体可以理解为递归/www(?前为不存在),(/.)?问号前内容存在:/www/adf,/www/adf/adf,/www/adf/adf/adf,…
删除自定义默认上下文:semanage fcontext -d -t 上下文 文件名
不知道上下文的情况下可以用–引用参考:chcon -R --reference=引用参考文件 文件名,如:chcon -R --reference=/var/www/html /www :
万能(通用)上下文,改为此以后就不存在上下文不匹配的情况了,chcon -R -t public_content_t 文件 :
selinux的几种模式
输入setenforce可以看到介绍selinux有1和0两种模式:
enforcing——强制模式,必须要满足selinux的条件,不满足的话,则阻止访问且警报。
permissive——允许模式,可以不满足selinux的条件,不满足也可以访问,但是有警报。
所以有时我们访问不了服务的时候,想想是不是selinux导致的,可以临时关闭selinux,就是切换到pemissive模式:setenforce 0(关闭selinux)→允许模式, setenforce 1(开启selinux) → 强制模式 , getenforce → 查看状态
修改selinux的默认选项:vi /etc/selinux/config 中修改SELINUX=项内容即可;
selinux的布尔值(真或假)
所谓的布尔值我们可以理解为一个开关功能;
getsebool -a :查看所有布尔值,其中on为启用,off为禁用
在没有selinux的情况下,我们要启用某服务的某功能,只要在这个服务的配置文件里配置即可,但有了selinux之后,你还得要让selinux同意开启这个功能才行;所以,需要记住一条规则,就是当我们搭建某个服务然后从客户端往这个服务里写东西写不进去的时候,请按照下面的三个步骤进行检查:
检查配置文件是否允许
检查文件系统的权限
检查selinux上下文或布尔值让以ftp为例: 先直接ftp上传任意一个文件,如果put或get后面不跟设备名,则代表当前设备名,就是使用ftp…这个设备名:
排查1:检查配置文件是否运行:vi /etc/vsftpd/vsftpd.conf,发些权限被关闭了,把#删掉,然后重启服务:systemctl restart vsftpd
现在重新上传文件,发现依然报错,只是报错与1中不一样:
排查2:检查文件系统的权限 ls /var/ftp -ld
然后ftp进入到新建的目录中重新上传文件:
排查3:检查selinux上下文或布尔值 → 先关闭selinux试试:setenforce 0 ,关闭后再次ftp中上传文件,可以正常上传:
然后把selinux开启:setenforce 1 ,然后查看布尔值:getsebool -a |grep ftp :
setsebool 服务 on / setsebool 服务 1:开启布尔服务(临时生效)
setsebool 服务 off / setsebool 服务 0:关闭布尔服务(临时生效)
setsebool - P 服务 on / setsebool 服务 1:开启布尔服务(永久生效,会自动写入进配置文件中)
setsebool -P 服务 off / setsebool 服务 0:关闭布尔服务(永久生效)
把ftp的布尔服务(2个服务连接一起的)开启:
因为配置文件中有说明:
然后在到ftp中上传文件 也是可以正常上传(为了简单起见,所以一般直接关闭selinux即可):
可以通过图形化配置selinux和布尔值:system-config-selinux &
安装:先通过yum查找包名:yum whatprovides */system-config-selinux
筛选出报名后 :yum -y install policycoreutils-gui-2.2.5-15.e18.x86_64
安装成功后运行:system-config-selinux &
说一个关于上下文的实例: 新增http端口号808:
因为http默认端口为80,所以可以筛选查看:netstat -nutlp | grep :80
vi /etc/httpd/conf/httpd.conf,然后在配置文件中 :Listen ,再该处添加一个808
重启服务:systemctl restart httpd ——会报错
查看80端口的上下文:semanage port -l | grep ‘\b80\b’
然后更改端口的上下文:semanage port -a -t http_port_t -p tcp 808 (把端口类型是tcp的端口号808的上下文改为http_port_t)然后重启,正常:
再到浏览器使用808端口访问文件,正常:
尝试修改ssh的默认端口为2000
网络用户介绍
查看网络用户的详细信息:getent passwd 用户名
网络用户有2种方式
1、使用LDAP客户端(使用服务器较少的场景,家目录需要手动创建)
2、配置freeIPA(域的概念,适合服务器较多的场景,可以自动给网络用户创建家目录)
nfs客户端的使用
主服务器配置
先关闭防火墙:systemctl stop firewalld
vim /etc/exports :如果里面有内容,全删除
systemctl restart nfs-server, systemctl enable nfs-server:启动nfs服务并设置为开机启动
vim /etc/exports :在里面编辑以下内容(/aa是挂载目录)
exportfs -arv:分享aa的内容
客户端配置
首先要知道服务器共享的目录是什么
showmount -e 主服务器ip (如果没有改命令:yum -y install showmount)
然后新建一个文件用于挂载该目录:mkdir /nfs
挂载:mount 主服务器ip:目录 /nfs 即可完成,注:挂载的该目录默认是没有写权限的
开机自动挂载,写进/etc/fstab中: