当前位置: 首页 > article >正文

Linux系统层面问题总结

一、Linux系统层面

  系统故障排查关注

  • 应用日志查询: tailf /var/log/messages
  • 登录日志查询: tailf /var/log/secure
  • 系统日志查询: dmesg
  • 容易攻击点查询 :/var/tmp /tmp
  • 计划任务查询(经常攻击对象): crontab -l 、 /etc/crontab

  一)以普通用户运行开机自启程序

  1、系统环境

  系统:CentOS

  普通用户:redis

  注意:CentOS7.x与之前的版本管理命令不同

  2、解决方案

  Linux在启动时,会自动执行/etc/rc.d目录下的初始化程序,因此我们可以把启动任务放到该目录下,有两种办法:

    1、方案一:将运行脚本放入/etc/rc.d/rc.local

  1、因为其中的rc.local是在完成所有初始化之后执行,因此我们可以把启动脚本写到里面

  2、用root账号登陆Linux,vi /etc/rc.d/rc.local编辑文件,在最后加入两行需要执行的脚本程序:

cd /home/testops
su - reedis -c "whoami"

  补充知识点:su命令

  su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份

    2、方案二:写系统自启管理脚本

  1、/etc/init.d目录下都为可执行程序,他们其实是服务脚本,按照一定格式编写,Linux 在启动时会自动执行,类似Windows下的服务

  2、用root帐号登录,vi /etc/rc.d/init.d/redis,追加如下内容:

#!/bin/bash
#chkconfig:2345 80 05 --指定在哪几个级别执行,0一般指关机,
6指的是重启,其他为正常启动。80为启动的优先级,05为关闭的优先机
#description:redis service
RETVAL=0
start(){ --启动服务的入口函数
  echo -n "redis serive ..."
  cd /home/redis
  su - redis -c "/usr/bin/redis-server /etc/redis.conf"
}

stop(){ --关闭服务的入口函数
  /usr/libexec/redis-shutdown
}

case $1 in --使用case,可以进行交互式操作
start)
  start
  ;;
stop)
  stop
  ;;
esac
exit $RETVAL

  3、运行chmod +r /etc/rc.d/init.d/redis,使之可直接执行

  4、运行chkconfig --add redis,把该服务添加到配置当中

  5、运行chkconfig --list redis,可以查看该服务进程的状态

  CentOS 7.x新加方法:添加自启服务

  1、/usr/lib/systemd/system目录下都为可执行程序,他们其实是服务脚本,按照一定格式编写,Linux 在启动时会自动执行,类似Windows下的服务

  2、用root帐号登录,vim /etc/systemd/system/redis.service,追加如下内容:(系统自带的在/usr/lib/systemd/system目录下,自己创建可以在/etc/systemd/system目录下)

[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
ExecStart=/usr/bin/redis-server /etc/redis.conf --daemonize no
ExecStop=/usr/libexec/redis-shutdown
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

  3、systemctl start redis(启动测试,服务正常启动即可)

  4、systemctl enable redis(设置为开机自启)

  二)系统磁盘变成只读

  使用fsck修复文件系统错误:使用fsck修复文件系统错误-喵喵俠-ChinaUnix博客

  三)系统无法启动

  1、故障:系统相关磁盘空间已满,无法加载相应系统服务
    1、原因:空间不足,无法写入(var相应的分析满了)
    2、分析:启动系统时,会启动一些开机自启服务(会产生一些文件,会写入一些数据)
    3、解决:

  思路:进入单用户模式进行修复:查看因为什么文件导致空间满了,找到后分析文件是否有用:无用直接删除;有用则将其暂时移到其他位置,使服务器能正常启动,然后提出、并实施磁盘相应的处理方案

  步骤:

  1 如何进入单用户模式:https://blog.csdn.net/qq_34556414/article/details/78689225
    不让系统自动引导——在引导界面按e进入手动引导模式,选择引导的用户和内核继续按e进入新界面,在quiet行尾输入single,回车返回上一个界面按b进入单用户模式

  2 在单用户模式都能操作什么
    自启服务都不会启动,只会检查文件系统和mout相应的磁盘,空间不够也不会影响进入单用户模式
  2、故障现象:ROOT账号无法xshell远程连接,普通用户可以远程连接

  带[]的进程是系统的核心进程,必须使用root启动(若没有root账户,系统是无法正常启动的,因为有些操作是需要root账户进行授权的:Linux将root改名,系统也是无法启动的)

    1、分析:
  • 系统启动时,切换到debug模式查看,chown无法授权
  • 使用系统自有的普通用户登录,无法切换到root用户
  • 普通用户登录,查看本应root用户启动的进程是另外一个用户
    2、原因:有人因为想避免root账户被攻击,更改root的账号(考虑不周的想法)
    3、解决:更改root权限的用户名改回来:进入单用户模式,将root进行改名——直接更改/etc/passwd

  三)服务器远程连接问题

  1、现象:要连接上,又退出了连接步骤
    1、分析:
limit -a
查看ssh日志:/var/log/secure发现有pam_limits(ssh_session):could not set limit for 'nofile': Operation not permitted
相关的设置:/etc/security/limits.conf 和/etc/security/limits.d/90-nproc.conf 若两个文件都设置了,最终生效的是后者
    下面的值不能设置太大,会产生资源越界(系统日志会提示没有权限),会导致远程无法登陆;也不要设置太小,
open files                      (-n) 65535   文件描述符,打开最大的文件数:这个需要人根据服务器配置自行设置相应的值,系统不会自动设置一个合理的值(但是不能设置特别大,因为这样系统会无法识别)
max user processes              (-u) 63631   用户打开的最大进程数 :这个虽然可以设置没有限制,但是硬件会有相应的限制,系统会根据硬件性能设置一个值
    2、原因:/etc/security/limits.d/90-nproc.conf 或/etc/security/limits.conf 里面的open files设置的太大,但无法识别最大值时,他会走默认设置
    3、解决:将open files值调小一些
    4、总结:
  • open files这个值阶梯性调整,不要一下设置太大
  • open files6553600这个值足够了,若还有问题,有可能是受到攻击
  • java需要打开文件数会大
  • 线下多种情况设置完毕后,再去设置线上

  四)Linux系统sudo命令无效

  1、报错如下

  

  2、分析
  1. 此用户是否有拥有sudo权限,有的话进行下一步
  2. 有sudo权限的用户,测试是否sudo正常,不正常的话进行下一步
  3. sudo.conf和sudoers这两个文件是否有问题
    1. 语法问题
    2. 文件的权限、所属主、组问题
   3、原因

  产生问题原因:更改sudo文件的所属主,如下截图

  

  4、解决

  解决办法:将文件所属主改回去,立马好了

chown -R root sudo.conf sudoers

  

  验证

  


http://www.kler.cn/news/362130.html

相关文章:

  • 【Next.js 项目实战系列】05-删除 Issue
  • Shiro授权(Authorization)
  • 「AIGC」n8n AI Agent开源的工作流自动化工具
  • Redis简介及其在NoSQL应用开发中的优化策略
  • 数学学习——积化和差、和差化积
  • python-docx -- 对比两个表格的行数据
  • 我与Linux的爱恋:自主Shell
  • 【Linux系列】查询nginx相关的进程
  • 【Leecode】Leecode刷题之路第29天之两数相除
  • Vue快速创建工程+Element Plus
  • 【Flutter】基础组件:文本及样式
  • 【Docker】Elasticsearch Docker 容器数据迁移
  • Linux之时间服务器
  • MacOS Sublime Text 解决中乱码
  • VBA技术资料MF215:添加一个指定名称的模块
  • 8. 数据结构—交换排序
  • 【代码随想录Day50】图论Part02
  • java语言知识点(1)
  • Selenium:设置元素等待、上传文件、下载文件
  • 数字化转型中的IT价值:如何让管理层相信“钱花得值”?
  • 如何判断一个数是几位数与这个数是否为回文数并打印出其逆序数
  • 为何大家都对谷歌老号白包趋之若鹜
  • 从零开始学PHP之helloworld
  • 计算套餐续订率:梧桐数据库与`oracle`实现`SQL`的细微差异分析
  • C++运算出现整型溢出
  • Opensearch集群部署【docker、服务器、Helm多种部署方式】