shell命令概述
Shell作用:命令解释器
介于操作系统内核与用户之间,负责解释命令行
获得命令帮助
内部命令help
命令的“--help” 选项
使用man命令阅读手册页
命令行编辑的几个辅助操作
Tab键:自动补齐
反斜杠“\”:强制换行
快捷键 Ctrl+U:清空至行首
快捷键 Ctrl+K:清空至行尾
快捷键 Ctrl+L:清屏
Linux命令行的格式
Linux命令的通用命令格式:命令字 [选项] [参数] 选项及参数的含义 选项:用于调节命令的具体功能 以 “-”引导短格式选项(单个字符),例如“-l” 以“--”引导长格式选项(多个字符),例如“--color” 多个短格式选项可以写在一起,只用一个“-”引导,例如“-al” 参数:命令操作的对象,如文件、目录名等
[root@localhost ~]# ls -l /home
总计 8
drwx------ 2 benet benet 4096 09-08 08:50 benet
文件和目录管理
目录操作命令:pwd、cd、ls、mkdir
pwd命令
用途:查看工作目录(Print Working Directory)
cd命令
用途:切换工作目录(Change Directory)
格式:cd [目录位置]
ls命令
用途:列表(List)显示目录内容
格式:ls [选项]... [目录或文件名]
常用命令选项
-l :以长格式显示
-a:显示所有子目录和文件的信息,包括隐藏文件
-ld:显示目录本身的具体信息
--color:以颜色区分不同类型文件
mkdir命令
用途:创建新的目录(Make Directory)
格式:mkdir [-p] [/路径/]目录名
文件操作命令:touch、cp、rm、mv、find
touch命令
用途:新建空文件,或更新文件时间标记
格式:touch 文件名…
cp命令
用途:复制(Copy)文件或目录
格式:cp [选项]... 源文件或目录… 目标文件或目录
rm命令
用途:删除(Remove)文件或目录
格式:rm [选项]... 文件或目录
rmdir命令
用途:删除(directory)目录
mv命令
用途:移动(Move)文件或目录
—— 若如果目标位置与源位置相同,则相当于改名
格式:mv [选项]... 源文件或目录… 目标文件或目录
find命令
用途:用于查找文件或目录
格式:find [查找范围] [查找条件]
常用查找条件
-name:按文件名称查找
-user:按文件属主查找
-type:按文件类型查找
根据文件的类型进行查找,这里的类型指的是普通文件(f)、目录(d)
文件内容操作命令:cat、less、grep
cat命令
用途:显示出文件的全部内容
格式:cat 目标文件
less命令
用途:全屏方式分页显示文件内容
交互操作方法:
按Enter键向下逐行滚动
按空格键向下翻一屏、按b键向上翻一屏
按q键退出
grep命令
用途:在文件中查找并显示包含指定字符串的行
格式:grep [选项]... 查找条件 目标文件
常用命令选项
-i:查找时忽略大小写
-v:反转查找,输出与查找条件不相符的行
查找条件设置
要查找的字符串以双引号括起来
“^……”表示以……开头,“……$”表示以……结尾
“^$”表示空行
归档及压缩命令:tar
tar命令
用途:制作归档文件、释放归档文件
格式:tar [选项]... 归档文件名 源文件或目录
tar [选项]... 归档文件名 [-C 目标目录]
常用命令
打包:
tar -czvf [存放路径]归档文件名.tar.gz 源文件或目录
或 tar -cjvf [存放路径]归档文件名.tar.bz2 源文件或目录
解包:
tar -xzvf [存放路径]归档文件名.tar.gz [-C 解压目录]
或 tar -xjvf [存放路径]归档文件名.tar.bz2 [-C 解压目录]
Bash的命令历史
命令历史
保存用户曾经执行过的命令操作
查看历史命令
使用↑、↓按键逐条翻看,允许编辑并重复执行
执行:history
清除历史命令:执行:history -c
调用历史命令:!n:执行历史记录中的第n条命令
Bash的命令别名
命令别名
为使用频率较高的复杂命令行设置简短的调用名称
查看命令别名
格式:alias [别名]
设置命令别名
执行:alias 别名='实际执行的命令'
取消已设置的命令别名
格式:unalias 别名
unalias -a
重定向
将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上
输出重定向实例
将命令输出重定向到文件
将标准输出重定向到文件
$ ls /etc/ > etcdir
将标准输出重定向追加到文件
$ ls /etc/sysconfig/ >> etcdir
将错误输出重定向到文件
$ nocmd 2> errfile
将标准输出和错误输出重定向到文件
$ ls afile bfile &> errfile
vim文本编辑器
文本编辑器的作用: 维护Linux系统中的各种配置文件 编写shell脚本
vim编辑器的工作模式
三种工作模式:命令模式、输入模式、末行模式
1)命令模式:启动vi编辑器后默认进入命令模式,该模式中主要完成如光标移动、字符串查找,以及删除、复制、粘贴文件内容等相关操作
2)输入模式:该模式中主要的操作就是录入文件内容,可以对文本文件正文进行修改、或者添加新的内容。处于输入模式时,vi编辑器的最后一行会出现“-- INSERT --”的状态提示信息
3)末行模式:该模式中可以设置vi编辑环境、保存文件、退出编辑器,以及对文件内容进行查找、替换等操作。处于末行模式时,vi编辑器的最后一行会出现冒号“:”提示符
命令模式中的基本操作
光标移动
光标方向移动
行内快读跳转
ctrl+F:向下翻动一页
ctrl+B:想上翻动一页
行间快速跳转
1G或gg:跳转到文件的首页
G:跳转到文件的末尾行
行号显示:
set nu:在编辑器中显示行号
:set nonu:取消编辑器中的行号显示
复制粘贴删除
文件内容查找
撤销编辑及保存退出
u | 按一次取消最近的一次操作 多次重复,恢复已进行的多步操作 |
U | 用于取消对当前行所做的所有编辑 |
ZZ | 保存当前的文件内容并退出vi编辑器 |
末行模式中的基本操作
保存文件及退出vi编辑器
功能 | 命令 |
保存文件 | :w |
:w /root/newfile | |
退出vi | :q |
:q! | |
保存文件退出vi | :wq |
打开新文件或读入其他文件内容
命令 | 功能 |
:e ~/install.log | 打开新的文件进行编辑 |
:r /etc/filesystems | 在当前文件中读入其他文件内容 |
文件内容替换
命令 | 功能 |
:s /old/new | 将当前行中查找到的第一个字符"old"串替换为"new" |
:s /old/new/g | 将当前行中查找到的所有字符串"old"替换为"new" |
:## s/old/new/g | 在行号"##"范围内替换所有的字符串"old"为"new" |
:% s/old/new/g | 在整个文件范围内替换所有的字符串:"old"为"new" |
:s /old/new/c | 在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认 |
用户和组账号概述
Linux基于用户身份对资源访问进行控制 用户帐号: 超级用户root、普通用户、 程序用户
超级用户,即root用户,类似于Windows系统中的Administrator用户,非执行管理任务时不建议使用root用户登录系统
普通用户帐号一般只在用户自己的宿主目录中有完全权限
程序用户:用于维持系统或某个程序的正常运行,一般不允许登录到系统。例如:bin、daemon、ftp、mail等
组帐号: 基本组(私有组) 一个用户一个 只是标识 附加组(公共组)一个用户可以有一个或多个附加组 可以设置权限 UID和GID: UID(User Identity,用户标识号) 0—root;1-200:“系统用户”,静态分配给红帽的系统程序;
201-999:当装软件时,才会动态分配;1000-60000:普通用户分配的范围
GID(Group Identify,组标识号)
用户账号文件——password
用于保存用户的帐号基本信息
文件位置:/etc/passwd
每一行对应一个用户的帐号记录
[root@localhost ~]# tail -2 /etc/passwd
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
student:x:500:500:Student User:/home/student:/bin/bash
字段1:用户帐号的名称
字段2:用户密码字串或者密码占位符“x”
字段3:用户帐号的UID号
字段4:所属基本组帐号的GID号
字段5:用户全名
字段6:宿主目录
字段7:登录Shell信息
用户账号文件——shadow
用于保存密码字串、密码有效期等信息
文件位置:/etc/shadow
每一行对应一个用户的密码记录
[root@localhost ~]# tail -2 /etc/shadow
sabayon:!!:15495:0:99999:7:::
student:$1$po/zD0XK$4HSh/Aeae/eJ6dNj1k7Oz1:15495:0:99999:7:::
字段1:用户帐号的名称
字段2:加密的密码字串信息
字段3:上次修改密码的时间(距离1970.1.1)
字段4:密码的最短有效天数,默认值为0
字段5:密码的最长有效天数,默认值为99999
字段6:提前多少天警告用户口令将过期,默认值为7
字段7:在密码过期之后多少天禁用此用户
字段8:帐号失效时间,默认值为空
字段9:保留字段(未使用)
组账号文件—group、gshadow
与用户账号文件类似
/etc/group:保存组帐号基本信息 /etc/gshadow:保存组帐号的密码信息
[root@localhost ~]# grep "adm" /etc/group
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
添加用户账号
useradd命令 格式:useradd [选项]... 用户名 常用命令选项 -u:指定 UID 标记号 -g:指定用户的基本组名(或UID号) -G:指定用户的附加组名(或GID号) -s:指定用户的登录Shell
不添加任何选项,只使用用户名作为useradd命令的参数,按系统默认配置建立指定的用户帐号
演示添加用户的操作:
—创建名为st02的用户帐号,并将其UID号指定为504
[root@localhost ~]# useradd -u 504 st02
[root@localhost ~]# tail -1 /etc/passwd
st02:x:504:504::/home/st02:/bin/bash
——创建一个考试测试用的帐号exam01,指定属于users组 ,该帐号于2009-07-30失效
[root@localhost ~]# useradd -g users -e 2009-07-30 exam01
展示/etc/passwd、/etc/shadow文件中的变化
说明:使用adduser命令也可以添加用户帐号,在RHEL5系统中adduser命令实际上是useradd命令的符号链接
useradd -s /sbin/nologin strlt
设置/更改用户口令
passwd命令 格式:passwd [选项]... 用户名 常用命令选项 -d:清空用户的密码,使之无需密码即可登录 -l:锁定用户帐号 -S:查看用户帐号的状态(是否被锁定) -u:解锁用户帐号
修改用户账号的属性
usermod命令 格式:usermod [选项]... 用户名 常用命令选项 -L:锁定用户账户 -U:解锁用户账户 以下选项与useradd命令中的含义相同 -u、-g、-G、-s
删除用户账号
userdel命令 格式:userdel [-r] 用户名 添加 -r 选项时,表示连用户的宿主目录一并删除
[root@localhost ~]# useradd stu01
[root@localhost ~]# ls -ld /home/stu01/
drwx------ 2 stu01 stu01 4096 09-09 12:38 /home/stu01/
[root@localhost ~]# userdel -r stu01
[root@localhost ~]# ls -ld /home/stu01/
ls: /home/stu01/: 没有那个文件或目录
改变用户密码期限
chage命令 格式:chage [选项]... 用户帐号名 常用命令选项 -M:密码的最长有效天数 -m:密码的最短有效天数 -W:密码的警告天数 -I:密码的有效天数 -E:账号的过期时间
查看密码的有效天数:chage -l root
chage -M 60 root 密码的最长有效天数
chage -m 60 root 密码的最短有效天数
组管理命令
groupadd命令 格式:groupadd [-g GID] 组帐号名 组成员管理: 格式:gpasswd [选项]... 组帐号名 删除组帐号: 格式:groupdel 组帐号名
用户和组账号查询
id命令 用途:查询用户身份标识 格式:id [用户名] groups命令 用途:查询用户所属的组 格式:groups [用户名] users、w 、who命令 用途:查询已登录到主机的用户信息
主要有哪两个用户帐号文件,各有什么作用?
如何锁定、解锁用户帐号?
在添加用户帐号时,如何设置其失效时间?
如何设置一个组的多个用户成员?
部分答案提示:
【1】/etc/passwd、/etc/shadow
【2】锁定帐号:usermod -L 用户名、passwd -l 用户名 ; 解锁帐号: usermod -U 用户名、passwd -u 用户名
【3】useradd -e YYYY-mm-dd 用户名 或者 usermod -e YYYY-mm-dd 用户名
【4】~/.bash_profile、~/.bashrc、~/.bash_logout
【5】gpasswd -M 用户1,用户2,用户3 组名
实验案例
需求描述
现雇用一组顾问从事某一项目。为每位顾问创建用户帐户,并将这些帐户掭加到作为补充组,名为consultants、组id为40000的组中。
这些帐户应在91天后终止时过期。
以下是顾问姓名及其相应用户名的列表,帐户的初始密码均应为default):
sspade, bboop, dtracy
先建manager组,创建两个用户natasha,harry附属组为manager,创建第三个用户strlt不允许login 。
建一个用户susa,指定UID号为4000
帐户的初始密码均应为default
文件/目录的权限和归属
访问权限 读取:允许查看文件内容、显示目录列表 写入:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录 可执行:允许运行程序、切换目录 归属(所有权) 属主:拥有该文件或目录的用户帐号 属组:拥有该文件或目录的组帐号
查看文件/目录的权限和归属
“-rw-r—r--”部分的第一个字符表示文件类型,可以是d(目录)、b(块设备文件)、c(字符设备文件),减号“-”(普通文件)、字母“l”(链接文件)等
其余部分指定了文件的访问权限
在表示属主、属组内用户或其他用户对该文件的访问权限时,主要使用了四种不同的权限字符: r 可读 ;w 可写 ;x 可执行 ;- 无权限
r、w、x、- 权限字符还可分别表示为8进制数字4、2、1、0
设置文件/目录的权限
chmod命令
格式1:chomd [ugoa] [+-=] [rwx] 文件或目录
格式2:chmod nnn 文件或目录
常用命令选项
-R:递归修改指定目录下所有文件/子目录的权限
详细讲解两种设置文件访问权限的格式,并以实例进行演示,例如:
—— 重新设置mymkdir文件的权限,为属主用户添加执行权限,去除其他用户的读取权限
[root@localhost ~]# chmod u+x,o-r mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr----- 1 root root 29588 05-12 06:19 mymkdir
—— 重新设置mymkdir文件的访问权限,恢复为“rwxr-xr-x”
[root@localhost ~]# chmod 755 mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr-xr-x 1 root root 29588 05-12 06:19 mymkdir
—— 使用递归的方式将“/usr/src/”目录中所有子目录、文件的权限都设置为“rw-r--r--”
[root@localhost ~]# chmod -R 644 /usr/src/
“nnn”为需要设置的具体权限值,如“755”、“644”等
文件权限设置实例
使用chmod命令设置文件权限 查看文件权限 ls -l 增加文件属主st01的执行权限(x) chmod u+x 文件名 去除文件属组class1的写权限(w) chmod g-w 文件名 设置属主权限为读写,属组其他用户的文件权限为读 chmod u=rw,g=r,o=r 文件名
设置文件/目录的归属
chown命令 格式:chown 属主 文件或目录 chown :属组 文件或目录 chown 属主:属组 文件或目录 常用命令选项 -R:递归修改指定目录下所有文件、子目录的归属
设置文件属主和属组
chown命令用于设置文件的属主和属组
命令格式
chown OWNER[:[GROUP]] FILE...
设置文件afile的属主为用户st01
# chown st01 afile
设置文件afile的属组为用户组class1
# chown :class1 afile
设置文件afile的属主为st03,并设置文件的属组为class2
# chown st03:class2 afile
实验:文件/目录权限设置
根据以下要求完成对文件/目录权限的设置
1、添加组group,添加用户aa、bb并加入group组
2、新建文件/abc.txt
3、设置用户aa对文件拥有读、写和执行权限
4、设置组group内成员对文件拥有读和写权限
5、设置除属主和属组外其他人对文件没有任何权限
6、新建目录/abc
7、设置用户bb对目录拥有读、写执行权限
8、设置组group内成员对目录拥有读和执行权限
9、设置除属主和属组外其他人对目录没有任何权限
文件ACL权限
ACL是 Access Control List 的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的细部权限设定。
ACL可以针对单一使用者,单一文件或目录来进行r,w,x的权限规范,对于需要特殊权限的使用状况非常有帮助。
ACL 主要可以针对以下方面来控制权限: 使用者 (user):可以针对使用者来设定权限; 组群 (group):针对用户组为对象来设定其权限; 预设属性 (mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的预设权限
管理文件系统访问控制列表
查看: $ getfacl filename 修改 : $ setfacl -m u:username:rw filename 命令 选项 u:用户名:权限 目录名称 $ setfacl -m g:groupname:rw filename 命令 选项 u:组账号:权限 目录名称 删除 : $ setfacl -x u:username filename 命令 选项 u:用户名 目录名称
tune2fs是linux下面重要的文件系统调整工具,其中的几个选项解释如下:
-c:表示文件系统在mount次数达到设定后,需要运行fsck检查文件系统。
-i:文件系统的检查间隔时间。系统在达到时间间隔时,自动检查文件系统。
-l:显示文件系统的很多参数。
-j:转换为ext3文件系统。
-m: Set the percentage of reserved filesystem blocks。 设置保留的空间百分比
-o: Set or clear the indicated default mount options in the filesystem.设置默认加载参数
通常如果使用ext3文件系统的话,使用-c 0关掉mount次数达到后的文件系统检查
tune2fs -m 10 /dev/sda1
tune2fs -o acl,user_xattr /dev/sda1
tune2fs -i 0 -c0 /dev/sda1
显示当前的磁盘状态(dumpe2fs)
[root@tonykorn97 /]# dumpe2fs /dev/sda1
使用附加权限
SET位权限 主要用途: 为可执行(有 x 权限的)文件设置,权限字符为“s” 其他用户执行该文件时,将拥有属主或属组用户的权限 SET位权限类型: SUID:表示对属主用户增加SET位权限 SGID:表示对属组内的用户增加SET位权限 如果SGID是设定在目录上面,则在该目录内所建立的文件或目录的所属组,将会自动成为此目录的所属组。
粘滞位权限(Sticky)
主要用途: 为公共目录(例如,权限为777的)设置,权限字符为“t” 用户不能删除该目录中其他用户的文件 应用示例:/tmp、/var/tmp
由于系统及服务程序运行的需要, Linux提供了/tmp、/var/tmp等临时目录,允许任意用户、程序写入数据
然而试想一下,若任意一个普通用户都能够删除系统服务运行中使用的临时文件,将造成什么后果?
设置粘滞位以后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据
实验
SUID
第一步切换普通用户qq
第二步vim /etc/shadow
第三步查看vim的位置 which vim
第四步:chmod u+s /usr/bin/vim
第五步:ls -l /usr/bin/vim
第六步:su - qq
第七步:vim /etc/shadow
SGID
groupadd aa
useradd -G aa bb
mkdir /cc
chown :aa /cc
chmod 777 /cc
su - bb
cd /cc
touch a.txt
su - root
chmod g+s /cc
su - bb
cd /cc
touch aa.txt
ls -l
设置SET位、粘滞位权限 使用权限字符 chmod ug±s 可执行文件... chmod o±t 目录名... 使用权限数字: chmod mnnn 可执行文件... m为4时,对应SUID,2对应SGID,1对应粘滞位,可叠加
SET位标记字符为“s”,若使用8进制数字形式,则SUID对应为“4”、SGID对应为“2”
在权限模式中可采用“nnnn”的形式时,如“4755”表示设置SUID权限、“6755”表示同时设置SUID、SGID权限
以为 /bin/touch 命令设置SUID权限为例进行演示,普通用户使用该命令创建测试文件,比较新建文件的属主变化
注意:为普通文件(无执行权限的)设置SET位权限从语法上虽然也可行,但没有实际意义(标记字符将变为大写字母“S”)
通过实例操作演示,展示粘滞位的作用,例如:由普通用户1在 /tmp 目录中尝试删除 普通用户2的文件,对比是否设置粘滞位的区别
注意:为普通文件或者用户本没有写入权限的目录设置粘滞位语法上也是可行的,但没有实际意义(标记字符将变为大写字母“T”)
which vim
chmod u+s /usr/bin/vim
实验案例:用户和文件权限管理
需求描述 将/etc/fstab 复制到/var/tmp/fstab ,设置harry可以读写,natasha不能做任何操作,其他用户可读,设置manager组为fstab 所属组 设置用户natasha对目录/home/cnrts(创建)有完全控制权限,在目录中创建的文件自动继承组的权限,设置manager组用户对目录有读写执行权行,其他人没有权限,(root除外)
cp /etc/fstab /var/tmp/fstab
ls -l /var/tmp/fstab (查看一下目录的信息)
chown:manager /var/tmp/fstab
查看网络接口信息
使用命令查看网络信息
查看网络接口信息
Ifconfig
测试网络连接状态
ping
查看网关地址
route
查看主机名称信息
hostname
查看DNS服务器
nslookup
网络的基本配置
通过修改配置文件配置网络信息(需要重启网络服务使配置生效,配置会永久有效) 网络配置工具: 图形界面:NetworkManager服务 命令界面:nmcli 重启网络服务: systemctl restart NetworkManager nmcil connection down/up ip地址
网卡配置文件 存放位置:/etc/sysconfig/network-scripts/ 命名格式:ifcfg-0 主机名称配置文件 /etc/sysconfig/network 停止或启动指定网络接口 nmcli connection down ens ; nmcli connection up ens
网络接口配置文件
网络配置
使用vi编辑器编辑配置网卡文件,配置信息如下:
IP:192.168.0.(100+X)
子网掩码:255.255.255.0
默认网关:192.168.0.254
DNS:192.168.0.254
主机名:serverX.example.com
(注:X为编号)
重启网卡并验证IP地址
测试与其他主机的网络连接路径
域名查询
nslookup命令可进行域名的查询
域名服务器配置文件
系统使用的DNS服务器的ip地址保存在“resolv.conf”文件中
nameserver配置项用于设置系统使用的DNS服务器地址
DNS服务器的ip地址
设置主机名称
本地主机名称解析文件
本机名称配置文件
查看和修改网络配置
查看ip地址和子网掩码: ip addr(ifconfig) /etc/sysconfig/network-scripts/ifcfg-eth0 查看路由和默认网关:ip route(route) /etc/sysconfig/network-scripts/ifcfg-eth0 查看系统主机名:hostname /etc/sysconfig/network 查看DNS服务器地址:nslookup(host) /etc/resolv.conf
防火墙的配置
什么是防火墙
防火墙——是指设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的组合。 它是不同网络或网络安全域之间信息的唯一出入口,能根据企业的安全策略控制(允许、拒绝、监测)出入网络的信息流,且本身具有较强的抗攻ji能力。 在逻辑上,防火墙是一个分离器、限制器和分析器,它能有效地监控内部网和Internet之间的任何活动,保证了内部网络的安全。
使用web控制台配置防火墙服务
使用web控制台来配置防火墙服务,请单击“重用我的密码以执行特权任务”选项以特权权限进行登录。允许用户以sudo权限进行修改防火墙服务的命令
单击右侧导航菜单中的Networking选项,以显示主网络页面中的Firewall部分,单击Firewall链接,以访问允许的服务列表
允许的服务列表是指防火墙当前允许的那些服务,单击服务名称左侧的箭头(>)可查看服务详细信息,要添加服务,请单击Firewall Allowed Services页面右上角的Add Services... 按钮
使用web控制台配置防火墙
选择服务,在Filter Services 文本框中输入选择内容,以http为例,搜索文本框中输入字符串http,以查找包含http的服务,即web相关服务。允许这些服务通过防火墙
从命令行配置防火墙
firewall-cmd命令将会与firewalld动态防火墙管理器进行交互。他是作为主firewalld软件包的一不部分安装的,可用于倾向使用命令行的管理员,在没有图形环境的系统上工作,或编写有关防火墙设置的脚本
使用命令行配置防火墙
[root@host ~]# firewall-cmd --set-default-znotallow=dmz
Warning: ZONE_ALREADY_SET: dmz
success
[root@host ~]# firewall-cmd --permanent --znotallow=internal --add-source=192.168.0.0/24
success
[root@host ~]# firewall-cmd --permanent --znotallow=internal --add-service=mysql
success
[root@host ~]# firewall-cmd --reload
success
管理SELINUX安全性
什么是SElinux
SELinux(Security-Enhanced Linux) 是一个额外的系统安全层。SElinux的主要目标是防止已遭泄露的系统服务访问用户数据。大多数linux管理员都熟悉标准的用户/组/其他权限安全模型。这种基于用户和组的模型为自由决定的访问控制。SElinux提供另一层安全,它基于对象并由更加复杂的规则控制,称为强制访问控制
为什么使用SELinux
SElinux实施了一组可以防止一个应用程序的弱点影响其他应用或基础系统的访问规则。
SElinux有三种模式:
强制:SElinux强制执行访问控制规则,计算机通常在该模式下运行。
许可:SElinux处于活动状态,但并不强制执行控制规则,而是记录违反规则的警告。该模式主要用于测试和故障排除。
禁用:SElinux完全关闭-不拒绝任何SElinux违规,甚至不予记录
SElinux上下文修改
SElinux是用于确定哪个进程可以访问哪些文件、目录和端口的一组安全规则。每个文件、进程、目录和端口都具有专门的安全标签,称为SElinux上下文。上下文是一个名称,SElinux策略使用它来确定某个进程能否访问文件、目录和端口。
SElinux标签具有多种上下文:用户、角色、类型和敏感度
实验
更改当前selinux模式
[root@host ~]# getenforce
Enforcing
[root@host ~]# setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@host ~]# setenforce 0
[root@host ~]# geten
getenforce getent
[root@host ~]# getenforce
Permissive
[root@host ~]# setenforce Enforcing
[root@host ~]# getenforce
Enforcing
[root@host ~]#
控制SElinux端口标记
selinux端口标记
selinux不仅仅是进行文件和进程标记,SElinux策略还严格实施网络流量。SElinux用来控制网络流量的其中一种方法是标记端口
管理SElinux端口标记
在非标准端口上运行服务,SElinux几乎肯定会拦截此流量。在这种情况下,您必须更新SElinux端口标签。在某些情况下targeted策略已经通过可以使用的类型标记了端口;
列出端口标签
要获取所有当前端口标签分配的概述,请运行semanage port -l命令。 -l选项列出当前分配:
输出示例:
[root@host ~]# semanage port -l
SELinux 端口类型 协议 端口号
要优化搜索,使用grep命令:
[root@host ~]# semanage port -l | grep ftp
ftp_data_port_t tcp 20
ftp_port_t tcp 21, 989, 990
ftp_port_t udp 989, 990
tftp_port_t udp 69
管理端口标签:
使用semanage命令可以分配新端口标签、删除端口标签或修改现有端口标签。
要向现有端口标签(类型)中添加端口,使用以下语法,-a将添加新端口标签,-t表示类型,-p表示协议。
例如:要允许gopher服务侦听端口71/TCP:
[root@host~]# semanage port -a -t gopher_port_t -p tcp 71
要查看对默认策略的本地更改,管理员可以在semanage命令中添加-c选项。
SELinux 端口类型 协议 端口号
gopher_port_t tcp 71
删除端口标记
删除自定义端口标签的语法与添加端口标签的语法相同,但不是使用-a选项(表示添加),而是使用-d选项(表示删除)
例如:要删除端口71/TCP与gopher_port_t的绑定:
[root@host ~]# semanage port -d -t gopher_port_t -p tcp 71
修改端口绑定:
要更改端口绑定,请使用-m(修改)选项。这种流程比删除旧绑定并添加新绑定更高效。
例如,要将端口71/tcp从gopher_port_t修改为http_port_t,管理员可以使用如下命令:
[root@host ~]# semanage port -m -t http_port_t -p tcp 71