CentOS 7.4 初次手记:第四章 CentOS安全了解
第四章 CentOS安全了解... 66
第一节 user、group、chmod. 66
I 10位文件属性... 66
II user/group增删改... 67
III user/group配置文件... 68
IV 进程权限... 70
第二节 visudo. 71
I 文件自带的示例... 71
II /etc/sudoers无法保护root密码... 71
III 示例... 71
IV Sudo -l #查看可用命令列表... 72
V root用户和sudo使用root权限的区别... 72
第三节 PAM嵌入式认证模块... 73
I /etc/pam.conf文件... 74
II /etc/pam.d/目录... 74
III pam_tally2.so多次登陆失败后锁定帐号... 77
IV 温馨提示... 79
第四节 SSH Key登录... 79
I 1、制作用户的rsa密钥... 79
II 2、下载密钥文件scp、pscp. 80
III 3、配置SSHd. 81
IV 4、配置SSH Client 83
第五节 PuTTY+Xming. 84
第六节 systemctl 84
I systemd服务以root身份运行... 85
第七节 firewall-cmd. 85
I 示例... 86
II 区域... 87
III Help. 87
第八节 crond定时任务... 87
I /etc/crontab. 87
II /etc/cron.d/ 88
III crontab用户级... 89
第九节 系统日志/var/log. 89
第十节 uptime理解系统负荷... 90
I 一个类比... 90
II 经验法则... 91
III 多路多核CPU.. 91
IV 最佳观察时长... 91
第四章 CentOS安全了解
第一节
user、group、chmod
I
10位文件属性
Ls -lh <.|/etc/m|m> <默认>按字母顺序列出指定文件或指定文件夹的文件和文件夹
Ls -lh </etc/m*|m*> 按字母顺序列出符合过滤器的文件及子文件夹下的所有文件与目录
Ls -lhd </etc/m*|m*> 按字母顺序列出符合过滤器的文件及子文件夹的所有文件与目录
文件属性 |
文件数 |
所有者 |
所属组 |
文件大小 |
修改时间(月/日/年或时) |
文件名 |
0-123-456-789 |
第0位表示文件类型 s p表示命名管道文件 s d表示目录文件 s l表示符号连接文件 s -表示普通文件 s s表示socket文件 s c表示字符设备文件 s b表示块设备文件 |
s 第123-456-789位分别表<所有者u-user、同组用户g-group、其他用户o-other>的权限。 s r只读、w可写、x执行,x在目录时与『能否进入该目录』有关。 s 因rwx位置固定,二进制转换十进制后为421,再相加得到7或6或5或4;所以也有777、755、754、750、600说法。 |
改所有者/所属组
只有文件主或超级用户可修改,R为子目录,h为仅符号链接文件。
change group改所属组:chgrp
[-R] <组名>
<文件或目录>
change owner改所有者:chown
[-hR] <用户名[:组名]>
<文件或目录>
chmod:改权限及SUID/SGID/SBIT等特性
chmod [-R] 777 filename
s 777:所有人可做所有操作
s 755:所有者可读写执行,同组用户可读可执行,其他用户可读可执行(755为最常见)
s 754:所有者可读写执行,同组用户可读可执行,其他用户可读
chmod [-R] +rx filename
或 chmod
[-R] o=rx,go=rx filenme
s ugoa:所有者u-user、同组用户g-group、其他用户o-other、所有用户a-all<默认>
s +-=:增加权限+、删除权限-、重新设置权限=
s rwx:读r、写w、执行x
umask:新建文件的缺省权限
umask设置了用户创建文件默认没有的权限,它与chmod的效果刚好相反。umask命令只能临时修改umask值,系统重启之后umask将还原成默认值。如果要永久修改umask值,需要修改/etc/profile、/etc/bashrc、$
[HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。
touch
~/file;mkdir ~/filedir;ls -ld ~/file ~/filedir/;rm -rf ~/file
~/filedir/
在使用umask命令之前一定要弄清楚到底希望具有什么样的文件/目录创建缺省权限。否则可能会得到一些非常奇怪的结果;例:umask
600,那么所创建的文件/目录的缺省权限就是066!
nnnn
umask是从权限中“拿走”相应的,且文件创建时不能赋予执行权限。nnnn的第一个n是定义特殊的权限,chmod也有4,但一般也是省略。
权限是000~777,而umask
nnn是通过777-nnn(文件夹)或666-nnn(文件)得到是最终的权限,因为nnn是定义没有的权限。
umask |
文件 |
目录 |
002 |
664 |
775 |
007 |
660 |
770 |
022 |
644 |
755 |
027 |
640 |
750 |
链接文件
链接文件自身默认是777的权限,且无法修改。但对链接文件使用chmod命令,生效的是实际源文件。
II
user/group增删改
user |
group |
||
useradd [-g|G 组名] |
新增用户并加g私有组G附加组 -s:默认为/bin/bash,非登录用户指定为/sbin/nologin |
groupadd name |
添加 |
userdel name |
删除 |
groupdel name |
删除 |
usermod [选项] |
--login 改登录名 -L 锁定 -g 主组 |
groupmod -n newname name |
改名 |
gpasswd -d user gname |
组中删除用户 |
||
passwd [选项] chage [选项] |
改密码 (密码效期) |
gpasswd -r groupmod -p newpwd name |
清空密码 改密码 |
id [name] |
查看name信息 |
id -G name groups user1 |
查看组id 看用户所在组 |
useradd - |
查看useradd默认配置 |
[root@cos7 ~]# id oracle
uid=1002(oracle)
gid=1002(oinstall) 组=1002(oinstall),1003(dba)
[root@cos7 ~]# usermod -G oper -a
oracle
[root@cos7 ~]# id oracle
uid=1002(oracle)
gid=1002(oinstall) 组=1002(oinstall),1003(dba),1004(oper)
查看所有用户与ID:cat /etc/passwd
|cut -f 1,3 -d : |less
查看所有用户组与GID:cat
/etc/group|less
组的类型
私有组/基本组:同用户名,且仅它自己一个用户,使用useradd
-g groupname username除外。
公共组/附加组:CentOS 使用私有群组机制,因此这个设定项目是不会生效的!
初始组(initial group):/etc/passwd中的GID,所以登录后就是。
有效组(effective group):dmtsai 账号同时支持 dmtsai 与 users
这两个群组,在创建新的文件时,新文件的群组是 dmtsai 还是 users
?这时就看当时的有效群组了 (effective group)。
有效群组的切换:newgrp
组名
III
user/group配置文件
grep sauser /etc/passwd /etc/shadow
/etc/group
getent
passwd|shadow|group|gshadow sauser
用户信息/etc/passwd
保存了用户账号的基本信息,每一行使用『:』分隔开,共有七个。
帐号名称 |
密码 |
UID |
GID |
帐号说明 |
Home目录 |
Shell目录 |
密码:以X代替,实际存放/etc/shadow里
UID:0为root,1~999为系统预留,所以1000为第一个用户
GID:用户组的ID,与UID一样,0为root,1~999为系统预留,所以1000为第一个用户组。
Shell目录:一般是/bin/bash,若是/sbin/nologin则不能登录系统。
用户密码/etc/shadow
保存了密码字串,有效期等信息,每一行使用『:』分隔开,共有九个。
用户名 |
密码 |
上次修改日期 |
最短有效天数 |
最长有效天数 |
失效警告天数 |
有效宽限天数 |
失效日期 |
保留 |
日期看不懂?没事,使用passwd -S username 查看。
用户组信息/etc/group
组名:密码:GID:组成员(空则为GID的用户)
用户组密码/etc/gshadow
组名:密码(空或!表示没有):组管理者:组内用户列表
useradd模板文件
/etc/login.defs:限制与规划文件,如密码/UID/GID、==
/etc/default/useradd:可用useradd
-D来查看修改,或者直接修改此文件
/etc/skel/*:新建用户时,将此目录里面的内容就拷贝此用户的~目录下
IV
进程权限
linux系统中每个进程都有2个ID,分别为用户ID和有效用户ID,UID一般表示进程的创建者(属于哪个用户创建),而EUID表示进程对于文件和资源的访问权限(具备等同于哪个用户的权限)。可以通过函数getuid()和geteuid()或者进程的两个ID值。
当一个用户登陆系统时,系统会将UID和EUID都赋值为/etc/passwd文件中的UID,一般情况下2个ID是相同的,但是某些情况下会出现2个ID不同的情况。
进程三个ID
real user ID (uid): 实际用户ID,指的是进程执行者是谁
effective user ID (euid): 有效用户ID,指进程执行时对文件的访问权限
saved set-user-ID (saved uid): 保存设置用户ID。是进程刚开始执行时,euid的副本。在执行exec调用之后能重新恢复原来的effectiv
user ID.
文件二个
set-user-ID
(suid)/set-group-ID(sgid):设置用户/用户组ID,这是相对于文件来说的。
设置了set-user-ID位的可执行程序执行时,进程的effective user
ID与saved set-uesr-ID都为程序文件所属用户的ID,
real user ID与effective user ID就不一定相等了,这类程序称之为SUID程序,这类程序有特殊的用途(典型的例子:passwd程序,ping程序等)。
第二节
visudo
虽然 vim
/etc/sudoers也可修改,但还是强烈推荐使visudo命令去修改此文件,因为它会帮你校验文件配置是否正确,如果不正确,在保存退出时就会提示你哪段配置出错的。
整个文件分三部:
1、别名(Alias)定义:《名称必须是大写》Host_Alias、Cmnd_Alias、User_Alias、Runas_Alias,可以在规则配置时引用,但默认全注释了。
2、环境变量定义:以Defaults开头的行。
3、规则配置:重点
I
文件自带的示例
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
#被授权用户名 登录主机=[(可用帐号)]
[NOPASSWD: ]可执行命令
登录主机:执行命令的主机,小写为单台主机,大写为主机组别名
Runas_Alias/可用帐号:sudo -u username,无则为root
NOPASSWD:执行命令前不验证用户密码
## Allows people in group wheel to run all
commands
%wheel ALL=(ALL) ALL,!/usr/bin/passwd,!/usr/sbin/visudo
#允许wheel组中用户执行所有命令,但禁止passwd/visudo命令,即不能改其他用户的密码。
## 允许users用户组中的用户像root用户一样使用mount、unmount、cdrom命令
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## 允许users用户组中的用户像root用户一样使用shutdown命令
# %users localhost=/sbin/shutdown -h now
II
/etc/sudoers无法保护root密码
sudo后,就是root的权限,可以修改此文件,删除,!/usr/bin/passwd,!/usr/sbin/visudo语句,再通过sudo passwd root来修改root密码。
III
示例
test centos=ALL,!/usr/bin/passwd,!/usr/bin/passwd
root
IV
Sudo -l
#查看可用命令列表
V
root用户和sudo使用root权限的区别
sudo(switch user do)与su(switch user)是不一样的,sudo是以root的身份执行一条命令,语法为 sudo
<指令>;可以使用sudo的用户为被root加入『/etc/sudoers』文件中的用户,使用sudo时,要求输入的密码是『该位用户自己的密码』不需要知道root的密码。使用的环境变量为用户本身的,而不是root的环境变量;命令执行时,uid是不一样,但euid是相同的,为root的euid。
由root用户切换到FSP(普通用户),不需要密码;由FSP(普通用户)切换到root,需要密码。
注意命令与前缀的变化(#是root特有标志):
Connection established.
To escape to local shell, press
'Ctrl+Alt+]'.
Last login: Sun Jan 21 10:08:10
2018
[sauser@centos ~]$ id
uid=1000(sauser) gid=1000(sauser) 组=1000(sauser)
环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[sauser@centos ~]$ sudo sh
[sudo] sauser 的密码:
sh-4.2# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
sh-4.2# exit
exit
[sauser@centos ~]$ sudo su
[root@centos sauser]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@centos sauser]#
exit
exit
[sauser@centos ~]$ su root
密码:
[root@centos sauser]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@centos sauser]#
exit
exit
[sauser@centos ~]$ exit
登出
Connection closing...Socket
close.
Connection closed by foreign
host.
Connection established.
To escape to local shell, press
'Ctrl+Alt+]'.
Last login: Sun Jan 21 10:35:05
2018
[root@centos ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@centos ~]# su sauser
[sauser@centos root]$ id
uid=1000(sauser) gid=1000(sauser) 组=1000(sauser)
环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[sauser@centos root]$
第三节
PAM嵌入式认证模块
Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式。换句话说:不用(重新编写)重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制,升级本地认证机制,也不用修改程序。
I
/etc/pam.conf文件
centos 6之后不在使用此文件
每行的格式如下:service-name
module-type control-flag module-path arguments
II
/etc/pam.d/目录
目录下文件的名字就是服务名称。
vim /etc/pam.d/sshd
配置文件的结构分为四列,依次是:模块类型、控制标记、模块路径、模块参数
模块类型
Linux-PAM有四种模块类型,分别代表四种不同的任务:认证管理(auth),账号管理(account),会话管理(session)和密码(password)管理。一个类型可能有多行。它们按顺序依次由PAM模块调用。
管理方式 |
说明 |
auth |
用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root等. |
account |
对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等. |
session |
这个模块用来定义用户登录前的,及用户退出后所要进行的操作.如:登录连接信息,用户数据的打开与关闭,挂载文件系统等. |
password |
使用用户信息来更新.如:修改用户密码. |
控制标记
PAM使用控制标记来处理和判断各个模块的返回值.(在此只说明简单的认证标记)
控制标记 |
说明 |
required |
表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕后,PAM |
requisite |
与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表示此类型失败.不再进行同类型后面的操作. |
sufficient |
表示如果一个用户通过这个模块的验证,PAM结构就立刻返回验证成功信息(即使前面有模块fail了,也会把 |
optional |
表示即使本行指定的模块验证失败,也允许用户接受应用程序提供的服务,一般返回PAM_IGNORE(忽略). |
模块路径
即要调用模块的位置:64位系统一般保存在/lib64/security,如:pam_unix.so
同一个模块,可以出现在不同的类型中,它在不同的类型中所执行的操作都不相同。这是由于每个模块针对不同的模块类型,编制了不同的执行函数。
模块参数
即传递给模块的参数,可以有多个用空格分隔开,如:password required pam_unix.so
nullok obscure min=4 max=8 md5
常用PAM模块 |
结合管理类型 |
说明 |
pam_unix.so |
auth |
提示用户输入密码,并与/etc/shadow文件相比对.匹配返回0 |
account |
检查用户的账号信息(包括是否过期等).帐号可用时,返回0. |
|
password |
修改用户的密码.将用户输入的密码,作为用户的新密码更新shadow文件 |
|
pam_shells.so |
auth account |
如果用户想登录系统,那么它的shell必须是在/etc/shells文件中之一的shell |
pam_deny.so |
account auth password session |
该模块可用于拒绝访问 |
pam_permit.so |
auth account password session |
模块任何时候都返回成功. |
pam_securetty.so |
auth |
如果用户要以root登录时,则登录的tty必须在/etc/securetty之中. |
pam_listfile.so |
auth account passwordsession |
访问应用程的控制开关 |
pam_cracklib.so |
password |
这个模块可以插入到一个程序的密码栈中,用于检查密码的强度. |
pam_limits.so |
session |
定义使用系统资源的上限,root用户也会受此限制,可以通过/etc/security/limits.conf或/etc/security/limits.d/*.conf来设定 |
示例pam_securetty.so
限制root从tty1,tty2,tty5登录(无实际意义,只是演示pam_securetty的用法)
1) 在/etc/pam.d/login中添加如下一行
auth required pam_securetty.so
2) 在/etc/pam.d/securetty中将tty1,tty2,tty5注释即可
这么做其实并不是只限制root用户,也可以将其它用户用此方法来限定,当系统安装完成后,使用此方法来增强一下安全性。
示例pam_listfile.so
仅essun用户可以通过ssh远程登录
1) 在/etc/pam.d/sshd文件中添加一条
auth required pam_listfile.so item=user sense=allow file=/etc/sshdusers
onerr=succeed
2) 添加两个用户essun和tom
3) 编辑file指定的文件,添加上一个用户essun
echo "essun" >/etc/sshdusers
使用tom用户登录,可以看到提示输入密码,当输入正确的密码后会提示,就像输入了错误的密码一样。而在使用essun用户登录则不会出现拒绝登录的提示
注1:此处如果root也使用ssh远程连接登录,也会受到pam_listfile.so限制的,但可su root。
注2:在此限制登录帐号,还不如设置sshd的AllowUsers、DenyUsers或直接把其他帐号useradd|usermod
-s /sbin/nologin
<username>。
man
pam_listfile
其实pam模块的使用方法套路都差不多
如想了解更多的PAM模块的用法请man
modules
III
pam_tally2.so多次登陆失败后锁定帐号
设置Linux用户连续N次输入错误密码进行登陆时,自动锁定X分钟或永久锁定(这里的永久锁定指除非进行手工解锁,否则会一直锁定)。
示例
vim
/etc/pam.d/sshd
auth required pam_tally2.so deny=3 unlock_time=300
even_deny_root root_unlock_time=600
解读:SSH连续三次认证失败,锁定5分钟,root用户则锁定10分钟。
格式
pam_tally2.so
[file=/path/to/counter] [onerr=[fail|succeed]] [magic_root]
[even_deny_root] [deny=n] [lock_time=n] [unlock_time=n] [root_unlock_time=n]
[serialize] [audit] [silent] [no_log_info]
1、全局参数
file |
用于指定统计次数存放的位置,默认保存在/var/log/tallylog文件中; |
onerr |
当意外发生时,返加PAM_SUCCESS或pam错误代码,一般该项不进行配置; |
audit |
如果登录的用户不存在,则将访问信息写入系统日志; |
silent |
静默模式,不输出任何日志信息; |
no_log_info |
不打印日志信息通过syslog |
上面的五项全局参数,一般在使用中都不需要单独配置。
2、认证选项
deny |
指定最大几次认证错误,如果超出此错误,将执行后面的策略。如锁定N秒,如果后面没有其他策略指定时,默认永远锁定,除非手动解锁。 |
lock_time |
锁定多长时间,按秒为单位; |
unlock_time |
指定认证被锁后,多长时间自动解锁用户; |
magic_root |
如果用户uid=0(即root账户或相当于root的帐户)在帐户认证时调用该模块发现失败时,不计入统计; |
no_lock_time |
不使用.fail_locktime项在/var/log/faillog中记录用户---按英文直译不太明白,个人理解即不进行用户锁定; |
even_deny_root |
root用户在认证出错时,一样被锁定(该功能慎用,搞不好就要单用户时解锁了) |
root_unlock_time |
root用户在失败时,锁定多长时间。该选项一般是配合even_deny_root一起使用的。 |
认证位置
/etc/pam.d/login中配置只在本地文本终端上做限制;
/etc/pam.d/kde在配置时在kde图形界面调用时限制;
/etc/pam.d/sshd中配置时在通过ssh连接时做限制;
/etc/pam.d/system-auth中配置凡是调用
system-auth 文件的服务,都会生效。
手工解锁
[root@cos7 ~]# pam_tally2 --user
liang
Login Failures Latest failure From
liang 4 01/27/18 16:09:58 tty3
[root@cos7 ~]# pam_tally2 --user liang
--reset=3
Login Failures Latest failure From
liang 4 01/27/18
16:09:58 tty3
[root@cos7 ~]# pam_tally2 --user liang
Login Failures Latest failure From
liang 3 01/27/18 16:09:58 tty3
[root@cos7 ~]# pam_tally2 --user liang
--reset
Login Failures Latest failure From
liang 3 01/27/18
16:09:58 tty3
[root@cos7 ~]# pam_tally2 --user liang
Login Failures Latest failure From
liang 0
[root@cos7 ~]#
IV
温馨提示
如果发生错误,Linux-PAM
可能会改变系统的安全性。这取决于你自己的选择,你可以选择不安全(开放系统)和绝对安全(拒绝任何访问)。通常,Linux-PAM 在发生错误时,倾向于后者。任何的配置错误都可能导致系统整个或者部分无法访问。
配置 Linux-PAM
时,可能遇到最大的问题可能就是 Linux-PAM 的配置文件/etc/pam.d/*被删除了。如果发生这种事情,你的系统就会被锁住。
有办法可以进行恢复,最好的方法就是用一个备份的镜像来恢复系统,或者登录进单用户模式然后进行正确的配置。
第四节
SSH
Key登录
密钥形式登录的原理是:利用密钥生成器制作一对密钥(一只公钥和一只私钥)。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。
I
1、制作用户的rsa密钥
ssh-keygen -t rsa #连续三次回车,ssh1只支持rsa1,ssh2支持所有的。
生成密钥时选择默认位置即可,同时可以选择为密钥增加密码(设置密码后,使用密钥时还需要输入密码)。
II
2、下载密钥文件scp、pscp
scp是linux下利用sftp/scp协议跨主机复制文件,不受ssh登录限制,PuTTY中的pscp是Win版scp。
C:\>pscp
ctos@192.168.19.19:/home/ctos/.ssh/id_* e:\downloads
ctos@192.168.19.19's
password:
id_rsa | 1 kB | 1.6 kB/s |
ETA: 00:00:00 | 100%
id_rsa.pub | 0 kB | 0.4 kB/s |
ETA: 00:00:00 | 100%
C:\>pscp
ctos@192.168.19.19:/home/ctos/.ssh/one.file e:\downloads
ctos@192.168.19.19's
password:
C:\>dir e:\downloads
2018/01/25 12:56 1,679 id_rsa
2018/01/25 12:56 391 id_rsa.pub
2018/01/25 12:57 0 one.file
注意:1、路径为绝对路径,未加-r递归参数只能下载文件,不能下载目录。
2、e:\downloads如果不是已存的目录,当文件名处理。
上传示例
pscp
e:\Downloads\BaiduNetdiskDownload\putty-0.70cn.zip ctos@192.168.19.19:/home/ctos/abc
pscp -r e:\Downloads\BaiduNetdiskDownload
ctos@192.168.19.19:/home/ctos/abc
III
3、配置SSHd
a)、安装公钥文件
mv id_rsa.pub authorized_keys
cat id_rsa.pub >>
authorized_keys #这样也行
pscp
D:\Toolkit\PuTTY\cos7\id_rsa.pub
ctos@192.168.19.19:/home/ctos/.ssh/authorized_keys
为了安全改文件权限
chmod 600 authorized_keys
chmod 700 ~/.ssh
b)、/etc/ssh/sshd_config
开启公钥认证,默认是注释了。
PubkeyAuthentication yes
确认连接成功后,关闭密码认证。
PasswordAuthentication no
IV
4、配置SSH Client
PuTTY
私钥文件格式转换,可以设置使用密码 |
设置私钥文件 |
不要密码或指定密钥了?
Xshell
5+Xftp 5
第五节
PuTTY+Xming
PuTTY将设置存在注册表HKEY_CURRENT_USER/Software/SimonTatham/PuTTY里。
SSHd提供了x11转发功能。Xming是图形转发程序,在linux上服务端,在Windows上装客户端。
第六节
systemctl
进程和作业管理:systemctl命令是系统服务管理器指令,它实际上将service和chkconfig这两个命令组合到一起。
任务 |
旧指令 |
新指令 |
使某服务自动启动 |
chkconfig --level 3 httpd on |
systemctl enable |
使某服务不自动启动 |
chkconfig --level 3 httpd |
systemctl disable |
检查服务状态 |
service httpd status |
systemctl status systemctl is-active |
显示所有已启动的服务 |
chkconfig --list |
systemctl list-units |
启动某服务 |
service httpd start |
systemctl start |
停止某服务 |
service httpd stop |
systemctl stop |
重启某服务 |
service httpd restart |
systemctl restart |
I
systemd服务以root身份运行
第七节
firewall-cmd
[root@cos7 liang]# firewall-cmd --add-port=1521/tcp
--permanent
success
[root@cos7 liang]# firewall-cmd --add-port=1158/tcp
--permanent
success
[root@cos7 liang]# firewall-cmd --reload
success
[root@cos7 liang]# firewall-cmd
--list-all
public (active)
target: default
icmp-block-inversion:
no
interfaces: ens32
ens33
sources:
services: ssh dhcpv6-client
ntp
ports: 1521/tcp
1158/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
I
示例
systemctl <stop|start|restart|status>
firewalld.service
#firewall的停止、启动、重启、状态
systemctl disable
firewalld.service
#禁止firewall开机启动
systemctl enable firewalld.service #启用firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
firewall-cmd --list-service #查看开放的服务
firewall-cmd --list-ports #查看开放的端口
firewall-cmd
--zone=public --add-service=ntp --permanent #永久开放public区域的ntp服务
firewall-cmd --zone=public
--add-port=1521/tcp #临时开放public区域的tcp协议1521端口
firewall-cmd --zome=public --add-port=5060-5059/udp
--permanent
#永久开放public区域的udp协议5060-5059端口
firewall-cmd --remove-service=ftp
--permanent #永久关闭默认区域的ftp服务。
firewall-cmd --zome=public
--remove-port=5060-5059/udp --permanent #永久移除public区域的udp协议5060-5059端口
firewall-cmd --query-service ssh
#查询ssh服务状态
firewall-cmd --query-port=1521/tcp
#查询Tcp1521商品的状态
firewall-cmd --reload #重新加载配置
firewall-cmd --complete-reload #重启服务加载配置
firewall-cmd
--state
#查看状态:运行中、未运行。
允许/删除ip
192.168.0.4/24 访问 http
firewall-cmd --permanent --zone=public
--add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service
name="http" accept"
firewall-cmd --permanent --zone=public
--remove-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service
name="http" accept"
Firewall-config:在GUI更直观一些。
II
区域
[root@centos liang]# firewall-cmd
--get-zones #列出所有区域
block dmz drop external home internal public trusted
work
[root@centos liang]# firewall-cmd
--get-default-zone #注意没有s
Public
[root@centos liang]# firewall-cmd
--get-active-zones #列出激活区域
public
interfaces: ens32
ens33
[root@centos liang]# firewall-cmd
--get-zone-of-interface=ens32 #查询接口ens32所在区域
Public
firewall-cmd --zone=public
--list-all #显示指定区域
firewall-cmd --list-all-zones #显示所有区域
firewall-cmd --list-all #显示激活区域
firewall-cmd --zone=public
--add-service=ntp –permanent
#永久开放public区域的ntp服务
命令
区域 规则操作
规则效力
未指定则为默认区域 未指明则为临时
规则操作方法:查看list、添加add、删除remove、服务查询query
规则操作对像:服务service、端口port、协议protocol、富规则rich-rule、来源source
drop |
丢弃所有进入的包,而不给出任何响应 |
block |
拒绝所有外部发起的连接,允许内部发起的连接 |
public |
允许指定的进入连接 |
external |
同上,对伪装的进入连接,一般用于路由转发 |
dmz |
允许受限制的进入连接 |
work |
允许受信任的计算机被限制的进入连接,类似workgroup |
home |
同上,类似homegroup |
internal |
同上,范围针对所有互联网用户 |
trusted |
信任所有连接 |
III
Help
https://fedoraproject.org/wiki/FirewallD/zh-cn
IV
iptables命令
建议使用firewall-cmd命令来配置防火墙
$ /etc/init.d/iptables start # 开启防火墙,或者service
iptables start,以下同理
$ /etc/init.d/iptables stop # 停止防火墙
$ /etc/init.d/iptables restart # 重启防火墙
$ /etc/init.d/iptables status # 查看端口状态
$ /etc/init.d/iptables save # 保存配置
$ chkconfig iptables off # 永久关闭防火墙
$ chkconfig iptables on # 永久关闭后启用
语法
iptables -t
表名
<-A/I/D/R> 规则链名
[规则号] <-i/o 网卡名> -p 协议名
<-s 源IP/源子网> --sport 源端口
<-d 目标IP/目标子网> --dport 目标端口
-j 动作
表名 |
动作 |
||
raw |
高级功能,如:网址过滤。 |
ACCEPT |
接收数据包。 |
mangle |
数据包修改(QOS)实现服务质量。 |
DROP |
丢弃数据包。 |
net |
地址转换,用于网关路由器。 |
REDIRECT |
重定向、映射、透明代理。 |
filter |
包过滤,用于防火墙规则。 |
SNAT |
源地址转换。 |
规则链名 |
DNAT |
目标地址转换。 |
|
INPUT |
处理输入数据包。 |
MASQUERADE |
IP伪装(NAT),用于ADSL。 |
OUTPUT |
处理输出数据包。 |
LOG |
日志记录。 |
PORWARD |
处理转发数据包。 |
||
PREROUTING |
用于目标地址转换(DNAT)。 |
||
POSTOUTING |
用于源地址转换(SNAT)。 |
选项
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清空规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
示例
关闭所有的 INPUT
/ FORWARD / OUTPUT
iptables -P
INPUT DROP
iptables -P
FORWARD DROP
iptables -P
OUTPUT DROP
一设置规则,即生效。
保存配置
service
iptables save
重启服务
service
iptables restart
查看状态:
iptables -L -n
-v
将所有iptables以序号标记显示,执行:
iptables -L -n
-v --line-numbers
比如要删除INPUT里序号为8的规则,执行:
iptables -D
INPUT 8
清除已有iptables规则
iptables -F
iptables -X
iptables -Z
开放指定的端口
iptables -A
INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state
ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
iptables -A
INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口
iptables -A INPUT -j reject #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问
屏蔽IP
iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
iptables -I
INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令
开放22端口
iptables -A
INPUT -p tcp --dport 22 -j ACCEPT
iptables -A
OUTPUT -p tcp --sport 22 -j ACCEPT
/etc/sysconfig/iptables
-A INPUT -p tcp -m tcp --dport 4000 -j
ACCEPT
在文件中录入,命令的前面部分,保存后再重启:service iptables
restart
第八节
crond定时任务
systemctl <status|start|stop|restart>
crond
I
/etc/crontab
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month
(1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6)
(Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
II
/etc/cron.d/
当我们要增加全局性的计划任务时,一种方式是直接修改/etc/crontab。但是,一般不建议这样做,/etc/cron.d目录就是为了解决这种问题而创建的。
除了数字还有几个特殊的符号:
* |
代表所有的取值范围内的数字 |
/ |
代表每的意思,/5表示每5个单位 |
- |
代表从某个数字到某个数字 |
, |
分开几个离散的数字 |
每天的下午4点、5点、6点的5
min、15 min、25
min、35 min、45
min、55 min时执行命令。
5,15,25,35,45,55 16,17,18 * * *
root command
每年的一月和四月,4号到9号的3点12分和3点55分执行command。
12,55 3 4-9 1,4 * root
command
晚上11点到早上8点之间的每隔两个小时和早上八点
0 23-7/2,8 * * * root
command
每隔两个小时(第一个为15,指明每两个小时的第15min中执行一次)
15 */2 * * * root
command
系统示例
[root@cos7 ctos]#
cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts
/etc/cron.hourly #每小时的第01分钟执行
[root@cos7 ctos]#
cat /etc/cron.d/raid-check
# Run system wide raid-check once
a week on Sunday at 1am by default
0 1 * * Sun root
/usr/sbin/raid-check #星期日的01:00执行
[root@cos7 ctos]#
cat /etc/cron.d/sysstat
# Run system activity accounting
tool every 10 minutes
*/10 * * * * root
/usr/lib64/sa/sa1 1 1 #每10分钟执行
# 0 * * * * root /usr/lib64/sa/sa1
600 6 &
# Generate a daily summary of
process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2
-A #每天23:53执行
III
crontab用户级
-u <user> |
指定用户 |
–e |
修改用户定时任务文件,如果文件不存在会自动创建。 |
–l |
显示用户定时任务文件。 |
-r |
删除用户定时任务文件。 |
-ir |
删除用户定时任务文件前提醒用户。 |
/var/spool/cron/$USER
这个是用户级的,/etc/crontab是系统级的。
[ctos@cos7 ~]$ crontab -e
crontab: installing new crontab
[ctos@cos7 ~]$ crontab -l
*/2 * * * *
date>>~/abc.txt
[ctos@cos7 ~]$ ls
[ctos@cos7 ~]$ date
2018年
01月 25日 星期四 14:47:54 CST
[ctos@cos7 ~]$ su
密码:
[root@cos7 ctos]#
cat /var/spool/cron/ctos
*/2 * * * * date>>~/abc.txt
[root@cos7 ctos]# exit
exit
[ctos@cos7 ~]$ ls
abc.txt
[ctos@cos7 ~]$ cat abc.txt
2018年
01月 25日 星期四 14:48:01 CST
第九节
系统日志/var/log
/var/log/message |
系统启动后的信息和错误日志 |
/var/log/secure |
与安全相关的日志信息 |
/var/log/maillog |
与邮件相关的日志信息 |
/var/log/cron |
与定时任务相关的日志信息 |
/var/log/boot.log |
守护进程启动和停止相关的日志消息 |
/var/log/wtmp |
该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件, 限last读取。 |
[root@cos7 ctos]#
yum list installed sysstat
已加载插件:fastestmirror,
langpacks
Loading mirror speeds from cached
hostfile
已安装的软件包
sysstat.x86_64 10.1.5-12.el7 @anaconda
最常用的sar工具使用方法为:.
•sar -u 10 8 --检查cpu负载,每10秒采样一次,共采样8次
•sar -d 5 2 --查看磁盘块活动,每5秒采样一次,共采样2次.
•sar -b --查看io传输速率
•sar -q --查看队列长度和load
averages,队列越小越好
•sar -B --查看分页信息
•sar -W --查看交换信息
•sar -r --查看空闲内存与空闲交换信息
•sar-n DEV
查看当前服务器的网络流量信息
•sar-r -f /var/log/sa/sa??
查看历史资源使用 -f
第十节
uptime理解系统负荷
http://www.ruanyifeng.com/blog/2011/07/linux_load_average_explained.html
uptime输出三类信息:系统已运行时间,在线用户,系统负载(1分钟,5分钟,15分钟)
显示"load average"(top与w都有此信息),它的意思是"系统的平均负荷",里面有三个数字,我们可以从中判断系统负荷是大还是小。它们的意思分别是1分钟、5分钟、15分钟内系统的平均负荷,当CPU完全空闲的时候,平均负荷为0;当CPU工作量饱和的时候,平均负荷为1。
什么时候能看出系统负荷比较重呢?等于1的时候,还是等于0.5或等于1.5的时候?如果1分钟、5分钟、15分钟三个值不一样,怎么办?
I
一个类比
首先,假设最简单的情况,你的电脑只有一个CPU,所有的运算都必须由这个CPU来完成。
那么,我们不妨把这个CPU想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过。(很显然,这座桥只能单向通行。)
系统负荷为0,意味着大桥上一辆车也没有。
系统负荷为0.5,意味着大桥一半的路段有车。
系统负荷为1.0,意味着大桥的所有路段都有车,也就是说大桥已经"满"了。但是必须注意的是,直到此时大桥还是能顺畅通行的。
系统负荷为1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的70%。以此类推,系统负荷2.0,意味着等待上桥的车辆与桥面的车辆一样多;系统负荷3.0,意味着等待上桥的车辆是桥面车辆的2倍。总之,当系统负荷大于1,后面的车辆就必须等待了;系统负荷越大,过桥就必须等得越久。
CPU的系统负荷,基本上等同于上面的类比。大桥的通行能力,就是CPU的最大工作量;桥梁上的车辆,就是一个个等待CPU处理的进程(process)。
如果CPU每分钟最多处理100个进程,那么系统负荷0.2,意味着CPU在这1分钟里只处理20个进程;系统负荷1.0,意味着CPU在这1分钟里正好处理100个进程;系统负荷1.7,意味着除了CPU正在处理的100个进程以外,还有70个进程正排队等着CPU处理。
为了电脑顺畅运行,系统负荷最好不要超过1.0,这样就没有进程需要等待了,所有进程都能第一时间得到处理。很显然,1.0是一个关键值,超过这个值,系统就不在最佳状态了,你要动手干预了。
II
经验法则
当系统负荷持续大于0.7,你必须开始调查了,问题出在哪里,防止情况恶化。
当系统负荷持续大于1.0,你必须动手寻找解决办法,把这个值降下来。
当系统负荷达到5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了。你不应该让系统达到这个值。
III
多路多核CPU
上面,我们假设你的电脑只有1个CPU。如果你的电脑装了2个CPU,会发生什么情况呢?
2个CPU,意味着电脑的处理能力翻了一倍,能够同时处理的进程数量也翻了一倍。
还是用大桥来类比,两个CPU就意味着大桥有两根车道了,通车能力翻倍了。
所以,2个CPU表明系统负荷可以达到2.0,此时每个CPU都达到100%的工作量。推广开来,n个CPU的电脑,可接受的系统负荷最大为n.0。
在系统负荷方面,多核CPU与多CPU效果类似,所以考虑系统负荷的时候,必须考虑这台电脑有几个CPU、每个CPU有几个核心。然后,把系统负荷除以总的核心数,只要每个核心的负荷不超过1.0,就表明电脑正常运行。
查看CPU的总核心数:grep -c 'model name' /proc/cpuinfo
IV
最佳观察时长
三个平均值:1分钟系统负荷、5分钟系统负荷,15分钟系统负荷,应该参考哪个值?
如果只有1分钟的系统负荷大于1.0,其他两个时间段都小于1.0,这表明只是暂时现象,问题不大。
如果15分钟内,平均系统负荷大于1.0(调整CPU核心数之后),表明问题持续存在,不是暂时现象。
所以,你应该主要观察"15分钟系统负荷",将它作为电脑正常运行的指标。
CentOS 7.4 初次手记:第四章 CentOS安全了解的更多相关文章
- CentOS 7.4 初次手记:第二章 CentOS安装步骤
第二章 CentOS安装步骤... 18 第一节 下载... 18 第二节 分区参考... 18 第三节 安装... 19 I Step 1:引导... 19 II Step 2:配置... 20 I ...
- CentOS 7.4 初次手记:第一章 Linux守护进程(daemon)
第一节 init & sysvinit 6 I sysvinit 运行顺序... 6 II Sysvinit和系统关闭... 7 III Sysvinit 的小结... 7 IV 运行级别.. ...
- CentOS 7.4 初次手记:第三章 CentOS基础了解
第三章 CentOS基础了解... 36 第一节 语言编码.终端... 36 I 查看语言编码... 36 II Tty?.pts/?. 36 第二节 bash/sh command. 38 I 查找 ...
- 第十四章、Linux 账号管理与 ACL 权限配置
1. Linux 的账号与群组 1.1 使用者标识符: UID 与 GID 1.2 使用者账号:/etc/passwd 文件结构, /etc/shadow 文件结构 1.3 关于群组: /etc/gr ...
- [Effective Java]第四章 类和接口
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 第四章 vim 可视模式
第四章 vim 可视模式 vim的可视模式允许我们选中一块文本区域并进行操作 3种不同的可视模式 分为 操作字符文本 行文本 块文本 .命令用来重复执行可视模式中的命令 只有在操作面 ...
- 鸟哥的linux私房菜——第四章学习
******************第四章学习****************** [热键] 1.Tab键:命令补全:文件补全: 2.Ctrl+c:中断目前指令: 3.Ctrl+d:离开当前文本界面: ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 《Linux内核设计与实现》读书笔记 第四章 进程调度
第四章进程调度 进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统.调度程序是多任务操作系统的基础.通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的 ...
随机推荐
- java小程序-----用if for写会员登陆和商品列表
一.父类 public class Father{ //父类 protected static int stock1 = 10; //库存 protected static int stock2 = ...
- 从android设备中提取内核
背景 CVE-2013-2597 是高通 msm_acdb 设备驱动的一个 copy_from_user 栈溢出,利用要用到ROP.f101的漏洞利用介绍中,用到几处Gadgets,显然要根据acdb ...
- 豆瓣电影 Top 250
import refrom urllib.request import urlopen def getPage(url): # 获取网页的字符串 response = urlopen(url) ret ...
- MySQL篇,第二章:数据库知识2
MySQL 数据库 2 名词介绍 1.DB(Database) DB就是数据库,存储数据的仓库 2.DBMS(Database Management System) 数据库管理系统 管理数据库的软件, ...
- directive例子1
(function() { 'use strict'; angular.module('app.widgets') .directive('confirm', ['confirm2', 'toastr ...
- Js中的判空
1.JS 中判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null var test= undefined; if (typeof(test) == u ...
- C语言--第六周作业评分和总结(5班)
作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1250 一.评分要求 要求1 完成PTA第六周所有题,若存在抄袭现象,倒扣此题 ...
- day 52 js学习 DOM 和BOM
前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...
- skipper lua 脚本支持
skipper 对于lua 脚本的支持是通过gopher-lua,支持基本上大部分的lua特性 说明:项目使用docker-compose 运行 环境准备 docker-compose 文件 vers ...
- 10 Rules of Highly Successful Project Management
I commited the information below to report PDU of PMI. ^_^. In this paper, the author introduces his ...