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.youkuaiyun.com/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

  

  验证

  

### 常用 Linux 系统命令汇总 以下是常见的 Linux 系统命令及其功能说明: #### 文件操作类 - **ls**: 列出目录中的文件和子目录。可以加上参数 `-l` 查看详细信息,包括权限、硬链接数量等[^1]。 - **cd**: 改变当前工作目录。 - **pwd**: 显示当前所在的绝对路径。 - **touch**: 创建一个新的空文件或者更新已有文件的时间戳。 - **cp**: 复制文件或目录。例如 `cp source_file destination_directory/`. - **mv**: 移动或重命名文件或目录。 #### 文件查看类 - **cat**: 连接并显示多个文件的内容。 - **less/more**: 分页查看大文件内容。 - **head/tail**: 查看文件开头部分 (`head`) 或结尾部分 (`tail`) 的若干行,默认为十行。 #### 权限管理类 - **chmod/chown**: 修改文件或目录的访问权限(`chmod`)以及更改所属用户和组(`chown`)。 #### 用户与进程控制类 - **ps/top**: 展示运行中的进程状态。 - **kill**: 终止指定ID号的一个或多个进程。 - **useradd/userdel**: 添加新用户账户(`useradd`) 删除现有用户账号(`userdel`)。 #### 数据处理类 - **grep**: 在文本数据流里搜索特定模式匹配到的字符串。 - **sort**: 对输入行按照字母顺序或其他标准进行排序。 - **wc**: 计算字节数、词数和行数。 #### 归档压缩类 - **tar/gzip**: 将多个文件组合成一个单一档案文件(.tar),再通过gzip算法进一步缩小体积形成.tar.gz格式文件。 #### 网络工具类 - **ping**: 测试主机之间网络连通性。 - **ssh/scp**: 安全远程登录其他计算机(SSH)传输文件(SCP)。 #### 其他实用型指令 - **df-du**: 报告磁盘空间使用情况(df针对整个分区;du则聚焦于具体目录下的占用状况) - **history**: 显示历史执行过的bash shell commands列表以便快速调取重复利用。 ```python import os print(os.system('ls -la')) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值