[CONTENT] Linux maximum number of processes setting[CONTENT]

Case One: Set the maximum number of processes for all users

# vim /etc/security/limits.conf

Add the following

......
* soft nofile 10240
* hard nofile 10240

(Add: Take maximum number of processes is 10240 for everyone as an example here)

Case Two: Set the maximum number of processes for one group

# vim /etc/security/limits.conf

Add the following

......
@mingyuzhu soft nofile 10240
@mingyuzhu hard nofile 10240

(Add: Take maximum number of processes is 10240 for group mingyuzhu as an example here)

Case Two: Set the maximum number of processes for one user

# vim /etc/security/limits.conf

Add the following

......
mingyuzhu soft nofile 10240
mingyuzhu hard nofile 10240

(Add: Take maximum number of processes is 10240 for user mingyuzhu as an example here)

[步骤] Linux /boot 目录的修复 (包括修复里面的 /boot/grub2/grub.cfg 文件)

步骤一:挂载官方镜像

(步骤略)

步骤二:登录拯救模式

2.1 进入拯救模式

(步骤略)

2.2 登录拯救模式

rescue login:root

步骤三:在救援模式确定系统的根目录分区

(步骤略)


补充:
1) 物理分区可以使用 lsblk 命令、fdisk -l 或 cat /proc/partitions 命令辅助确定
2) 逻辑分区还可以可以使用 pvs 命令、lvs 命令或 lvdisplay 命令辅助确定

步骤四:在救援模式将系统的分区挂载到救援模式的 /mnt 目录

4.1 在救援模式将系统的根分区挂载到救援模式的 /mnt 目录

tty1:rescue:~ # mount <root spartition> /mnt


补充:
1) 如果是物理分区,系统的根分区就在救援模式的 /dev/ 目录里,例如救援模式的 /dev/sda1
2) 如果是逻辑分区,Rocky Linux & RHEL 的系统根分区就是救援模式里的 /dev// 例如救援模式里的 /dev/vg/lv,openSUSE & SLE 的系统根分区就是救援模式里的 /dev/mapper/- 例如救援模式里的 /dev/mapper/vg-lv

4.2 在救援模式将救援模式的 /dev 目录关联到救援模式的 /mnt/dev 目录

tty1:rescue:~ # mount --bind /dev /mnt/dev


补充:
1) 此时所有对救援模式的 /mnt/dev 目录的访问都会变成对救援模式的 /dev 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.3 在救援模式将救援模式的 /proc 目录关联到救援模式的 /mnt/proc 目录

tty1:rescue:~ # mount --bind /proc /mnt/proc


补充:
1) 此时所有对救援模式的 /mnt/proc 目录的访问都会变成对救援模式的 /proc 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.4 在救援模式将救援模式的 /sys 目录关联到救援模式的 /mnt/sys 目录

tty1:rescue:~ # mount --bind /sys /mnt/sys


补充:
1) 此时所有对救援模式的 /mnt/sys 目录的访问都会变成对救援模式的 /sys 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.5 在救援模式将救援模式的 /run 目录关联到救援模式的 /mnt/run 目录 (选做)

tty1:rescue:~ # mount --bind /run /mnt/run

(补充:此时所有对救援模式的 /mnt/run 目录的访问都会变成对救援模式的 /run 目录的访问)

步骤五:将当前的根目录从救援模式的根目录切换到系统的根目录

5.1 将当前的根目录从救援模式的根目录切换到系统的根目录

tty1:rescue:~ /bash # chroot /mnt

(补充:这里以 /mnt 作为系统根目录为例)

5.2 在系统模式挂载所有需要开机自动挂载的目录

bash-4.3# mount -a

5.3 在系统模式确认当前根目录下的目录

bash-4.3# ls
bin boot dev home lib lib64 mnt opt proc root run sbin selinux srv sys tmp usr var

步骤六:重装 /boot 目录

6.1 在救援模式创建 /mnt/bin 目录

tty1:rescue:~ # mkdir /mnt/bin

6.2 在救援模式挂载官方镜像

6.2.1 在救援模式创建用于挂载镜像的 /media 目录
tty1:rescue:~ # mkdir /media
6.2.2 在救援模式挂将官方镜像挂载到 /media 目录
tty1:rescue:~ # mount /dev/dvd /media

6.3 在救援模式安装 kernel-default 软件

6.3.1 在救援模式拷贝 kernel-default 的 RPM 文件 (软件包) 到当前目录
tty1:rescue:~ # cp /media/suse/x86_64/kernel-default-3.10.0-693.el7.x86_64.rpm .

(补充:这里以拷贝 /media/suse/x86_64/kernel-default-3.10.0-693.el7.x86_64.rpm.rpm)

6.3.2 在救援模式安装 kernel-default 的 RPM 文件 (软件包)
tty1:rescue:~ # rpm -ivh kernel-default-3.10.0-693.el7.x86_64.rpm

6.4 生成 /boot/grub2/grub.cfg

bash-4.3# grub2-mkconfig -o /boot/grub2/grub.cfg

参考文献:

https://www.suse.com/support/kb/doc/?id=000018770

[内容] auditd 使用 (监控文件或目录的变化)

内容一:auditd 的管理

1.1 查看 auditd 状态

# auditctl -s

1.2 查看 auditd 的规则

# auditctl -l

1.3 删除 autitd 的规则

1.3.1 删除 auditd 的所有规则
# auditctl -D
1.3.2 删除 auditd 的普通规则 (以 -w 开头的规则)
# auditctl -W <policy>
1.3.3 删除 auditd 的使用系统调用和过滤条件的监控规则 (以 -a 开头的规则)
# auditctl -d <policy>

1.4 显示 auditd 日志

1.4.1 显示 auditd 的所有日志
# cat /var/log/audit/audit.log
1.4.2 显示某文件或目录的日志
# ausearch -f <file/directory>
1.4.3 显示某关键词的日志
# ausearch -k <key_name>

内容二:auditd 的规则

2.1 普通监控规则

2.1.1 普通监控规则的格式
2.1.1.1 普通监控规则的格式
-w <file/directory> -p <previlege> -k <key_name>


补充:
1) 文件名或目录名,需要绝对路径
2) 监控的权限,可以是 rwxa 其中的任意 1 个或多个,r 代表读权限、w 代表写权限,x 代表执行权限,a 代表文件类型
3) 此类日志的关键词

2.1.1.2 添加普通监控规则的格式
2.1.1.2.1 临时添加普通监控规则的格式
# auditctl -w <file/directory> -p <previlege> -k <key_name>
2.1.1.2.2 永久添加普通监控规则的格式
# vim /etc/audit/audit.rules

添加以下内容:

......
-w <file/directory> -p <previlege> -k <key_name>


注意:永久添加的规则后要重启 auditd 服务后才会生效

# service auditd restart

2.1.2 添加普通监控规则的案例
2.1.2.1 案例一:添加监控 /etc/nginx/nginx.conf 文件的读、写、执行和文件属性变化的规则
# auditctl -w /etc/nginx/nginx.conf

(补充:这里以临时添加监控 /etc/nginx/nginx.conf 文件的读、写、执行和文件属性变化的规则为例)

2.1.2.2 案例二:添加监控 /etc/nginx/nginx.conf 文件的读、写、执行和文件属性变化,并设置关键词为 nginx 的规则
# auditctl -w /etc/nginx/nginx.conf -p rwxa -k 'nginx'

(补充:这里以临时添加监控 /etc/nginx/nginx.conf 文件的读、写、执行和文件属性变化,并设置关键词为 nginx 的规则为例)

2.2 使用系统调用和过滤条件的监控规则

2.2.1 使用系统调用和过滤条件的监控规则的格式
2.2.1.1 使用系统调用和过滤条件的监控规则的格式
-a <action>,<filter> -S <system_call> -F <field>=<value> -k <key_name>


补充:
1) 和 用于确定事件被记录, 的值可以是 always 或者 never, 的值可以是 task、exit、user 或者 exclude
2) 是系统调用,Linux 系统调用的名称在 /usr/include/asm/unistd_64.h 文件中,可以将多个系统调用放在一个规则里,例:-S <system_call> -S <system_call> ……,或者 -S <system_call>,<system_call>……
3) 和 是过略条件,可以将多个过略条件放在一个规则里,-F <field>=<value> -F <field>=<value> ……
4) 是此类日志的关键词

2.2.1.2 添加使用系统调用和过滤条件的监控规则的格式
2.2.1.2.1 临时添加使用系统调用和过滤条件的监控规则的格式
# auditctl -a <action>,<filter> -S <system_call> -F <field>=<value> -k <key_name>
2.2.1.2.2 永久添加使用系统调用和过滤条件的监控规则的格式
# vim /etc/audit/audit.rules

添加以下内容:

......
-a <action>,<filter> -S <system_call> -F <field>=<value> -k <key_name>


注意:永久添加的规则后要重启 auditd 服务后才会生效

# service auditd restart

2.2.2 使用系统调用和过滤条件的监控规则的案例
2.2.2.1 案例一:监控所有 UID 大于 1000 的用户的删除操作,并设置关键词为 delete
# auditctl -a always,exit -S rmdir -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=unset -F auid!=4294967295 -k delete

(补充:这里以临时监控所有 UID 大于 1000 的用户删除操作为例)

(注意:这里的 -F auid!=4294967295 是为了排除 login UID 没有被设置的用户)

2.2.2.2 案例二:监控所有 UID 大于 1000 的用户的文件删除操作,并设置关键词为 delete
# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=unset -F auid!=4294967295 -k delete

(补充:这里以临时监控所有 UID 大于 1000 的用户删除操作为例)

(注意:这里的 -F auid!=4294967295 是为了排除 login UID 没有被设置的用户)

2.2.2.3 案例三:监控所有网络连接
# auditctl -a always,exit -F arch=b64 -S socket
# auditctl -a always,exit -F arch=b64 -S connect
# auditctl -a always,exit -F arch=b64 -S sendmmsg
# auditctl -a always,exit -F arch=b64 -S sendmsg
# auditctl -a always,exit -F arch=b64 -S bind
# auditctl -a always,exit -F arch=b64 -S recvmsg
# auditctl -a always,exit -F arch=b64 -S close

(补充:这里以监控所有网络连接为例)