Linux
Jackie

Linux

文章:http://dwz.date/UDf


Linux目录划分

image

  • /bin:binary缩写,此目录存放着最经常使用的命令
  • /boot:存放启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  • /dev:device的缩写,存放Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的
  • /etc:存放所有的系统管理所需要的配置文件和子目录
  • /home:用户主目录,Linux中每个用户都有一个自己的目录,一般以用户的账号命名
  • /lib:存放系统最基本的动态连接共享库,作用类似于Windows里的dll文件
  • /lost+found:一般情况为空,当系统非法关机后这里就存放了一些文件
  • /media:Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后Linux会把识别的设备挂载到这个目录下
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可将光驱挂载在/mnt/上,然后进入该目录就可以看到光驱里的内容了
  • /opt:给主机额外安装软件所摆放的目录。安装一个Oracle数据库就可以放到这个目录下,默认为空
  • /proc:虚拟目录,是系统内存的映射,可通过直接访问这个目录获取系统信息
  • /root:为系统管理员,也称作超级权限者的用户主目录
  • /sbin:s是super user的意思,这里存放的是系统管理员使用的系统管理程序
  • /srv:存放一些服务启动之后需要提取的数据
  • /sys:这是Linux2.6内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个文件系统sysfs
  • /tmp:存放一些临时文件
  • /usr:非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录
  • /usr/bin:系统用户使用的应用程序
  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序
  • /usr/src:内核源代码默认的放置目录
  • /var:存放着在不断扩充着的东西,我们习惯讲那些经常被修改的目录放在这个目录下。包括各种日志文件
  • /run:一个临时文件系统,存储系统启动以来的信息,当系统重启时,这个目录下的文件应该被删掉或清除
  • /www:存放服务器网站相关的资源、环境、网站的项目

文件属性

基本属性

image

第0位确定文件类型:

  • [ d ]:目录
  • [ - ]:文件
  • [ l ]:链接文档(link file)
  • [ b ]:装置文件里面的可供储存的接口设备(可随机存取装置)
  • [ c ]:装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)

后为相关权限:

[ r ]:可读(read)、[ w ]:可写(write)、[ x ]:可执行(execute);若无权限则会出现[ - ]

dr-xr-xr-x. 5 root root 4096 5月 16 18:15 boot
  • 数字为文件个数
  • 第一个root为属主
  • 第二个root为属组

修改属性

  • chgrp:更改文件属组
chgrp -R 属主名 文件名
  • chown:更改文件属主,也可同时更改文件属组
chown -R 属主名 文件名
chown -R 属主名:属组名 文件名
  • chmod:更改文件九个属性
chmod 数字 文件或目录名

数字代表权限

r:4 w:2 x:1

常用基本命令

  • sudo su:切换到管理员

  • cd:切换目录

    • ~:切换到home目录
    • -:切换到上次访问的目录
  • ls:列出目录

    • -a:全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来
    • -l :长数据串列出,包含文件的属性与权限等等数据;
  • pwd:显示目前所在的目录

    Print Working Directory 的缩写,也就是显示目前所在目录的命令

    • -p:显示出确实的路径,而非连接(link)路径
  • mkdir:创建新目录

    • -m:配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色
    • -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
  • rmdir:删除空的目录

    • -p:连同上一级空的目录也一起删除
  • cp:复制文件或目录

    cp 原来的地方 新的地方

    • -a:相当于-pdr

    • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)

    • -d:若来源裆为连结档的属性(link file),则复制连结档属性而非文件本身

    • -r:递归持续复制,用于目录的复制行为

    • -f:强制的意思,若目标文件已存在且无法开启,则移除后再尝试一次

    • -i:若目标档(destination)已存在时,在覆盖时会先询问动作的进行

    • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身

    • -s:复制成为符号连结档(symbolic link),亦即捷径文件

    • -u:若destination比source旧才升级destination

  • rm:移除文件或目录

    • -f:忽略不存在的文件,不会出现警告,强制删除
    • -r:递归删除目录
    • -i:互动模式,删除前询问是否删除
  • mv:移动文件与目录,或修改名称

    • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
    • -i :若目标文件(destination)已经存在时,就会询问是否覆盖
    • -u :若目标文件已经存在,且source比较新,才会升级(update)
# 开启防火墙端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
# 查看所有开启的端口(若为阿里云还需配置安全组规则)
firewall-cmd --list-ports
  • firewall-cmd:防火墙相关

    • –zone:作用域
    • –add-port=80/tcp:添加端口,格式为:端口/通讯协议
    • –permanent:永久生效,无此参数重启后失效
  • netstat -an:查看当前系统端口

  • netstat -an|grep :指定端口(搜索指定端口)

  • su - 用户名:切换用户

  • man:列出完整的命令语法、各选项意义及相关命令

    • -w:输出手册物理位置

    • 编号规则

      man 1 ls
      • 普通命令为1
      • 函数为2
      • 库文件为3
      • 设备为4
      • 配置文件为5
      • 游戏为6
      • 宏文件为7
      • 系统命令为8
      • 内核程序为9
      • TK指令为10
  • tee:读取标准输入的数据,并将其内容输出成文件

    • -a:附加到既有文件的后面而非覆盖它
    • -i:忽略中断信号

文件内容查看

  • cat:正序显示文件内容

    • -A:相当于-vET的整合选项,可列出一些特殊字符而不是空白

    • -b:列出行号,仅针对非空白行做行号显示,空白行不标行号

    • -E:将结尾的断行字节$显示出来

    • -n:列印出行号,连同空白行也会有行号,与-b的选项不同

    • -T:将[tab]按键以^I显示出来

    • -v:列出一些看不出来的特殊字符

  • tac:倒序显示文件内容

  • nl:显示行号

    • -b:指定行号指定的方式,主要有两种:
      • -b a:表示不论是否为空行,也同样列出行号(类似cat -n)
      • -b t:如果有空行,空的那一行不要列出行号(默认值)
    • -n:列出行号表示的方法,主要有三种:
      • -n ln:行号在荧幕的最左方显示
      • -n rn:行号在自己栏位的最右方显示,且不加0
      • -n rz:行号在自己栏位的最右方显示,且加0
    • -w:行号栏位的占用的位数
  • more:一页一页翻动

    有以下按键:

    • 空格:向下翻一页
    • enter:向下翻一行
    • /字符串:向下搜寻『字符串』这个关键字
    • :f:立刻显示出档名以及目前显示的行数
    • q:立刻离开more,不再显示该文件内容
    • b或Ctrl b:代表往回翻页,不过这动作只对文件有用,对管线无用
  • less

    基本同上,多向上的功能

    • ?字符串:向上搜寻『字符串』这个关键字
    • n:重复前一个搜寻(与/或?有关)
    • N:反向的重复前一个搜寻(与/或?有关)
  • head:取文件前几行

head -n 数字 文件

-n后的数字代表显示几行,默认10行

  • tail:取文件后几行

同上

查找命令

  • grep
ps -ef | grep sshd                  #查找指定ssh服务进程
ps -ef | grep sshd | grep -v grep #查找指定服务进程,排除gerp本身
ps -ef | grep sshd -c #查找指定进程个数
  • find

find命令在目录结构中搜索文件,并对搜索结果执行指定的操作。 find 默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

find . -name "*.log" -ls       #在当前目录查找以.log结尾的文件,并显示详细信息。
find /root/ -perm 600 #查找/root/目录下权限为600的文件
find . -type f -name "*.log" #查找当目录,以.log结尾的普通文件
find . -type d | sort #查找当前所有目录并排序
find . -size +100M #查找当前目录大于100M的文件
  • locate

locate 让使用者可以很快速的搜寻某个路径。默认每天自动更新一次,所以使用locate 命令查不到最新变动过的文件。为了避免这种情况,我们在使用locate查找文件之前可以先使用updatedb命令,手动更新数据库。

updatedb
locate /etc/sh #搜索etc目录下所有以sh开头的文件
locate pwd #查找和pwd相关的所有文件
  • whereis

whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。

whereis ls    #将和ls文件相关的文件都查找出来
  • which

which命令的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

which pwd    #查找pwd命令所在路径
which java #查找path中java的路径

链接

  • 硬链接(Hard Link)

image

A–B,假设B是A的硬链接,那么他们两个指向了同一个文件,允许一个文件拥有多个路径,用户可通过这种机制建立硬链接到一些重要文件上,防止误删

旧文件和新文件都将指向相同的索引节点号

  • 软链接(Soft Link)

image

类似Windows下的快捷方式,删除源文件则快捷方式也无法访问

新文件的节点号将指向旧文件

硬链接相当于镜像,软链接相当于快捷方式

  • 符号链接(Symbolic Link)

image

在某些Unix/Linux系统中,符号和软链接都被视为相同的。但是实际的差异是,新的文件和旧文件将指向一个新的Inode号码,这将完全取决于实施


touch命令创建文件

echo输入字符串

echo "内容" >>file1

创建链接 ln命令

ln 原文件名 新文件名
  • -s:创建一个软链接(符号链接)

举例

  • 创建硬链接

创建123.txt

[root@ecs2 test]# touch 123.txt
[root@ecs2 test]# cat > 123.txt
Welcome to this World!
^C
[root@ecs2 test]# cat 123.txt
Welcome to this World!

创建123.txt和321.txt文件之间的硬链接

[root@ecs2 test]# ln 123.txt 321.txt
[root@ecs2 test]# ls -l
总用量 8
-rw-r--r-- 2 root root 23 11月 1 22:06 123.txt
-rw-r--r-- 2 root root 23 11月 1 22:06 321.txt

检查文件的索引节点号

[root@ecs2 test]# ls -li
总用量 8
2359298 -rw-r--r-- 2 root root 23 11月 1 22:06 123.txt
2359298 -rw-r--r-- 2 root root 23 11月 1 22:06 321.txt
[root@ecs2 test]# cat 321.txt
Welcome to this World!

再创建一个名为456.txt的文件,并使用ln命令将其链接到321.txt

[root@ecs2 test]# ln 321.txt 456.txt
[root@ecs2 test]# ls -li
总用量 12
2359298 -rw-r--r-- 3 root root 23 11月 1 22:06 123.txt
2359298 -rw-r--r-- 3 root root 23 11月 1 22:06 321.txt
2359298 -rw-r--r-- 3 root root 23 11月 1 22:06 456.txt
[root@ecs2 test]# cat 456.txt
Welcome to this World!
[root@ecs2 test]# ls -l
总用量 12
-rw-r--r-- 3 root root 23 11月 1 22:06 123.txt
-rw-r--r-- 3 root root 23 11月 1 22:06 321.txt
-rw-r--r-- 3 root root 23 11月 1 22:06 456.txt

当源文件或这些文件中的任何一个被删除时,它不会影响其他文件

[root@ecs2 test]# rm 123.txt
rm:是否删除普通文件 "123.txt"?y
[root@ecs2 test]# ls -l
总用量 8
-rw-r--r-- 2 root root 23 11月 1 22:06 321.txt
-rw-r--r-- 2 root root 23 11月 1 22:06 456.txt
[root@ecs2 test]# ls -li
总用量 8
2359298 -rw-r--r-- 2 root root 23 11月 1 22:06 321.txt
2359298 -rw-r--r-- 2 root root 23 11月 1 22:06 456.txt
[root@ecs2 test]# cat 456.txt
Welcome to this World!

不允许跨目录创建硬链接

[root@ecs2 /]# mkdir test1
[root@ecs2 /]# cd test1
[root@ecs2 /]# ln test1 test2
ln: "test1": 不允许将硬链接指向目录

对一个文件内容的任何更改都将影响并相应地更改其他文件的内容

[root@ecs2 test]# vim 321.txt
[root@ecs2 test]# ls -l
总用量 8
-rw-r--r-- 2 root root 47 11月 1 22:23 321.txt
-rw-r--r-- 2 root root 47 11月 1 22:23 456.txt
[root@ecs2 test]# cat 456.txt
Welcome to this World!
File have been modified
  • 创建软链接

创建src.txt

[root@ecs2 test]# touch src.txt
[root@ecs2 test]# cat > src.txt
Hello World
^C
[root@ecs2 test]# ls -l
总用量 4
-rw-r--r-- 1 root root 12 11月 1 22:27 src.txt

创建软链接

[root@ecs2 test]# ln -s src.txt dst.txt
[root@ecs2 test]# ls -l
总用量 4
lrwxrwxrwx 1 root root 7 11月 1 22:28 dst.txt -> src.txt
-rw-r--r-- 1 root root 12 11月 1 22:27 src.txt
[root@ecs2 test]# cat dst.txt
Hello World

在软链接的情况下,源文件和目标文件的inode号不同。在权限中出现字母l,表明这些是链接。dst.txt->src.txt将是现在建立的新链接

[root@ecs2 test]# ls -li
总用量 4
2490371 lrwxrwxrwx 1 root root 7 11月 1 22:28 dst.txt -> src.txt
2490370 -rw-r--r-- 1 root root 12 11月 1 22:27 src.txt

允许对目录进行符号创建

[root@ecs2 softtest]# mkdir abc
[root@ecs2 softtest]# ln -s abc def
[root@ecs2 softtest]# ls -l
总用量 4
drwxr-xr-x 2 root root 4096 11月 1 22:33 abc
lrwxrwxrwx 1 root root 3 11月 1 22:33 def -> abc

源和目标的Inode编号不同

[root@ecs2 softtest]# ls -li
总用量 4
2490373 drwxr-xr-x 2 root root 4096 11月 1 22:33 abc
2490374 lrwxrwxrwx 1 root root 3 11月 1 22:33 def -> abc

一旦创建了这些带有符号链接的目录,就可以在这些目录中创建文件。当在源目录中创建文件时,同样的情况也会反映在目标目录中

[root@ecs2 softtest]# cd abc
[root@ecs2 abc]# touch 123.txt
[root@ecs2 abc]# vim 123.txt
[root@ecs2 abc]# touch 456.txt
[root@ecs2 abc]# cd ..
[root@ecs2 softtest]# ls -l
总用量 4
drwxr-xr-x 2 root root 4096 11月 1 22:35 abc
lrwxrwxrwx 1 root root 3 11月 1 22:33 def -> abc
[root@ecs2 softtest]# cd def
[root@ecs2 def]# ls -l
总用量 4
-rw-r--r-- 1 root root 7 11月 1 22:35 123.txt
-rw-r--r-- 1 root root 0 11月 1 22:35 456.txt
[root@ecs2 def]# cat 123.txt
Hello!

使用rm和unlink命令删除软链接或符号链接

# rm <soft-link-filename>
# unlink <soft-link-filename>

删除软链接目录

# rm <soft-link-directory>
# unlink <soft-link-directory>

vim

image

filename存在则打开,不存在则新建

会出现路径不一致的问题!

  • 命令模式(Command mode)

    用户刚刚启动 vi/vim,便进入了命令模式

    常用命令:

    • i:切换到输入模式且在光标所在字符前开始插入
    • a:切换到输入模式且在光标所在字符后开始插入
    • o:切换到输入模式且在光标所在行的下面另起一新行插入
    • x 删除当前光标所在处的字符
    • : 切换到底线命令模式以在最底一行输入命令

    命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令

  • 输入模式(Insert mode)

    在命令模式下按下i就进入了输入模式

    • 字符按键以及Shift组合:输入字符
    • ENTER:回车键,换行
    • BACK SPACE:退格键,删除光标前一个字符
    • DEL:删除键,删除光标后一个字符
    • h(←)j(↓)k(↑)l(→):在文本中移动光标
      • w:往后移动一个单词
      • b:往前移动一个单词
      • e:移动到单词末尾
      • 0:移动到行首
      • $:移动到行末
      • ^:移动到行首第一个非空字符
      • Ctrl+u:向上翻页
      • Ctrl+d:向下翻页
      • G:跳转到末尾行
      • gg:跳转到首行
      • L:移到屏幕最下端一行
      • M:移到屏幕中间
      • H:移到屏幕首行
      • f[目标字符]:转到光标后的第一个目标字符(F是往前)
    • n:敲数字然后回车,光标往后移动n行
    • HOME/END:移动光标到行首/行尾
    • Page Up/Page Down:上/下翻页
    • Insert:切换光标为输入/替换模式,光标将变成竖线/下划线
    • ESC:退出输入模式,切换到命令模式
  • 底线命令模式(Last line mode)

    在命令模式下按下:(英文冒号)就进入了底线命令模式

    基本命令(已省略冒号)

    • w 保存文件
    • q 退出程序

    按ESC键可随时退出底线命令模式

常用命令

命令 含义
:set nu 设置行号
:wq 储存后离开(若为:wq!
则为强制储存后离开)
u 复原前一个动作
数字<space> 光标向右移动这一行的 n 个字符
数字<enter> 光标向下移动n行
/word 向光标之下寻找一个名称为 word 的字符串
n 重复前一个搜寻的动作
N 与 n 刚好相反,为『反向』进行前一个搜寻动作

其他vim按键

gcc

gcc是运行在Linux操作系统上的一个全功能的ANSI C兼容编译器

gcc [选项] 源文件 [目标文件]
gcc –o hello hello.c
  • -c:只编译,不链接成可执行文件。编译器只生成.o 后缀的目标文件,通常用于不包含主程序的子程序文件
  • -o file:确定输出文件的名称为file,该名称不能和源文件同名。若没有该选项,默认生成可执行文件a.out
  • -Idirname:指定头文件的查找目录,将dirname 指定的目录加入程序头文件目录列表中
  • -Ldirname:指定库文件的查找目录,将dirname 对应的目录加入程序函数档案库文件的目录列表中
  • -lname:在链接过程中,加载名为“libname.a”的函数库(位于系统预设的目录或由-L 选项确定的目录下)
  • -Wall:编译文件时发出所有警告信息
  • -w:编译文件时不发出任何警告信息

小技巧

  • 查看文件夹内存大小
du -sh *

服务器CPU持续飙高原因排查

  1. 检查CPU使用率

    top
  2. 检查系统负载

    uptime
  3. 检查系统资源

    CPU使用率过高可能是因为某个进程使用了大量的系统资源。可以通过使用pidstat命令查看各个进程的资源使用量。

    pidstat -p <pid> 1

    其中pid为进程ID。以上命令会每秒钟打印一次该进程的资源使用情况,包括CPU使用率、内存使用量等等。

  4. 检查进程

    如果找到了某个进程的资源使用率过高,则需要进一步检查该进程。可以使用strace命令来跟踪该进程的系统调用。

    strace -p <pid>

    以上命令会输出该进程所有的系统调用和返回值,可以帮助我们定位该进程的具体问题。

  5. 检查系统日志

    tail -f /var/log/messages /var/log/syslog

    以上命令可以实时输出这些文件的最新内容。

  6. 检查系统瓶颈

    如果以上方法都找不到问题,可以使用系统性能工具来检查系统的瓶颈。其中一种常见的性能工具是perf。可以使用perf top命令来查看系统上耗费CPU时间最多的函数。

    perf top

    以上命令会实时输出系统上相关函数的CPU使用情况。

配置Linux路由

image

Linux添加路由命令如下:

route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
  • add:添加一条路由规则
  • del:删除一条路由规则
  • -net:目的地址是一个网络
  • -host:目的地址是一个主机
  • target:目的网络或主机
  • netmask:目的地址的网络掩码
  • gw:路由数据包通过的网关
  • dev:为路由指定的网络接口
  1. 添加主机路由

令192.168.2.10主机ping通192.168.0.8主机,则需要经过路由器2,就要在192.168.2.10的主机上添加一条到192.168.0.8的路由

route add -host 192.168.0.8  gw 192.168.2.1 dev eth0

访问192.168.0.8的主机消息都从192.168.2.1端口转发

route命令查看添加的路由

root@linux:~# route
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.8 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0
192.168.2.0 * 255.255.255.0 U 0 0 0 eth0

其中

名称 解释
Destination 目标网络或目标主机。Destination为default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是10.139.128.1)
Gateway 网关地址,0.0.0.0 表示当前记录对应的Destination跟本机在同一个网段,通信时不需要经过网关(同一个局域网内2台主机通信不需要经过网关)
Genmask Destination字段的网络掩码,Destination是主机时需要设置为255.255.255.255,是默认路由时会设置为0.0.0.0
Flags U:Up表示有效
G:Gateway表示连接路由,若无这个字段表示直连目的地址
H:Host表示目标是具体主机,而不是网段
R:恢复动态路由产生的表项
D:由路由的后台程序动态地安装
M:由路由的后台程序修改
!:拒绝路由
Metric 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的(不在Linux内核中使用。)
Ref 路由项引用次数(不在Linux内核中使用。)
Use 此路由项被路由软件查找的次数
Iface 网卡名字,例如 eth0;要去往这个网段需要使用哪一个网络接口。也就是eth0这张网卡

则第一条路由信息即为访问主机192.168.0.8的信息都从192.168.2.1网关转发

删除路由

route del 192.168.0.8
  1. 添加网络路由

第一种添加主机路由的方式只能访问到一台目录主机,如果192.168.2.10要访问0网段的所有主机的话把0网段主机都添加一遍显然很麻烦,通过添加网络路由的方式,只要在192.168.0.10主机上添加一条0网段的网络路由即可

route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.2.1 dev eth0

这个目标是网络,所以需要设置子网掩码,用route命令查看一下添加的网络路由

root@linux:~# route
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 192.168.2.1 255.255.255.0 UG 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0
192.168.2.0 * 255.255.255.0 U 0 0 0 eth0

表示访问0网段的消息都从192.168.2.1网关转发

删除网络路由

route del -net 192.168.0.0/24 gw 192.168.2.1
  1. 添加默认路由

如果2网段主机想访问其他所以网段的网络,只需要添加默认路由即可

route add default gw 192.168.2.1 dev eth0
root@linux:~# route
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0
192.168.2.0 * 255.255.255.0 U 0 0 0 eth0

所有访问非2网段的信息都从192.168.2.1转发

删除默认路由

route del default

系统安全配置

共享账号检查

用户账号分配检查,避免共享账号存在

  • 配置要求
  1. 系统需按照实际用户分配账号
  2. 避免不同用户间共享账号,避免用户账号和服务器间通信使用的账号共享
  • 操作指南

cat /etc/passwd查看当前所有用户的情况

  • 检查方法

cat /etc/passwd查看当前所有用户的信息,与管理员确认是否有共享账号情况存在

  • 配置方法
useradd username  #创建账号
passwd username #设置密码

多余账户锁定策略

  • 配置要求

应锁定与设备运行、维护等工作无关的账号

  • 操作指南

cat /etc/password查看哪些账户的shell域中为nologin

  • 检查方法

人工检查:

cat /etc/password后查看多余账户的shell域为nologin为符合

BVS基线检查:

多余账户处于锁定状态为符合

  • 配置方法

修改/etc/password文件,将需要锁定的用户的shell域设为nologin或通过passwd –l username锁定账户

只有具备超级用户权限的使用者方可使用passwd –l username锁定用户,用passwd –d username解锁后原有密码失效,登录需输入新密码

一般情况下,需要锁定的用户:lp,nuucp,hpdb,www,demon

root账户远程登录限制

  • 配置要求
  1. 限制具备超级管理员权限的用户远程登录
  2. 远程执行管理员权限操作,应先以普通权限用户远程登录后,再切换到超级管理员权限账号后执行相应操作
  • 操作指南

使用root账户远程尝试登陆

  • 检查方法
  1. root远程登录不成功,提示“Not on system console”
  2. 普通用户可以登录成功,而且可以切换到root用户
  • 配置方法

修改/etc/ssh/sshd_config文件,将PermitRootLogin yes改为PermitRootLogin no,重启sshd服务

口令复杂度策略

  • 配置要求

口令长度至少12位,并包括数字、小写字母、大写字母和特殊符号

  • 操作指南

cat /etc/pam.d/system-auth,找到password模块接口的配置部分,找到类似如下的配置行:

password  requisite  /lib/security/$ISA/pam_cracklib.so minlen =6

参数说明

  1. retry=N,确定用户创建密码时允许重试的次数
  2. minlen=N,确定密码最小长度要求,事实上,在默认配置下,此参数代表密码最小长度为N-1
  3. dcredit=N,当N小于0时,代表新密码中数字字符数量不得少于(-N)个。例如,dcredit=-2代表密码中要至少包含两个数字字符
  4. ucredit=N,当N小于0时,代表则新密码中大写字符数量不得少于(-N)个
  5. lcredit=N,当N小于0时,代表则新密码中小写字符数量不得少于(-N)个
  6. ocredit=N,当N小于0时,代表则新密码中特殊字符数量不得少于(-N)个
  • 检查方法
cat /etc/pam.d/system-auth

口令的最小长度至少12位

口令最少应包含的字符数量

口令中最少应包含的字母字符数量

口令中最少应包含的非字母数字字符数量

  • 配置方法

vim /etc/pam.d/system-auth找到password模块接口的配置部分,按照配置要求内容修改对应属性

口令最长生存期策略

  • 配置要求

要求操作系统的账户口令的最长生存期不长于90天

  • 操作指南

cat /etc/login.defs文件中指定配置项

PASS_MAX_DAYS配置项决定密码最长使用期限

PASS_MIN_DAYS配置项决定密码最短使用期限

PASS_WARN_AGE配置项决定密码到期提醒时间

  • 检查方法

PASS_MAX_DAYS值小于等于90为符合

“对于采用静态口令认证技术的设备,账户口令的生存期不长于90天”项的当前值:表示当前的口令生存期长度

  • 配置方法

vim /etc/login.defs文件,修改PASS_MAX_DAYS值为小于等于90

系统关键目录权限控制

  • 配置要求

根据安全需要,配置某些关键目录其所需的最小权限

重点要求password配置文件、shadow文件、group文件权限

当前主流版本的Linux系统在默认情况下即对重要文件做了必要的权限设置,在日常管理和操作过程中应避免修改此类文件权限,除此以外,应定期对权限进行检查及复核,确保权限设置正确

  • 操作指南

查看关键目录的用户对应权限参考命令

ls -l /etc/passwd
ls -l /etc/shadow
ls -l /etc/group
  • 检查方法

与管理员确认已有权限为最小权限

  • 配置方法

通过chmod命令对目录的权限进行实际设置

/etc/passwd所有用户都可读,root用户可写-rw-r-r-

chmod 644 /etc/passwd

/etc/shadow只有root可读-r------

chmod 600 /etc/shadow

/etc/group必须所有用户都可读,root用户可写-rw-r-r-

chmod 644 /etc/group

如果是有写权限,就需移去组及其它用户对/etc的写权限(特殊情况除外)

chmod -R go-w,o-r /etc

用户缺省权限控制

  • 配置要求

控制用户缺省访问权限,当在创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限,防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制

  • 操作指南
  1. cat /etc/bashrc查看全局默认设置umask值
  2. 查看具体用户home目录下bash_profile,具体用户的umask
  • 检查方法
  1. 查看全局默认设置umask值为027或更小权限为符合(如有特许权限需求,可根据实际情况判断)
  2. 查看具体用户的umask,本着最小权限的原则
  • 配置方法

    • 单独针对用户设置

      修改用户home目录下的.bash_profile脚本文件,例如,可增加一条语句:umask 027;对于权限要求较严格的场合,建议设置为077

    • 全局默认设置

      默认通过全局脚本/etc/bashrc设置所有用户的默认umask值,修改脚本即可实现对用户默认umask值的全局性修改,通常建议将umask设置为027以上,对于权限要求较严格的场合,建议设置为077

安全日志完备性要求

  • 配置要求

系统应配置完备日志记录,记录对与系统相关的安全事件

  • 操作指南
  1. cat /etc/syslog.conf查看是否有对应配置
  2. cat /var/log/secure查看是否有对应配置
  • 检查方法
  1. cat /etc/syslog.conf确认有对应配置
  2. 查看/var/log/secure应记录有需要的设备相关的安全事件
  • 配置方法

vim /etc/syslog.conf修改配置文件

配置如下类似语句:

authpriv.*			/var/log/secure

定义为需要保存的设备相关安全事件

统一远程日志服务器配置

  • 配置要求

当前系统应配置远程日志功能,将需要重点关注的日志内容传输到日志服务器进行备份

  • 操作指南

cat /etc/syslog.conf查看是否有对应配置

  • 检查方法

配置了远程日志服务器为符合

  • 配置方法

vim /etc/syslog.conf修改配置文件加上:

*.* @192.168.0.1

可以将"."替换为实际需要的日志信息。比如:kern.* / mail.* 等等;可以将此处192.168.0.1替换为实际的IP或域名

services syslogd restart重新启动syslog服务

*.*和@之间为一个Tab

设置history时间戳

  • 配置要求

配置history时间戳,便于审计

  • 操作指南

cat /etc/bashrc查看是否有对应配置

  • 检查方法

如export HISTTIMEFORMAT="%F %T"配置为符合

  • 配置方法

在/etc/bashrc文件中增加如下行:

export HISTTIMEFORMAT="%F %T"

SSH登录配置

  • 配置要求

系统应配置使用SSH等加密协议进行远程登录维护,并安全配置SSHD的设置。不使用TELENT进行远程登录维护

  • 操作指南
  1. ps –elf|grep ssh查看SSH服务状态
  2. ps –elf|grep telnet查看telnet服务状态
  • 检查方法
  1. 不能使用telnet进行远程维护
  2. 应使用SSH进行远程维护
  3. SSH配置要符合如下要求
Protocol  2 #使用ssh2版本
X11Forwarding yes #允许窗口图形传输使用ssh加密
IgnoreRhosts yes #完全禁止SSHD使用.rhosts文件
RhostsAuthentication no #不设置使用基于rhosts的安全验证
RhostsRSAAuthentication no #不设置使用RSA算法的基于rhosts的安全验证
HostbasedAuthentication no #不允许基于主机白名单方式认证
PermitRootLogin no #不允许root登录
PermitEmptyPasswords no #不允许空密码
Banner /etc/motd #设置ssh登录时显示的banner
  • 配置方法

编辑sshd_config,添加相关设置,SSHD相关安全设置选项参考检查方法中的描述

ps –elf|grep ssh查看SSH服务状态

关闭不必要的系统服务

  • 配置要求

根据每台机器的不同角色,关闭不需要的系统服务。操作指南中的服务项提供参考,根据服务器的角色和应用情况对启动项进行修改,如无特殊需要,应关闭Sendmail、Telnet、Bind等服务

  • 操作指南

chkconfig --list查看哪些服务开放

  • 检查方法

与管理员确认无用服务已关闭

  • 配置方法

使用如下方式禁用不必要的服务

service <服务名> stop
chkconfig --level 35 off

Linux/Unix系统服务中,部分服务存在较高安全风险,应当禁用,包括:

  • “lpd”,此服务为行式打印机后台程序,用于假脱机打印工作的UNIX后台程序,此服务通常情况下不用,建议禁用
  • “telnet”,此服务采用明文传输数据,登陆信息容易被窃取,建议用ssh代替
  • “routed”,此服务为路由守候进程,使用动态RIP路由选择协议,建议禁用
  • “sendmail”,此服务为邮件服务守护进程,非邮件服务器应将其关闭
  • “Bluetooth”,此服务为蓝牙服务,如果不需要蓝牙服务时应关闭
  • “identd”,此服务为AUTH服务,在提供用户信息方面与finger类似,一般情况下该服务不是必须的,建议关闭
  • “xfs”,此服务为Linux中X Window的字体服务,关于该服务历史上出现过信息泄露和拒绝服务等漏洞,应以减少系统风险
  • R服务(“rlogin”、“rwho”、“rsh”、“rexec”),R服务设计上存在严重的安全缺陷,仅适用于封闭环境中信任主机之间便捷访问,其他场合下均必须禁用
  • 基于inetd/xinetd的服务(daytime、chargen、echo等),此类服务建议禁用

禁止Control-Alt-Delete键盘关闭命令

  • 配置要求

应禁止使用Control-Alt-Delete组合键重启服务器,防止误操作

  • 操作指南

cat /etc/inittab查看配置

  • 检查方法

/etc/inittab 中应有:“#ca::ctrlaltdel:/sbin/shutdown -t3 -r now”配置为符合

  • 配置方法

在“/etc/inittab” 文件中注释掉下面这行(使用#):ca::ctrlaltdel:/sbin/shutdown -t3 -r now

改为: #ca::ctrlaltdel:/sbin/shutdown -t3 -r now

为了使此改动生效,输入下面这个命令: # /sbin/init q

禁止ctl-alt-del使得在控制台直接按ctl-alt-del不能重新启动计算机

安装操作系统更新补丁

  • 配置要求

安装操作系统更新补丁,修复系统漏洞

  • 操作指南
  1. 查看当前系统补丁版本
  2. 检查官网当前系统版本是否发布安全更新
  • 检查方法

版本应保持为最新

  • 配置方法

访问系统官网下载补丁安装包,在打开的页面上,选择与自己使用相对应的系统后,点击连接进入补丁包下载列表界面,选择需要的补丁下载

以rpm安装包举例,将该安装包复制到目标系统上,使用命令rpm –ivh xxx.rpm进行安装,随后重新启动系统,检查所安装补丁的服务或应用程序是否运行正常,即完成该补丁的安装和升级工作

 评论
评论插件加载失败
正在加载评论插件