系统安全
系统权限
安装系统
-
选择稳定版操作系统:CentOS6.9,CentOS7.6
-
最小化安装:方便后期部署与升级应用
-
不要安装gcc,make,防止黑客入侵,直接编译
-
安装完系统后更新系统,使系统处于稳定状态
[root@server1 ~]# yum -y update
文件权限
-
基本权限
- 目录:默认权限=777-umask
- 文件:默认权限=666-umask
root的umask值 [root@server1 ~]# umask 0022 普通用户的umask值 [zhangsan@server1 ~]$ umask 0002 root家目录权限(550) [root@server1 ~]# ll -d dr-xr-x---. 4 root root 175 8月 21 12:06 . tmp目录权限(1777) [root@server1 ~]# ll -d /tmp drwxrwxrwt. 7 root root 93 8月 21 12:15 /tmp
-
特殊权限
- suid 冒险位,执行二进制文件与文件所有人有关,与谁来执行无关,
[root@server1 ~]# chmod 4755 filename [root@server1 ~]# chmod u-s filename
- sgid 强制位,对目录生效,在此目录中创建文件自动归入目录所在组
[root@server1 ~]# chmod 2755 dirname/ [root@server1 ~]# chmod g-s dirname/
- sticky 粘制位,目录中的文件只能被文件拥有者删除
[root@server1 ~]# chmod 1755 dirname/ [root@server1 ~]# chmod o-t dirname/
-
文件ACL:访问控制列表
- 独立于基础权限与特殊权限之外
- 对文件的权限进行附加说明的权限设定方式
- ACL提供传统的owner/group/other的read/write/execute之外的细部权限设定,可以针对单一的使用者,目录等等
- 查看
[root@server1 ~]# ll 总用量 4 -rw-------. 1 root root 1243 7月 24 17:35 anaconda-ks.cfg -rw-r--r-- 1 root root 0 8月 21 12:45 file1 -rw-rw-r--+ 1 root root 0 8月 21 12:45 file2 说明: -rw-r--r--.如果权限后面带有‘.’号表示默认创建 -rw-r--r-- 如果权限后面说明都没有表示在关闭selinux的情况下创建 -rw-r--r--+ 如果权限后面带有‘+’号表示有ACL权限 [root@server1 ~]# getfacl file2 # file: file2 # owner: root # group: root user::rw- user:zhangsan:rw- group::r-- mask::rw- other::r--
- 设定ACL权限
[root@server1 ~]# setfacl -m u:zhangsan:rw file2 #setfacl -m <u|g>:<username|groupname>:权限 filename ##设置权限 #setfacl -x <u|g>:<username|groupname> filename ##去除某个用户或者组的acl #setfacl -b filename ##删除文件上的权限列表
-
文件属性
chaatr +a 文件名
只允许对文件进行追加操作,不能修改,不能删除
[root@server1 ~]# chattr +a file1 [root@server1 ~]# echo "hello" > file1 -bash: file1: 不允许的操作 [root@server1 ~]# echo "hello" >> file1 [root@server1 ~]# rm -rf file1 rm: 无法删除"file1": 不允许的操作 去除该属性 [root@server1 ~]# chattr -a file1
chaatr +i 文件名
文件被锁定,只读
[root@server1 ~]# chattr +i file1 [root@server1 ~]# cat file1 hello [root@server1 ~]# echo "world" >> file1 -bash: file1: 权限不够 [root@server1 ~]# rm -rf file1 rm: 无法删除"file1": 不允许的操作
- 查看文件属性
[root@server1 ~]# lsattr file1 -----a---------- file1 [root@server1 ~]# lsattr file1 ----i----------- file1
- 常用案例
锁定重要文件 [root@server1 ~]# find /bin /sbin /usr/sbin /usr/bin /etc/shadow /etc/passwd /etc/pam.d -type f -exec chattr +i {} \; [root@server1 ~]# useradd lisi useradd:无法打开 /etc/passwd 日志文件防删除 [root@server1 ~]# chattr +a /var/log/messages /var/log/secure #日志切割要先去掉a属性,之后增加a属性 [root@server1 ~]# vim /etc/logrotate.d/syslog prerotate chattr -a /var/log/messages endscript ... postrotate chattr +a /var/log/messages endscript }
-
mount命令的权限
- rw可读可写&ro只读
- sync同步&async异步
- auto自动挂载&noauto非自动挂载
用户授权
给普通用户提升(赋予)权限的方法
设置特殊权限:suid,sgid
修改文件权限:usermod
切换用户:switching users with su
sudo提权:running commands as root with sudo
su切换用户
su username
仅切换用户,环境变量不切换,导致很多命令不可用su - username=
切换用户至用户家目录,环境变量会发生改变- 超管–>普通用户,不需要密码
- 普通用户–>超管|普通用户,需要密码
sudo
- 可根据/etc/sudoers文件设置普通用户使用sudo命令时可以以root身份或其他用户身份运行命令,从而提升权限
- sudo语法
#user MACHINE=(RUN_AS_USER) COMMANDS
用户名 运行的主机=(以什么身份) 允许执行的命令
root ALL=(ALL) ALL
cephu ALL=(root) NOPASSWD:ALL
- 案例:对用户授权
[root@server1 ~]# ll /etc/sudoers
-r--r-----. 1 root root 4365 8月 16 13:00 /etc/sudoers
[root@server1 ~]# chmod 640 /etc/sudoers
[root@server1 ~]# ll /etc/sudoers
-rw-r-----. 1 root root 4365 8月 16 13:00 /etc/sudoers
赋予zhangsan用户使用ip,fdisk,less命令的权限
[root@server1 ~]# cat /etc/sudoers|grep -Ev '^$|^#' |grep zhangsan
zhangsan ALL=/sbin/ip,/sbin/fdisk,/bin/less
赋予lisi用户使用less命令的权限且切换时不需要输入密码
[root@server1 ~]# cat /etc/sudoers|grep -Ev '^$|^#' |grep lisi
lisi ALL=NOPASSWD:/bin/less
- 案例:对组授权
[root@server1 ~]# groupadd students
[root@server1 ~]# useradd it01 -G students
[root@server1 ~]# useradd it02 -G students
[root@server1 ~]# cat /etc/sudoers|grep -Ev '^$|^#' |grep students
%students ALL=NOPASSWD:/sbin/ip
%students ALL=NOPASSWD:/sbin/useradd, /sbin/userdel, /bin/passwd
%students ALL=NOPASSWD:!/bin/passwd root, !/bin/passwd root --stdin, !/bin/passwd --stdin root
- 别名使用
## Host Aliases
# Host_Alias FILESERVERS = fs1, fs2
Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
User_Alias ADMINS = jsmith, mikem
## Command Aliases
## These are groups of related commands...
## Networking
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
## Installation and management of software
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database
Cmnd_Alias LOCATE = /usr/bin/updatedb
## Storage
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
zhangsan ALL=NOPASSWD: NETWORKING
lisi ALL=NOPASSWD: STORAGE
%students ALL=NOPASSWD: NETWORKING, STORAGE
- sudo日志
[root@server1 ~]# grep '^authpriv' /etc/rsyslog.conf
authpriv.* /var/log/secure
[root@server1 ~]# tail -f /var/log/secure
Aug 21 15:20:41 admin su: pam_unix(su-l:auth): authentication failure; logname=zhangsan uid=1001 euid=0 tty=pts/1 ruser=zhangsan rhost= user=it01
Aug 21 15:20:56 admin passwd: pam_unix(passwd:chauthtok): password changed for it01
Aug 21 15:21:02 admin passwd: pam_unix(passwd:chauthtok): password changed for it02
Aug 21 15:21:09 admin su: pam_unix(su-l:session): session opened for user it01 by zhangsan(uid=1001)
Aug 21 15:21:27 admin sudo: it01 : TTY=pts/1 ; PWD=/home/it01 ; USER=root ; COMMAND=/sbin/useradd it03
Aug 21 15:21:27 admin sudo: pam_unix(sudo:session): session opened for user root by zhangsan(uid=0)
Aug 21 15:21:27 admin useradd[29302]: new group: name=it03, GID=1006
Aug 21 15:21:27 admin useradd[29302]: new user: name=it03, UID=1005, GID=1006, home=/home/it03, shell=/bin/bash
Aug 21 15:21:27 admin sudo: pam_unix(sudo:session): session closed for user root
Aug 21 15:36:42 admin su: pam_unix(su-l:session): session closed for user it01
用户认证
用户认证方式
-
PAM
- gdm:GNOME桌面(状态栏在上方)用户登录认证
- kdm:KDE桌面(类似于Windows桌面)用户登录认证
- su:切换用户需要认证
- ssh:远程连接认证
- samab:使用系统用户samba,和另创建的samba服务密码登录,只能访问samba目录
- ftp:使用ftp系统用户及其密码
-
自带数据库验证方式:建议使用
- MySQL
- Zabbix
-
web验证方式:htpasswd生成用户名和密码
PAM介绍
-
PAM(Pluggable Authentication Modules) 即可插拔式认证模块,它是一种高效而且灵活的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。
-
PAM可以根据用户的网段、时间、用户名、密码等实现认证
-
使用帮助
查看man手册
[root@server1 ~]# man pam
借用浏览器查看文档
[root@server1 ~]# firefox /usr/share/doc/pam-1.1.8/html/Linux-PAM_SAG.html
- pam认证原理
Service(进程文件) → PAM配置文件 → 相关模块文件 → 模块的配置文件
举例说明
- 进程文件/usr/sbin/sshd
- 配置文件/etc/pam.d/sshd
- 相关模块及其对应配置文件
- /lib64/security/pam_access.so → /etc/security/access.conf
- /lib64/security/pam_limits.so → /etc/security/limits.conf
- /lib64/security/pam_time.so → /etc/security/time.conf
[root@server1 ~]# vim /etc/pam.d/sshd 1 #%PAM-1.0 2 auth required pam_sepermit.so 3 auth substack password-auth 4 auth include postlogin 5 # Used with polkit to reauthorize users in remote sessions 6 -auth optional pam_reauthorize.so prepare 7 account required pam_nologin.so 8 account include password-auth 9 password include password-auth 10 # pam_selinux.so close should be the first session rule 11 session required pam_selinux.so close 12 session required pam_loginuid.so 13 # pam_selinux.so open should only be followed by sessions to be executed in the user context 14 session required pam_selinux.so open env_params 15 session required pam_namespace.so 16 session optional pam_keyinit.so force revoke 17 session include password-auth 18 session include postlogin 19 # Used with polkit to reauthorize users in remote sessions 20 -session optional pam_reauthorize.so prepare [root@server1 ~]# ls /lib64/security/ pam_access.so pam_filter pam_mkhomedir.so pam_selinux.so pam_unix_auth.so pam_cap.so pam_filter.so pam_motd.so pam_sepermit.so pam_unix_passwd.so pam_chroot.so pam_ftp.so pam_namespace.so pam_shells.so pam_unix_session.so pam_console.so pam_group.so pam_nologin.so pam_stress.so pam_unix.so pam_cracklib.so pam_issue.so pam_permit.so pam_succeed_if.so pam_userdb.so pam_debug.so pam_keyinit.so pam_postgresok.so pam_systemd.so pam_warn.so pam_deny.so pam_lastlog.so pam_pwhistory.so pam_tally2.so pam_wheel.so pam_echo.so pam_limits.so pam_pwquality.so pam_time.so pam_xauth.so pam_env.so pam_listfile.so pam_rhosts.so pam_timestamp.so pam_exec.so pam_localuser.so pam_rootok.so pam_tty_audit.so pam_faildelay.so pam_loginuid.so pam_securetty.so pam_umask.so pam_faillock.so pam_mail.so pam_selinux_permit.so pam_unix_acct.so
pam认证流程
[root@server1 ~]# vim /etc/pam.d/sshd
1 #%PAM-1.0
2 auth required pam_sepermit.so
3 auth substack password-auth
4 auth include postlogin
5 # Used with polkit to reauthorize users in remote sessions
6 -auth optional pam_reauthorize.so prepare
7 account required pam_nologin.so
8 account include password-auth
9 password include password-auth
10 # pam_selinux.so close should be the first session rule
11 session required pam_selinux.so close
12 session required pam_loginuid.so
13 # pam_selinux.so open should only be followed by sessions to be executed in the user context
14 session required pam_selinux.so open env_params
15 session required pam_namespace.so
16 session optional pam_keyinit.so force revoke
17 session include password-auth
18 session include postlogin
19 # Used with polkit to reauthorize users in remote sessions
20 -session optional pam_reauthorize.so prepare
说明
认证类型 认证条件 认证需要的模块
-
PAM常见认证类型
- auth:认证管理。验证使用者身份,账号和密码
- account:用户管理。基于用户时间或密码有效期来决定是否允许访问
- password:密码(口令)认证管理。禁止用户反复尝试登录,变更密码时进行密码复杂性控制
- session:会话管理。进行日志记录,或者限制用户登录的次数,资源限制
-
认证条件
- Required (必要条件) :验证失败时仍然继续,但返回fail,用户不会知道哪里失败
- Requisite (必要条件) :验证失败时则立即结束整个验证过程,返回fail
- Sufficient (充分条件) :验证成功则立即返回,不再继续,否则忽略结果并继续
- Optional (可选条件) :无论验证结果如何,均不会影响,常用于session类型
- Include :包含另外一个配置文件中类型相同的行
- substack :垂直叠加
PAM常用模块
-
pam_rootok.so
- 功能:用户UID是0,返回成功
- 案例:限制root切换用户需要密码
[root@server1 ~]# vim /etc/pam.d/su [root@server1 ~]# cat /etc/pam.d/su |grep pam_rootok.so #auth sufficient pam_rootok.so [root@server1 ~]# su - zhangsan 密码: 上一次登录:六 8月 21 12:18:35 CST 2021从 192.168.139.1pts/1 上
-
pam_access.so
- 功能:访问控制,默认配置文件/etc/security/access.conf ,通常作用于登录程序,如su,login,gdm,sshd,
- 案例:不允许root在192.168.139.20使用ssh远程登录
添加pam_access.so模块 [root@server1 ~]# vim /etc/pam.d/sshd [root@server1 ~]# cat /etc/pam.d/sshd |grep auth auth required pam_access.so 添加该行 auth required pam_sepermit.so auth substack password-auth auth include postlogin 修改配置文件 [root@server1 ~]# vim /etc/security/access.conf [root@server1 ~]# cat /etc/security/access.conf |grep -Ev "^#|^$" -:root:192.168.139.20 验证 [root@server2 ~]# ip a inet 192.168.139.20/24 brd 192.168.139.255 scope global noprefixroute [root@server2 ~]# ssh root@192.168.139.10 The authenticity of host '192.168.139.10 (192.168.139.10)' can't be established. ECDSA key fingerprint is SHA256:+RvxL8ZDWnyO030Z5rOfjBuJaOG1yFvD9ieOY9uzWBA. ECDSA key fingerprint is MD5:d2:a2:8c:c6:60:15:46:9b:09:75:ce:3f:e1:ea:6e:aa. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.139.10' (ECDSA) to the list of known hosts. root@192.168.139.10's password: Permission denied, please try again. root@192.168.139.10's password: Permission denied, please try again. root@192.168.139.10's password: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
-
pam_listfile.so
- 功能:自定义黑名单或白名单
- 案例
vsftpd黑名单或白名单 [root@server1 ~]# yum install -y vsftpd [root@server1 ~]# vim /etc/pam.d/vsftpd 1 #%PAM-1.0 2 session optional pam_keyinit.so force revoke 3 auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed 这里定义了vsftpd的黑名单 4 auth required pam_shells.so 5 auth include password-auth 6 account include password-auth 7 session required pam_loginuid.so 8 session include password-auth sshd黑名单或白名单 [root@server1 ~]# vim /etc/pam.d/sshd [root@server1 ~]# cat /etc/pam.d/sshd |grep auth auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail 仿照vsftpd黑名单,编写sshd的白名单 auth required pam_access.so auth required pam_sepermit.so auth substack password-auth auth include postlogin [root@server1 ~]# echo root >> /etc/ssh_users
-
pam_time.so
- 功能:基于时间的访问控制,默认文件/etc/security/time.conf
- 案例:基于时间限制sshd的访问
添加模块 [root@server1 ~]# vim /etc/pam.d/sshd 1 #%PAM-1.0 2 auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail 3 auth required pam_access.so 4 auth required pam_sepermit.so 5 auth substack password-auth 6 auth include postlogin 7 # Used with polkit to reauthorize users in remote sessions 8 -auth optional pam_reauthorize.so prepare 9 account required pam_time.so 添加该模块 10 account required pam_nologin.so 11 account include password-auth 12 password include password-auth 13 # pam_selinux.so close should be the first session rule 14 session required pam_selinux.so close 15 session required pam_loginuid.so 16 # pam_selinux.so open should only be followed by sessions to be executed in the user context 17 session required pam_selinux.so open env_params 18 session required pam_namespace.so 19 session optional pam_keyinit.so force revoke 20 session include password-auth 21 session include postlogin 22 # Used with polkit to reauthorize users in remote sessions 23 -session optional pam_reauthorize.so prepare 修改配置文件 [root@server1 ~]# vim /etc/security/time.conf [root@server1 ~]# cat /etc/security/time.conf |grep -Ev "^#|^$" sshd;*;*;MoTuWeThFr0800-1700 说明 服务名;终端;用户;时间段 #该例:在周一到周五的8点到17点,所有终端的所有用户都能使用ssh连本机 验证 [root@server2 ~]# date 2021年 11月 17日 星期三 23:01:50 CST [root@server2 ~]# ssh root@192.168.139.10 root@192.168.139.10's password: Authentication failed.
-
pam_tally2.so
- 功能:登录统计
- 案例:实现防止对sshd暴力破解
[root@server1 ~]# vim /etc/pam.d/sshd [root@server1 ~]# cat /etc/pam.d/sshd |grep pam_tally2.so auth required pam_tally2.so deny=3 even_deny_root root_unlock_time=60 unlock_time=60 说明: #deny=3 连续错误登录最大次数,超过最大次数,将被锁定 #even_deny_root root用户也被要求锁定 #root_unlock_time root用户被锁定后等待的时间,单位为秒 #unlock_time 普通用户被锁定后等待的时间,单位为秒 查看用户错误登录次数 [root@server1 ~]# pam_tally2 -u root Login Failures Latest failure From root 8 11/18/21 14:13:30 192.168.139.20 清空用户错误登录次数(解除锁定) [root@server1 ~]# pam_tally2 --reset -u root Login Failures Latest failure From root 8 11/18/21 14:13:30 192.168.139.20
PAM资源限制
-
PAM资源限制主要是对用户进行系统资源使用的限制
-
PAM资源限制默认已使用,我们只需要调整相应限制值即可
-
相关模块:pam_limits.so
- 功能:限制用户会话过程中对各种资源的使用情况。
- 配置文件(缺省):/etc/security/limits.conf和/etc/security/limits.d/*.conf
- 语法
<domain> <type> <item> <value> 域 类型 限制项 值 * (*表所有用户) soft core 0 * hard rss 10000 @student(@表组)hard nproc 20 @faculty soft nproc 20 @faculty hard nproc 50 ftp hard nproc 0 @student - maxlogins 4
-
限制项
[root@server1 ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7184
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7184
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
- 案例
设置用户最大打开文件数
#查看
[root@server1 ~]# ulimit -n
1024
#临时设置
[root@server1 ~]# ulimit -n 2048
[root@server1 ~]# ulimit -n
2048
#永久设置
[root@server1 ~]# vim /etc/security/limits.conf
[root@server1 ~]# cat /etc/security/limits.conf |grep zhangsan
zhangsan soft nofile 10240
zhangsan hard nofile 20480
#验证
[root@server1 ~]# su - zhangsan
[zhangsan@server1 ~]$ ulimit -n -S
10240
[zhangsan@server1 ~]$ ulimit -n -H
20480
设置用户创建的最大进程数
[root@server1 ~]# ulimit -u
7184
[root@server1 ~]# vim /etc/security/limits.d/20-nproc.conf
[root@server1 ~]# cat /etc/security/limits.d/20-nproc.conf
* soft nproc 4096
#root soft nproc unlimited
* hard nproc 8192
[root@server1 ~]# su - zhangsan
[zhangsan@server1 ~]$ ulimit -u
4096
[zhangsan@server1 ~]$ ulimit -u -H
8192
Control Group(CGroup)资源限制组
-
控制组(CGroups)是Linux内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争。控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制和计费管理。控制组的设计目标是为不同的应用情况提供统一的接口,从控制单一进程(比如nice工具)到系统级虚拟化(包括OpenVZ、Linux-VServer、LXC等)。
-
具体来看,控制组提供:
- 资源限制(Resource limiting):可以将组设置为不超过设定的内存限制。比如:内存子系统可以为进程组设定一个内存使用上限,一旦进程组使用的内存达到限额再申请内存,就会触发Out of Memory警告。
- 优先级(Prioritization):通过优先级让一些组优先得到更多的CPU等资源。
- 资源审计(Accounting):用来统计系统实际上把多少资源用到适合的目的上,可以使用cpuacct子系统记录某个进程组使用的CPU时间。
- 隔离(isolation):为组隔离命名空间,这样一个组不会看到另一个组的进程、网络连接和文件系统。
- 控制(Control):挂起、恢复和重启等操作。
-
cgroups: Control Groups 基于进程的限制,而非用户,因此对于root运行的进程也是一
-
cgroup将各种子系统定义为资源,命名为controller: 可配额/可度量 - Control Groups (cgroups)
-
cgroups实现了对资源的配额和度量九大子系统的资源
- blkio 限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb
- cpu 限制使用cpu比例
- cpuacct 产生cgroup任务的cpu资源报告。
- cpuset 多核心的cpu时为cgroup任务分配单独的cpu和内存
- devices 允许或拒绝对设备的访问。
- freezer 暂停和恢复cgroup任务。
- memory 设置内存限制以及产生内存资源报告。
- net_cls 标记每个网络包。
- ns 名称空间子系统
-
例如:对某个进程使用内存进行限制步骤
- 需要在controller memory下建立cgroup,如nginx_mem控制组,并针对该控制组nginx_mem设置相应的内存限制参数
- 将进程Nginx分配到 memory controller的控制组(nginx_mem),没有使用controller则不会限制
-
Cgroup实现资源限制的方法:
- cgexec 手动分配
- cgred 自动分配
cgroup安装
[root@server1 ~]# yum install -y libcgroup*
[root@server1 ~]# systemctl start cgconfig.service
[root@server1 ~]# systemctl enable cgconfig.service
案例1:使用CPU子系统创建两个cgroup
创建组
[root@server1 ~]# vim /etc/cgconfig.conf
[root@server1 ~]# tail /etc/cgconfig.conf
group lesscpu {
cpu {
cpu.shares=200;
}
}
group morecpu {
cpu {
cpu.shares=800;
}
}
重启服务
[root@server1 ~]# systemctl restart cgconfig.service
将程序分配到相应的group实验中,为了让两个进程抢CPU时间片,故意只留一个CPU在线
[root@server1 ~]# lscpu
#查到有两个CPU
[root@server1 ~]# echo 0 > /sys/devices/system/cpu/cpu0/online
[root@server1 ~]# echo 1 > /sys/devices/system/cpu/cpu1/online
手动分配
[root@server1 ~]# cgexec -g cpu:lesscpu sha1sum /dev/zero
[root@server1 ~]# cgexec -g cpu:morecpu md5sum /dev/zero
[root@server1 ~]# top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32233 root 20 0 108068 620 524 R 79.1 0.0 0:05.84 md5sum
32232 root 20 0 116760 1088 808 R 20.2 0.1 0:02.76 sha1sum
案例2:限制进程使用Memory
创建组
[root@server1 ~]# vim /etc/cgconfig.conf
[root@server1 ~]# tail -6 /etc/cgconfig.conf
group lessmem {
memory {
memory.limit_in_bytes=268435465; 物理内存限制256M
memory.memsw.limit_in_bytes=268435465; 总内存限制,物理+SWAP
}
}
重启
[root@server1 ~]# systemctl restart cgconfig.service
创建内存盘并测试
[root@server1 ~]# mkdir /mnt/mem_test
[root@server1 ~]# mount -t tmpfs /dev/shm /mnt/mem_test
[root@server1 ~]# cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file bs=1M count=200
记录了200+0 的读入
记录了200+0 的写出
209715200字节(210 MB)已复制,1.01048 秒,208 MB/秒
[root@server1 ~]# cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file1 bs=1M count=500
已杀死
转存中…(img-OLHuLFFn-1637225149785)]
案例2:限制进程使用Memory
创建组
[root@server1 ~]# vim /etc/cgconfig.conf
[root@server1 ~]# tail -6 /etc/cgconfig.conf
group lessmem {
memory {
memory.limit_in_bytes=268435465; 物理内存限制256M
memory.memsw.limit_in_bytes=268435465; 总内存限制,物理+SWAP
}
}
重启
[root@server1 ~]# systemctl restart cgconfig.service
创建内存盘并测试
[root@server1 ~]# mkdir /mnt/mem_test
[root@server1 ~]# mount -t tmpfs /dev/shm /mnt/mem_test
[root@server1 ~]# cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file bs=1M count=200
记录了200+0 的读入
记录了200+0 的写出
209715200字节(210 MB)已复制,1.01048 秒,208 MB/秒
[root@server1 ~]# cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file1 bs=1M count=500
已杀死