RHCE学习<3>NFS、Samba、ACL权限、SELinux和RPM包管理

一、NFS网络文件共享服务

1、简单介绍

NFS包含3个版本:NFSv2、NFSv3、NFSv4

RHEL6是以NFSv4作为默认版本,NFSv4使用TCP协议,默认NFS占用5个端口,1个NFS端口(2049),四个动态端口,而老版本的NFS可以在TCP协议或者是UDP协议上运行。

/etc/exports:NFS服务的主配置文件,该文件的最主要目的是发布共享目录并为共享目录限制权限。

/var/lib/nfs/xtab:这个文件主要用来记录客户端与NFS服务器的连接记录。

格式:共享目录 客户端 参数


客户端


示例


使用IP地址指定单一主机


10.20.30.40


使用IP地址指定范围主机


172.16.0.0/16


使用IP地址指定范围主机


192.168.1.*


使用域名指定单一主机


Test.ice.apple


使用域名指定范围主机


*.ice.apple


使用通配符指定所有主机


*


参数


说明


ro


设置共享权限为只读


rw


设置共享权限为读写


root_squash


共享目录的使用者是root时,将被映射为匿名账号(nobody)


no_root_squash


当使用NFS服务器共享目录的使用者是root时,将不被映射为匿名账号


all_squash


将所有使用NFS服务器共享目录的使用者都映射为匿名账号


anonuid


设置匿名账号的UID


anongid


设置匿名账号的GID


sync


将数据同步写入内存和硬盘。这可能导致效率降低


async


先将数据保存在内存中,而不是直接保存在硬盘

2、安装nfs


1

2

3

4

5

6

yum install -y nfs-utils

service rpcbind start

service nfs start

chkconfig rpcbind on

chkconfig nfs on

一定要先启动rpcbind,默认端口111,然后再启动nfs,不然NFS quotas和NFS daemon都将启动失败.

3、共享目录设置


1

2

3

vi /etc/exports

/media 192.168.0.10(rw,no_root_squash)

/test 192.168.0.0/24(ro)

4、exportfs命令


1

2

3

4

5

exportfs -r #刷新共享配置

exportfs -v  #查看当前共享配置

exportfs -auv  #用于停止当前主机中NFS服务器的所有目录输出

exportfs -av  #用于输出NFS服务器的所有共享目录

showmount -e  #在NFS Server上执行此命令显示NFS Server上所有的共享卷

5、客户端使用


1

2

3

4

5

showmount -e IP #查看NFS服务器发布的共享目录

mount -t nfs IP:/media 本地挂载点

开机自动挂载设置:

vi /etc/fstab

NFS服务器的IP:共享目录 挂载点 nfs defaults 0 0

6、设置nfs固定端口

默认情况下安装完,nfs使用的都是动态端口,开启防火墙就麻烦了,nfs启动时,会读取/etc/sysconfig/nfs文件,所以我们要修改它,来强制使用固定端口。


1

2

3

4

5

vi /etc/sysconfig/nfs

mount_port="4001"

statd_port="4002"

lockd_tcpport="4003"

lockd_udpport="4004"

7、设置防火墙


1

2

iptables -P INPUT DROP

iptables -A INPUT -p tcp -m multiport --dport 2049,4001,4002,4003,4004 -j ACCEPT

二、Samba文件共享

1、Samba项目是SMB/CIFS协议在Linux/Unix系统中的实现,能够实现跨平台的文件和打印机资源共享,适用于复杂的操作系统环境。Samba服务默认端口:tcp协议的139、445;udp协议的137、138。

Samba服务器的主要程序

smbd:提供对服务器中文件、打印资源的共享访问

nmbd:提供基于NetBIOS主机名称的解析,一般不使用

2、安装smaba


1

2

3

yum install -y samba samba-client samba-common

service smb start

chkconfig smb on

3、主配置文件分为三个部分:[global]全局,[home]用户家目录共享,[printers]打印共享


1

2

3

4

5

6

7

8

9

10

11

vi /etc/samba/smb.conf

[global]

workgroup         #所在工作组名称

server string     #服务器描述信息

log file /var/log/samba/log.%m #“%m”变量表示客户机地址

max log size = 50 #日志文件的最大容量,单位为KB

security = user   #运行级别,一般使用share(匿名访问)和user(用户认证访问)

[homes]

............

[printers]

............

4、配置匿名访问


1

2

3

4

5

6

7

8

[global]

security = share #启用用户认证

[test]           #客户端所访问的共享名

comment = test!  #共享说明

path = /media    #共享目录

browseable = yes #该共享目录在“网上邻居”中是否可见

guest only = yes #所有匿名访问

writable = yes   #可写

5、配置用户认证访问


1

2

3

4

5

6

7

8

9

10

11

[global]

security = user  #启用用户认证

[share-name]     #在windows显示的共享名

comment=共享说明

path=/共享路径

guest only = no  #禁止匿名访问,等同pulic

browsable=yes    #该共享目录在“网上邻居”中是否可见

writable=yes     #可写

directory mask = 0744 #默认创建目录权限

create mask=0766 #默认创建文件权限

保存退出!


1

2

3

4

5

6

7

8

创建samba用户:

useradd user -s /sbin/nologin

smbpasswd -a user

-a:添加指定的Samba用户

-d:禁用指定的用户

-e:启用指定的用户

-x:删除指定的用户

不加参数可直接修改samba用户密码

6、linux客户端访问


1

2

3

smbclient –L //ip #查看公开的共享目录

smbclient -U user /ip/test #登陆共享

mount -o useranme=user,password=123.com //192.168.0.203/test /mnt/ #挂载到本地使用

7、设置防火墙


1

2

iptables -P INPUT DROP

iptables -A INPUT -p tcp -m multiport --dport 139,445 -j ACCEPT

三、ACL高级权限

UGO权限模型基于所属用户、组的,一个文件只能设置一个组,并对改组有权限控制,如果该文件需要有多个组有访问控制权限的话,UGO是无法满足需求的。使用ACL权限,必须先对这个文件系统添加ACL属性。

格式:setfacl -m u/g:用户/组:权限

1、mount -o remount,acl /dev/sdb1 /data #为/dev/sdb1添加ACL属性

2、mount | grep /dev/sdb1 #看到已经启用了acl

/dev/sdb1 on /data type ext4 (rw,acl)

3、/data目录现在对其他用户是没有写入权限的,现在我们给user1设置ACL

getfacl /data #查看/data目录的具体权限

可以看到文件的属主和属组都是root,user的权限是rwx,group的权限也r-x,other的权限是r-x。而且最重要的是user:user1:rwx,也就是user1这个用户对该目录也有rwx的权限。

现在su - user1,就有写入权限了。

4、对组使用ACL权限

setfacl-mg:user1:rwx/data #添加user1组对/data权限

usermod -g user1 user2 #将user2加入user1组

su - user2,现在就可以有写入权限了。

但是/data目录下的其他文件是没有写入权限的,ACL功能只对当前目录生效,不能对其子目录生效。

可以使用d参数对子目录设置ACL权限,但不对当前目录生效,只对所有子目录,以后不管任何用户对/data添加数据,user2都会继承它们的权限。

5、对当前目录所有子目录设置ACL,使user2对子目录有写入权限

setfacl -m d:u:user2:rwx /data/

现在user2可以对/data目录下子目录有写入权限了。

如果文件的属主和属组和文件的ACL权限发生冲突的时候,以属主和属组为准,其实文件的ACL功能只对other人有意义。

6、移除文件系统的ACL权限


1

2

3

setfacl -k /data #移除文件系统的默认ACL属性

setfacl -b /data #移除文件系统的所有ACL权限

setfacl -x u:user1 /data #移除user1对文件系统的ACL权限

7、一个项目需求:项目组需要名为/opt/research目录,用于存储他们的项目文档。只有组profs和grads中的成员能够在该目录中创建新文件,并且新文件应具有以下属性:

1.>目录应归root用户所有;

2>.新文件应归grads组所有;

3>.profs中的成员应自动拥有对新文件读写权限;

4>.组interns应自动拥有对新文件的只读权限;

5>.其他用户(不是组profs、grads、interns的成员)不能对该目录及其内容拥有任何权限。

前三行创建三个组,中间三行创建了/opt/research目录,并确保其归用户root、组grads所有,所拥有用户和组具有读、写、和执行权行权限,并且grads将拥有该目录中创建的文件的sgid权限。

最后四行则通过使用acl为组profs和interns授予对目录的适当权限,通过默认acl为组profs和interns授予对该目录中新创建文件的适当权限。

用getfacl显示最后权限:

四、SELinux安全机制

SELinux 全称 Security Enhanced Linux (安全强化 Linux)是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。

Selinux是一组可确定哪个进程能访问哪些文件、目录、端口等的安全规则。每个文件、进程、目录和端口都具有专门的安全标签,称为selinux上下文。

Selinux将进程分类,将资源分类,定义了那个进程在哪个范围内运行,只能访问哪些资源。此时不管它对其它的资源有读写权限此时只要selinux不允许 它就不能访问。

SElinux针对两种类型定义了两个基本概念:

域(domain):域用来对进程进行限制。

上下文(context):上下文用来对系统资源进行限制。

1、SELinux状态查看与配置

配置文件位置:/etc/selinux/config,做到了一个链接到/etc/sysconfig/selinux

设置完模式后,要重启系统才能生效

2、三种模式

强制(enforcing):受selinux保护,违反策略,就禁止操作。默认是这个模式

允许(permissive):不受selinux保护,只是收到警告信息,把违反内容记录下来。

禁用(disabled):禁用selinux

3、SELINUXTYPE=targeted参数

定义selinux使用哪个策略模块保护系统。

targeted:红帽开发的策略,只对dhcpd,httpd,mysqld,named等网络服务保护,不属于那些domain的就都让他们在unconfined_t里,可导入性高,可用性好但是不能对整体进行保护。这样的策略还有Strict、mls:strict是NAS开发的,能对整个系统进行保护,但是设定复杂。mls:是一个较新的安全策略。

4、SELinux相关命令


1

2

3

sestatus:查看selinux工作状态

getenforce:查看selinux是否开启

setenforce:设置selinux运行模式,1开启(Enforcing),0关闭(Permissive)

5、查看和设置selinux的boolean值

selinux策略中定义许多boolean值,用户自定义要让selinux开启保护某些程序,或者是关闭对某些程序、程序中的某个项目的保护,目录位置/selinux/boolean/下相关文件。


1

2

3

4

getsebool -a :查看boolean值

getsebool -a | grep ftp #查看ftp相关bool值

setsebool ftpd_disable_trans off #临时生效

setsebool -P ftpd_disable_trans off #设置boolean值,-P为设置永久生效

6、使用apache做个个人主页,默认是是用apache来访问运行访问apache的,而boolean值默认httpd禁止切换到其他家目录。所以就会显示没有权限访问。


1

2

3

4

5

6

7

vi /etc/httpd/conf/httpd.conf

<IfModule mod_userdir.c>

 UserDir public_html #启用网络读取的用户家目录网站

</IfModule>

useradd user

echo test!!!” >> /home/user/public_html #创建家目录测试页

chmod o+x /home/user/ #设置其他用户对user主目录有执行权限

http://192.168.0.202/~user #访问测试页报错

解决方法:setsebool httpd_enable_homedirs on #开启httpd对家目录访问,这时就可以访问了

7、安全上下文相关命令


1

2

3

4

5

6

查看文件安全上下文

ls -Z /etc/hosts

-rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts

查看用户安全上下文

id -Z

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

查看进程安全上下文vsftpd和httpd

查看移动和复制文件安全上下文变化

chcon(change context)参数:

-t:类型

-R:递归

-u:用户

-r:角色

9、实验:让 Apache 可以访问位于非默认目录下的网站文件

新创建的index.html是可以访问的,因为继承了目录的安全上下文,属性中包含了httpd_sys_content_t标签


1

2

3

4

5

6

7

8

Alias /test "/opt/web"

<Directory "/opt/web">

 options none

 allowoverride none

 order allow,deny

 allow from all

</Directory>

service httpd restart

添加了一个虚拟目录,再访问http://192.168.0.202/test出现没有权限访问

解决:chcon -t httpd_sys_content_t /opt/web/index.html #再访问虚拟目录成功

10、其他


1

2

3

restorecon -R -v /var/www   #恢复文件默认的上下文

chcon --reference=/etc/named.confg.orig /etc/named.conf #修改参照文件的上下文

/var/log/audit/audit.log #SElinux报错信息

五、RHEL6安装软件和YUM管理软件

rpm包命名格式:

1、RPM命令

查询已安装的RPM软件信息

格式:rpm -q[子选项] [软件名]

-qa:查看系统中已安装的所有RPM软件包列表

-qi:查看指定软件的详细信息

-ql:查询指定软件包所安装的目录、文件列表

-qc:仅显示指定软件包安装的配置文件

-qd:仅显示指定软件包安装的文档文件

-qf:查询文件/目录属于哪个RPM软件

查询未安装的RPM包文件

格式:rpm -qp[子选项] RPM包文件

-qpi:通过.rpm包文件查看该软件的详细信息

-qpl:查看.rpm安装包内所包含的目录、文件列表

-qpc:查看.rpm安装包内包含的配置文件列表

-qpd:查看.rpm安装包内包含的文档文件列表

安装或升级RPM软件包

格式:rpm [选项] RPM包文件...

-i:安装一个新的rpm软件

-e:卸载指定的rpm软件

-U:升级某个rpm软件,若原本未装,则进行安装

-F:更新某个rpm软件,若原本未装,则放弃安装

--force:强制安装所指定的rpm软件包

--nodeps:安装、升级或卸载软件时,忽略依赖关系

-h:以“#”号显示安装的进度

-v:显示安装过程中的详细信息

2、YUM源使用

当我们安装一个软件的时候,需要下载好多依赖的包,这时就很麻烦,使用yum源就可以自己去查找依赖包来安装,提高工作效率。yum源可以是本地的,也可以是ftp或http协议来发布的。

在RHEL6系统的安装光盘中,已针对软件目录Packages/建好了repodata数据,因此只要简单地将整个光盘中的内容或将光盘全部内容复制到硬盘通过HTTP或FTP进行发布,就可以作为软件仓库了。

3、YUM命令格式:yum <options> <command> <package...>

options:

-y : 就这个比较常用,这个参数是在安装软件使用,有需要输入yes的自动回答

command:

list : 列出在yum server 上面有的RPM套件;若执行yum list installed则表示只列出系统中已安装的软件包,yum list available则表示只列出软件仓库中可用(尚未安装)的软件包,yum list update则表示列出可以升级版本的软件包。

install: 安装某个套件

update : 升级某个套件,如果update后面没有接套件名称,即更新目前主机所有已安装的套件.

info : 列出某个套件的详细信息,相当于rpm -qi package内容

clean : 将已下载到本机的packages或headers移除

remove : 移除已经安装在系统中的某个套件

yum localinstall package:本地安装软件包

yum update:全部更新

yum update package :更新指定程序包package

yum check-update :检查可更新的程序

yum info <package> :显示安装包信息

yum search packages:查找软件包

yum removepackage:删除程序包

yum clean packages:清除下载的rpm包

yum clean all:清除header与rpm包

yum grouplist:列出所有组

yum groupinstall:安装某个软件组

4、创建FTP源


1

2

3

4

5

6

7

vi /etc/yum.repos.d/server.repo #后缀必须是repo结尾

[rhel6]  #软件仓库的名字

name=rhel6 #软件仓库的描述

baseurl=ftp://192.168.0.202/pub/ #软件仓库的位置

enabled=1 #是否起用软件仓库

gpgcheck=1 #是否检查GPG签名(用来验证要安装的包是不是REDHAT官方的)

gpgkey=file://etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release  #GPG签名密钥的位置

如果安装软件包出现:public key for …….rpm is not install

解决方法:导入完整性验证的公钥

mount /dev/sr0 /mnt

rpm --import /mnt/RPM-GPG-KEY-redhat-release

5、创建自己搜集软件包源

必须包括存在依赖关系的所有安装文件,还需要手动创建repodata数据文件,使用createrepo工具,

createrepoa主要用于收集目录中的rpm包文件的头信息,以创建repodata软件仓库数据。


1

2

3

4

5

6

7

8

yum install createrepo

cp -a /mnt/Packages//var/ftp/pub/Packages/ #我们以rhel软件包为例,复制到ftp目录下

cd /var/ftp/pub/

createrepo --database ./ #创建软件仓库信息文件

ls repodata #可以看到已经创建好了相应的软件仓库信息文件

filelists.sqlite.bz2 other.sqlite.bz2 primary.sqlite.bz2 repomd.xml

filelists.xml.gz other.xml.gz primary.xml.gz

yum list #查看yum源软件包

时间: 2025-01-15 15:53:51

RHCE学习<3>NFS、Samba、ACL权限、SELinux和RPM包管理的相关文章

RHCE 学习笔记(20) ACL

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://beanxyz.blog.51cto.com/5570417/1602328 这一节进一步学习了文件目录的权限管理 ACL.之前学习的权限管理比较粗犷,比方说,如果1个文件的用户超过4个,然后每个人都有不同的需求,那就很难处理.这种情况下,可以使用ACL对单独的用户或组进行设置权限. 比如先切换到root用户,创建一个aa文件 看看aa默认权限 切换回beanxyz 用户,试图修

RHCE 学习笔记(5)- 本地用户和组的管理

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://beanxyz.blog.51cto.com/5570417/1593632 这一节跟老师学习了RHEL7的用户管理 在windows里面,用户信息和密码是保存C:\windows\system32\config\sam 中,类似的,RHEL是将信息保存在 /etc/passwd 和 /etc/shadow 里面 管理用户可以通过图形界面或者命令行,首先我们看看图形工具 安装 d

RHCE 学习笔记(6)权限管理

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://beanxyz.blog.51cto.com/5570417/1593816 RHEL里面执行ls命令时,可以看见第一个字母来判断类型. 常见的类型有  d (目录) - (普通文件) c (设备文件 字符型) b (设备文件,块文件) l ( 软连接,快捷方式) 例如,目录和普通文件 设备文件 软连接 设备文件,块文件(硬盘) 首先看看如何更改文件的所有者 chown, -R表

RHCE学习&lt;9&gt;Rsync备份同步、NTP和Rsyslog日志管理

一.Rsync备份与同步 Rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具.Rsync通过"rsync算法"提供了一个客户机和远程文件服务器的文件同步的快速方法.每次只传送两个文件的不同部分(即支持增量备份),而不是每次都整份传送. 在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源. 1.rsync工具的特点 能更新整个目录树和文件系统:有选择性的保持符号链链.硬链接.文件

RHCE 学习笔记(35) - SMB 服务器

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://beanxyz.blog.51cto.com/5570417/1609882 前面已经简单的学习了如何通过SMB客户端来访问Windows的共享,这一节看看在RHEL7里面如何设置SMB服务器.如果需要和AD 完美的整合 红帽官网有一个超详细的配置选项和过程https://access.redhat.com/documentation/en-US/Red_Hat_Enterpri

CentOS下ACL权限控制详解

  ACL权限控制 设置ACL权限:setfacl 查看ACL权限:getfacl ACL权限控制主要目的是提供传统的owner,group,other的read,wirte,execute权限之外的具体权限设置,可以针对单一用户或组来设置特定的权限 比如:某一目录权限为 drwx------ 2 root root 4096 03-10 13:51./acldir 用户user对此目录无任何权限因此无法进入此目录,ACL可单独为用户user设置这个目录的权限,使其可以操作这个目录 ACL启动

linux acl 权限指南

//linux 文件权限 分为 启用 acl 权限 和 不启用 acl 权限 //不启用 acl 权限的话 ls -l 可以看到如下,主:rw,组:rw,其他:r -rw-rw-r–- 1 www www 0 Jul 3 23:46 test // 再看一下启用 acl 权限的样子  ls -l,是不是多了一个 + 和 s // + 表示 它是由 acl 权限控制的 // ll -s 显示 出的 rwxrwx  权限 已经不再准确 // 如果要查看准确的权限需要用到 getfacl drwxrw

RHCE 学习笔记(31) - 防火墙 (下)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://beanxyz.blog.51cto.com/5570417/1607370 这个是防火墙的最后一部分,继续学习端口转发,伪装和SELinux端口上下文 首先看看端口转发 直接访问当前的http服务器,默认是80端口 我可以设置本地转发,从8080访问,自动转到80端口 测试成功 也可以转发到其他服务器的端口,比如ssh的转发 他会自动伪装 测试,我连接的是172.0.10.22

RHCE 学习笔记(13) RPM 和 YUM

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://beanxyz.blog.51cto.com/5570417/1599105 这一节和老师学习了软件包的使用 首先看看如何rpm的使用,这个命令可以用来查询,安装,卸载,更新软件包 简单的说,后面跟q是查询,i是安装,u是更新,e是卸载,V是验证,我们挨个来看看 首先是查询, -qa表示查询所有已经安装的包,如下所示 值得一提的是RPM本质是一个别人预先编译好的包,不同文件的路径