# Centos问题

# 网络问题

# 修改域服务器

# 方法一

/etc/resolv.conf是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。/etc/resolv.conf保存DNS是暂时的,当重新启动network时,/etc/resolv.conf恢复到了初始状态,要想更改,可尝试下边的方法:

PEERDNS=no
DNS1=192.168.1.1
DNS2=192.168.1.2
1
2
3

# 方法二

centos中有一套专门的工具nmcli来管理网络问题,参考文档有:

使用nmcli来改变域名:

  1. nmcli connection show:查看当前网络。
  2. nmcli con mod eth0 ipv4.dns "114.114.114.114 8.8.8.8"
  3. nmcli con up eth0

# 防火墙常见操作

参考资料:

下面是常用操作:

  1. firewall常用操作

    # 查看防火墙状态
    firewall-cmd --state
    # 永久开放23端口  
    firewall-cmd --add-port=23/tcp --permanent  
    # 永久关闭23端口  
    firewall-cmd --zone=public --remove-port=23/tcp --permanent 
    # 重启防火墙
    firewall-cmd --reload  
    # 查询某个端口是否开启  
    firewall-cmd --query-port=23/tcp 
    # 查看当前激活的zone  
    firewall-cmd --get-active-zones 
    # 查看zone所有的信息
    firewall-cmd  --zone=trusted --list-all
    # 查看所有的zones
    firewall-cmd --list-all-zones
    # 查看所有端口  
    firewall-cmd --zone=public --list-ports 
    firewall-cmd --list-ports 
    # 查询所有接口
    firewall-cmd --permanent --zone=trusted --change-interface=docker0
    # 增加删除zone的接口
    firewall-cmd --zone=public --add-interface eth0 --permanent
    firewall-cmd --zone=public --remove-interface eth0 --permanent
    # 将指定接口添加到trusted域
    firewall-cmd --permanent --zone=trusted --change-interface=docker0
    # 检查是否有配置错误
    firewall-cmd --check-config
    # 查询指定的端口是否开放
    firewall-cmd --query-port=3306/tcp
    # 禁用firewalld
    systemctl stop firewalld
    systemctl disable firewalld
    systemctl mask --now firewalld
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
  2. iptables常用操作

    配置文件位置:/etc/sysconfig/iptables
    iptables -I INPUT -p tcp --dport xxx -j ACCEPT # 开启某个端口

# Yum问题

# fastestmirror

# 出现场景

yum命令出现Loaded plugins: fastestmirror。

# 解决办法

fastestmirror是yum的一个加速插件,这里是插件提示信息是插件不能用了。需要把它关闭:

  1. 在/etc/yum/pluginconf.d/fastestmirror.conf配置文件中,将enabled=1改为enabled=0。
  2. 在/etc/yum.conf配置文件中,将plugins=1改为plugins=0。
  3. 重启系统。

# 更改镜像源

切换为华为云的源:

cd /etc/yum.repos.d/ # 进入 /yum.repos.d 目录
mkdir bak # 新建一个bak文件夹,用来备份
mv *.repo bak/ # 将当前文件夹所有以.repo结尾的文件全部移入备份文件夹

wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
# 下载华为云的yum源配置文件到 /yum.repos.d 目录

yum clean all # 清空缓存
yum makecache # 生成缓存

yum repolist # 查看当前使用的镜像源,若操作无误,则已经更换到华为云
1
2
3
4
5
6
7
8
9
10
11

# 仓库管理

查看仓库内容:

yum repolist all # 显示所有资源库
yum repolist enabled # 显示所有已启动的资源库
yum repolist disabled # 显示所有被禁用的资源库
yum repolist all | grep mysql
1
2
3
4

仓库操作:

yum-config-manager --add-repo repository_url # 添加仓库
yum-config-manager --disable itemName # 禁用仓库
yum-config-manager --enable itemName # 激活仓库
1
2
3

如果删除仓库则再/etc/yum.repos.d/下手动删除对应repo文件

# 离线安装

有时候项目的服务器是不能直接连网,这时要装软件就好麻烦的,需要在一台centos上把软件装好,然后把缓存包拷贝到目标服务器安装,需要使用下面步骤:

下面是在本地能联网的服务器上操作:

  1. 安装yumdownloader来下载RPMs:

    yum install yum-utils -y

  2. 下载createrepo:

    yum install --downloadonly --downloaddir=/home/createrepo createrepo

  3. 下载其他第三方软件,这里以docker举例:

    yum install --downloadonly --downloaddir=/home/docker docker-ce docker-ce-cli containerd.io

  4. 将上面下载的缓存打包:

    tar -zcvf docker.tar.gz /home/docker tar -zcvf createrepo.tar.gz /home/createrepo

下面是在离线目标服务器上安装:

  1. 解压缓存包

    tar -xvf docker.tar.gz tar -xvf createrepo.tar.gz

  2. 安装createrepo

    rpm -ivh *.rpm

  3. 使用createrepo来使用之前的缓存来创建包信息:

    sudo createrepo /home/rootuser/docker

  4. 配置本地yum源,可以新建一个local.repo。

    [local]
    name=local
    baseurl=file:///home/rootuser/docker # 软件包所在的目录
    enabled=1
    gpgcheck=0
    
    # gpgcheck=1
    # gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # 本地yum源密钥
    
    1
    2
    3
    4
    5
    6
    7
    8
  5. 安装docker。如果安装过程中出现is not signed提示信息,需要在yum后面加上--nogpgcheck参数。

    sudo yum install docker-ce docker-ce-cli containerd.io

注意yum也有自身的缓存(/etc/yum.conf):

  1. cachedir为缓存路径,默认值是/var/cache/yum/$basearch/$releasever
  2. keepcache=1,默认值为0,意味安装完成后删除包。

# 常见操作

# sudo命令找不到

解决在sudo下命令找不到的情况:

  1. 编辑文件/etc/sudoers,将Defaults env_reset改为Defaults !env_reset。
  2. 编辑用户根目录下的配置文件.bashrc,并追加

    alias sudo='sudo env PATH=$PATH'

  3. source ~/.bashrc。

# 合并文件夹

cp -frap source/* target/
1

# SSH仅限IP登陆

这个场景中SSH仅限于几个IP登陆,需要修改/etc/ssh/sshd_config

Port 2222                    #默认为22端口,这里修改为2222端口
PubkeyAuthentication yes     #开启公钥认证
AllowUsers sshClient@ip  #设置允许(客户机IP地址)的sshClient用户登录
DenyUsers all                #禁止所有其他用户登录
1
2
3
4

# pam_faillock锁定用户

参考文档:

当一个用户输入密码超过一定次数就锁定几分钟。在centos中修改:

  • /etc/pam.d/system-auth
  • /etc/pam.d/password-auth

在debian中修改:

  • /etc/pam.d/common-auth
  • /etc/pam.d/common-account

以debian为例:

在common-account的末尾添加:

account required pam_faillock.so

在common-auth中添加:

auth    required pam_faillock.so preauth audit silent deny=2 even_deny_root unlock_time=300
auth    [success=1 default=ignore]      pam_unix.so nullok # 第二行是原有的,不用改。
auth    [default=die] pam_faillock.so authfail audit deny=2 even_deny_root  unlock_time=300
auth    sufficient pam_faillock.so authsucc audit deny=2 even_deny_root unlock_time=300
1
2
3
4

系统中查看正在锁定的用户:

faillock

系统中重置已锁定的用户:

faillock --user username --reset

# fail2ban锁定用户

我们去访问一个服务器的时候,一定会留下访问日志。fail2ban就是一个防止暴力破解的一个软件,能够监控系统日志,匹配日志中的错误信息(使用正则表达式),执行相应的屏蔽动作(支持多种,一般为调用 iptables)简单来说如果短时间内一个ip来访问我们的服务器,如果密码失败次数多我们可以来限制他,让这个ip过一段时间再来访问。

fail2ban随带一组预先定义的“jail”(暂译“监狱”),这些jail使用针对特定应用程序的日志过滤器来检测常见攻击。你还可以编写自定义的jail,阻止针对任意应用程序的任何特定的攻击。

以gitea为例,我们来说明如何使用它:

编写filter:

[Definition]
failregex =  .*(Failed authentication attempt|invalid credentials|Attempted access of unknown user).* from <HOST>
ignoreregex =
1
2
3

编写jail规则:

[gitea]
enabled = true
filter = gitea
logpath = logpath
maxretry = 3
findtime = 3600
bantime = 300
action = iptables-allports[chain="FORWARD"]
1
2
3
4
5
6
7
8

如此fail2ban就能起作用,下面是常用命令:

  • 查看监狱列表:

    fail2ban-client status

  • 查看某个具体监狱:

    fail2ban-client status servicename

  • 让某个IP解禁:

    fail2ban-client set servicename unbanip 192.168.1.1

# 系统操作

  1. 查看Centos版本命令:

    cat /etc/centos-release

  2. 查看使用某个端口的进程:

    netstat -anp | grep 端口号。

  3. 搜索相关的进程:

    1. ps -ef | grep sshd #根据进程名搜索
    2. ps -ef | grep 522 #根据进程ID查询
  4. 根据进程id杀死相应的进程:

    sudo kill -9 522

  5. 修改时区:

    timedatectl set-timezone Asia/Shanghai

# RPM操作

  1. Centos查看是否安装某个包:

    rpm –qa | grep telnet-server

    说明:

    1. –a选项是查询所有已经安装的软件包。
    2. -q是查询一个包是否安装。
    3. 已经安装的rpm包不会显示后缀.rpm ,而未安装的包则显示后缀.rpm。
  2. 查看一个包的详细信息:

    rpm -qi 包名

  3. 查看一个包安装了哪些文件:

    rpm -ql 包名

  4. 查看一个文件是由哪个包安装的:

    rpm -qf 文件名

    查看vim是由哪个rpm包安装来的:

    rpm -qf which vim