Linux系统权限集中管理项目案例实践

2023-05-16

目录

1.1、/etc/syduoers配置语法注意事项

1.2 /etc/sudoers配置文件别名知识

1.3、在/etc/sudoers配置文件中,别名和配置语法的对应关系表

1.4、利用别名配置授权实践案例

2.企业环境中用户权限集中管理项目

2.1 企业运维问题现状

2.2 项目需求分析

2.3 项目需求具体实现说明

2.4 项目实施过程

3 记录所有用户执行sudo命令的操作日志

3.1 企业日志审计解决方案

3.2 利用sudo配置日志审计


Linux系统权限管理是Linux运维工作的重中之重。若服务器不需要团队协作运维管理,那么超级权限可以集中在一个人手中,但是很多时候,企业服务器的数量并不止一台,需要很多运维人员共同管理,甚至还需要为开发人员分配管理服务器的用户账号,因此,如何科学地分配和管理,让每个用户既能达到工作要求,又不会越权访问(获得工作需求以外的权限)非常重要。

sudo命令对应的用户权限授权配置文件为/etc/sudoers,我们可以使用专用工具visudo来完成有关sudo的授权管理配置,使用visudo工具的好处是在添加规则之后,保存退出时会检查授权配置的语法(这一点很重要,曾经有人直接用vim编辑/etc/sudoers,最后配置发生了错误,造成所有普通用户都无法通过sudo执行命令以及切换到超级root上了)。

在授权配置完成以后,可以切换到被授权的用户下,通过sudo -l命令可以查看哪些超级权限命令是可以执行的。

1.1、/etc/syduoers配置语法注意事项

  • 命令别名下成员必须是文件或目录的绝对路径。
  • 别名名称包含大写字母、数字、下划线等,如果是字母则都要大写
  • 一个别名下包含多个成员,成员与成员之间,通过半角","号进行分割;成员必须是有效且实际存在的。

  • 别名成员受别名类型 Host_Alias、User_Alias、Runas_Alias、Cmnd_Alias的制约,定义什么类型的别名,就要有什么类型的成员与之相配。

  • 别名规则是每行算一个规则,如果一行容不下,则可以通过"\"来续行。

  • 指定切换的用户要用"()"(括号)括起来。如果省略括号,则默认为root用户;如果括号里是ALL,则代表能够切换到所有用户。

  • 如果希望不需要密码就直接运行命令,则应该加上“NOPASSWD:”参数。

  • 若想禁止某类程序或命令执行,则要在命令动作前面加上“!”号,并且放在允许执行命令的后面。

  • 用户组前面必须加"%"号。

1.2 /etc/sudoers配置文件别名知识

sudoers文件中的别名类型(Alias_Type)包括如下四种

  1. Host_Alias,表示定义主机别名,实际配置语法如下:
Host_Alias FILESERVERS = fs1 , fs2	#请注意定义规范,"="号两边最好有空格。
Host_Alias MAILSERVERS = smtp , smtp2	#请注意定义规范,每个成员之间用逗号进行分割。

        Host_Alias的说明具体如下。

  • 再生产环境中,一般不需要设置主机别名,在自定义授权规则是可以通过

ALL来匹配所有的主机。

  •  注意上面定义的规范,有些规范虽然不是必须的,但最好能够按照系统的标准来进行配置,这样可以避免意外问题的发生。
  • 主机名就是一个逻辑上的主机组,当多台服务器共享一个/etc/sudoers的时候就会用到这个主机别名。不过,在实际企业运维中,这个需求几乎是不存在的。

在sudo实际授权语法规则配置时,第一个ALL的位置就是主机别名的配置位置,示例代码如下:

root    ALL=(ALL)       ALL	#第一个ALL就是主机别名的应用位置。

          2.User_Alias,表示定义用户别名,别名成员可以是用户、用户组(用户组前面要加“%”号),实际语法如下:

User_Alias ADMINS = jsmith, mikem, %groupname		#提示:设置用户别名也不是必需的,更多情况下,可以通过“groupname”的方式一次性设定用户组配置,以后若有成员增加,则将新成员加入准备好的用户组就可以了。

        3、Runas_Alias,表示定义runas别名,这个别名指定的是授权的“用户身份”,即sudo允许切换到用户身份。

Runas_Alias OP = root

       实际工作中都是普通用户需要转换到root身份,普通用户之间权限相同,极少有授权其他普通用户身份的需求。

         4、cmnf_Alias,表示命令别名,命令别名就是定义一个别名,然后在别名里面包含一堆命令,即一组相关命令的集合,实际配置语法如下:

## 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
#提示:命令别名就是设置一组可以执行的命令集合,可以将不同类的命令分为不同的组,例如磁盘命令管理组、网络命令管理组等。

1.3、在/etc/sudoers配置文件中,别名和配置语法的对应关系表

问:在企业运维工作中,什么情况下会使用到别名知识?

答:当工作中有很多台服务器,每台服务器又包含多个系统用户,需要对用户权限进行严格管理(关键命令的使用)、分层授权管理用户的时候。

1.4、利用别名配置授权实践案例

1根据管理员管理功能,定义多个用户别名

(1)定义系统管理用户别名为ADMINS,包含尘管nereagle、ett及sa组的成员,命令如下:

User_Alias ADMINS = neteagle, ett, %sa	#注意定义的规范

(2)定义用户别名为NETADMINS来管理网络,包含成员leo和maya,命令如下:

User_Alias NETADMINS = leo, maya	#网络管理员组NETADMINS。

(3)定义用户别名USERADMINS来管理系统用户,包含成员zuma,命令如下:

User_Alias USERADMINS = zuma	#用户管理员组USERADMINX。

说明

        为了方便管理,应尽可能使用有意义的名称作为别名,定义时使用大写字符串。另外,所有定义的用户及用户组内包含的用户或成员都不是系统中存在的用户或存在的组。

(4)检查并创建上述用户及用户组(用户和用户组都必须存在),命令如下:

[root@localhost ~]# groupadd sa  #添加sa组
[root@localhost ~]# useradd leo  #依次添加5个用户
[root@localhost ~]# useradd maya
[root@localhost ~]# useradd zuma
[root@localhost ~]# useradd ett
[root@localhost ~]# useradd neteagle

2.根据命令的功能分类定义命令别名

(1)定义命令别名USERCMD,包含管理系统用户的相关命令,命令如下:

Cmnd_Alias USERCMD = /usr/sbin/useradd, /user/sbin/userdel, \
/usr/bin/passwd [A-Za-z]*, /bin/chown, /bin/chmod  #用户相关命令组USERCMD。

(2)定义命令别名DISKCMD,包含管理系统磁盘相关命令,命令如下:

mnd_Alias DISKCMD = /sbin/fdisk, /sbin/parted	#磁盘管理相关命令组DISKCMD。

(3)定义命令别名NETMAGCMD,包含管理系统网络的相关命令,命令如下:

Cmnd_Alias NETMAGCMD = /sbin/ifconfig, /etc/init.d/network	#网络管理命令组。

说明:

  • 所有命令别名都必须使用绝对路径。
  • 命令别名超过一行时可以通过"\"号换行续写。
  • 在定义时,可以使用通配符及正则表达式,例如,/usr/bin/passwd [A-Za-z]*。

3、定义授权用户的别名

runas别名定义的示例代码如下:

Runas_Alias OP = root , neteagle	

说明:runas别名的定义并不多见,且不常用,因为多数都是需要root身份就够了,默认ALL也可以。

4、

1)管理员别名(ADMINS)可以收起所有命令通过sudo进行管理,示例代码如下:

ADMINS ALL= (OP) DISKCMD,USERCMD,NETMAGCMD

2)用户管理员别名(USERADMINS)可以授权与用户命令别名对应的命令通过sudo进行管理,示例代码如下:

USERADMINS ALL= (OP) USERCMD

3)网络管理员别名(NETADMINS)可以授权与网络命令别名对应的命令通过sudo进行管理,示例代码如下:

NETADMINS ALL= (OP) NETMAGCMD

这样就完成了对不同的用户授权不同的命令集合,并通过sudo进行管理,让用户对应的权限管理得到了细化。

2.企业环境中用户权限集中管理项目

2.1 企业运维问题现状

当前公司里的服务器或虚拟机数量达到上百台时,各个服务器上的管理人员将会很多(开发+运维+架构+DBA+产品+市场等,他们都有用户权限),在大家登陆使用Linux服务器时,不同职能的员工操作水平不同,因此导致操作很不规范,比如,root权限泛滥(几乎大部分人员都有root权限),文件等经常莫名其妙地丢失等。此外,老手和新员工对服务器的熟知程度也不相同,这些都使得公司服务器的安全存在很大的不稳定性及操作安全隐患。据调查,企业服务器环境下,50%以上的安全问题都来自于内部,而不是外部。为了解决单个用户管理权限过大的现状,现提出针对Linux服务器用户权限集中管理的解决方案。

2.2 项目需求分析

我们既希望超级用户root的密码掌握在少数或唯一的管理员手中,又希望多个系统管理员或相关的拥有权限的人员,能够完成更多更复杂的自身职能相关的工作,并且不至于有越权操作导致系统安全隐患。

那么,如何实现多个系统管理员都能管理系统而又不让超级权限泛滥的需求呢?这就需要采用sudo管理来替代以往的方式,或者结合su命令来完成这样的苛刻且必要的企业服务器用户管理需求了。

2.3 项目需求具体实现说明

针对公司里的不同部门,根据员工的具体工作职能(例如,开发、运维和数据库管理员)。分等级、分层次地实现对Linux服务器管理的权限最小化、规范化。这样既能减少了运维管理成本,消除了安全隐患,又提高了工作效率,从而实现高质量、快速化地完成项目进度,以及日常系统维护工作。

2.4 项目实施过程

说明:实施方案一般是由积极主动发现问题的运维人员提出问题,然后写好解决方案,再召集大家讨论可行性,最后确定方案,实施部署,之后就是后期的总结维护了。

思想:在提出问题之前,一定要想到如何解决,并给出解决方案。

假设现状你以及写完了权限规划文档(见附录A和附录B)。

做项目,相当于一次变法:变法是有代价的,取得“老大”(运维总监、技术总监)的支持极其重要。

2.4.1 信息采集(含整个方案流程)

1)召集相关部门的领导,通过会议讨论,或者是与各组领导沟通以确定权限管理方案的可行性。

需要支持的人员:运维经理或总监、CTO、各部门组的领导。作为运维人员,拿着类似本书介绍的项目方案(本章内容),通过会议形式为大家讲解文档,以期取得各部门组领导的支持和认可,这才是项目能够得以最终实施的前提。当然,即使实施不了,你的能力也得到了锻炼,各部门组领导对你积极主动思考问题的态度也会另眼相看的。

2)确定方案的可行性之后,会议负责人汇总、提交、审核所有相关员工对Linux服务器的权限需求。

取得各部门组领导的支持后,通过发邮件或者联系相关人员取得相应的权限信息。比如说,请各个部门的经理整理归类本部门需要登录Linux权限的人员名单、职位、以及负责的业务及权限等,如果无法清楚描述权限细节,就描述所负责的业务细节,这样,运维人员就可以确定各相关人员具体需要的权限了(见表15-2)。

3)按照需要执行的Linux命令程序及公司业务服务来规划权限和人员的对应配置。

主要是运维人员根据上面收集的人员名单、需要的业务及权限角色,并根据对应的账号配置权限,实际上就是配置sudo配置文件。

4)权限方案一旦实施之后,所有的员工都必须通过《员工Linux服务器管理权限申请表》来申请对应的权限,确定审批流程,规范化管理。这里实施权限方案之后一定要控制住后期的权限申请流程,否则,大家不按要求来,即使方案实施完也会半途而废的。

5)撰写操作说明,对各部门人员进行操作讲解。通过sudo执行命令,若会涉及PATH变量问题,则运维需要提前处理好。

信息采集表格

2.4.2 收集员工职能和对应的权限

收集员工职能和对应权限的过程需要召集大家开会确定,或者请各组领导安排人员进行统计汇总。将需要权限的人员及对应的工作职责交给运维人员,又运维人员优化职位所对应的系统权限,具体见表

运维组的级别和权限

 开发组的级别和权限

架构组的级别和权限

 

DBA组的级别和权限

 网络组的级别权限

 提示:如果授权ALL,那么在进行故障排除时,有时会让我们防不胜防。这种先开后关的策略并不是好的策略。比较好的策略,是白名单机制,即只写授权命令,不用ALL。

1)建立3个初级运维,一个高级运维,一个网络工程师,一个运维经理,密码统一是111111。示例代码如下:

for user in chuji001 chuji002 chuji003 net001 senior001 manager001
do
	useradd $user
	echo "111111" |passwd --stdin $user
done

2)建立5个开发人员,属于phpers组。示例代码如下:

groupadd -g 1999 phpers
for n in `seq 5`
do
	useradd -g phpers php00$n
	echo "111111" |passwd --stdin php00$n
done
for user in kaifamanager001 seniorphpers
do
	useradd $user
	echo "111111" |passwd --stdin $user
done	

3)根据前面的表格配置sudoers文件对应的内容。示例代码如下:

##各种别名定义
##Cmnd_Alias by neteagle##2020
Cmnd_Alias CY_CMD_1 = /usr/bin/free, /user/bin/iostat, /usr/bin/top, /bin/hostname, /sbin/inconfig. /bin/netstat, /sbin/route
Cmnd_Alias GY_CMD_1 = /usr/bin/free, /user/bin/iostat, /usr/bin/top, /bin/hostname, /sbin/inconfig. /bin/netstat, /sbin/route, /sbin/iptables, /etc/init.
d/network, /bin/noce, /bin/kill, /usr/bin/kill, /usr/bin/killall, /bin/rpm, /usr/bin/up2date, /usr/bin/yum, /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbi
n/partprobe, /bin/mount, /bin/umount
Cmnd_Alias CK_CMD_1 = /usr/bin/tail /app/log*, /bin/grep /app/log*, \
/bin/cat, /bin/ls
Cmnd_Alias GK_CMD_1 = /sbin/service, /sbin/chkconfig, /bin/tail /app/log*, /bin/grep /app/log*, /bin/cat, /bin/ls, /bin/sh ~/scripts/deploy.sh
Cmnd_Alias GW_CMD_1 = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, \
/usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, \
/sbin/iwconfig, /sbin/mii-tool, /bin/cat /var/log/*
#####################################################################
## User_Alias by neteagle##2020
User_Alias CHUJIADMINS = chuji001,chuji002,chuji003
User_Alias GWNETADMINS = net001
User_Alias CHUJI_KAIFA = %phpers

## Runas_Alias by neteagle##2020/10/19
#Runas_Alias OP = root

#pri config
senior001                ALL= (OP) GY_CMD_1
manager001               ALL= (ALL) NOPASSWD:ALL
#kaifamanager001 ALL= (ALL) ALL, /usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vi *sudoer*
kaifamanager001 ALL= (ALL) ALL, /usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim, !/bin/vi,!/usr/bin/sudo su -,!/bin/su
#授权规则
seniorphpers ALL= (OP) GK_CMD_1
CHUJIADMINS  ALL= (OP) CY_CMD_1
GWNETADMINS      ALL= (OP) GW_CMD_1
CHUJI_KAIFA  ALL= (OP) CK_CMD_1
#注意:
#1)别名名字要大写。
#2)所有命令的路径均要使用全路径,每个命令之间用逗号进行分隔。
#3)超过一行用“\”换行。
#4)!号表示排除。
#5)无法控制Linux Bash内置命令。

2.4.4 项目结束其他扫尾工作

1)配置完毕后,需要使用不同的用户登录实战调试测试。

2)调试成功后发邮件通知所有人权限配置生效,并附带操作说明。

3)尽快给参与使用的人,进行培训讲解,以确保大家都能熟练操作。

4)制定新的权限申请流程及申请表

Linux服务器系统权限申请表

2.4.5 项目结束后的后期维护规则

  • 项目结束后,后期的维护不再是特别紧急的需求,一律走权限申请流程。

  • 服务器多了,可以通过ansible分发软件批量分发/etc/sudoers文件(注意权限和语法检查)。

  • 除了进行权限上的控制,在账户有效时间上也要进行限制,这样才能让安全最大化。

  • 将所有应用服务降权到用普通用户运行,并将所有的程序都放在对应的用户家目录下面。启动的时候也是通过这个账户运行,这样就可以用普通用户权限启动和停止对应服务了。

3 记录所有用户执行sudo命令的操作日志

        所谓sudo命令日志审计,并不是记录普通用户的普通命令操作,而是记录那些执行sudo命令的用户操作。

3.1 企业日志审计解决方案

所谓日志审计,就是记录所有系统及相关用户行为的信息,并且可以自动分析、处理、展示(包括文本或者录像)。

方案1,通过环境变量命令及rsyslog服务进行全部日志审计(审计信息太大,不推荐)。

方案2,通过sudo的配置参数进行日志审计(审计信息较少,效果不错)。

方案3,在bash解释器程序里嵌入一个监视器,让所有被审计的系统用户使用修改过的增加了监视器的特殊bash程序作为解释程序(老男孩教育开源产品)。

方案4,齐治堡垒机:商业产品。

方案5,Python开源产品:开源跳板机(堡垒机)Jumpserver或CrazyEye(Alex老师开源产品),如果读者会Python,那么可以选择更高大上的开源跳板机产品,老男孩教育的课程也会讲解这个方案。

3.2 利用sudo配置日志审计

首先增加配置“Defaults logfile=/var/log/sudo.log”到/etc/sudoers中,注意,不包含引号:

[root@localhost ~]# echo "Defaults logfile=/var/log/sudo.log" >>/etc/sudoers

sudo日志审计代码

[root@localhost ~]# tail -1 /etc/sudoers
Defaults logfile=/var/log/sudo.log
[root@localhost ~]# visudo -c    #检查sudoers文件语法
/etc/sudoers: parsed OK
[root@localhost ~]#

此时会自动建立一个/var/log/sudo.log文件(日志中配置的名字),并且文件权限为600(-rw-------),所有者和组均为root(如果看不到日志文件,就退出重新登录看看),实现代码如下:

# ll /var/log/sudo.log 	#这里因为没有去登陆其他用户去执行命令,所以没有这个日志文件,先进行下面操作。
-rw-------. 1 root root 467 Oct 19 17:36 /var/log/sudo.log

配置完成后,就可以测试sudo日志审计配置结果了。

执行useradd neteagle命令创建neteagle用户,并在visudo中进行如下授权操作:

neteagle ALL= (ALL) /bin/ls		#授权neteagle用户以所有用户身份(含root)执行ls命令。

然后,切换到neteagle用户下进行测试,代码如下:

[root@localhost ~]# su - neteagle  #切换到root下
[neteagle@localhost ~]$ ls /root   #不用sudo没有权限
ls: cannot open directory /root: Permission denied
[neteagle@localhost ~]$ sudo ls /root #通过sudo执行可以列出/root,授权成功

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for neteagle:#输入neteagle用户密码。

[neteagle@localhost ~]$ exit#忘记设置密码退出重新设置密码
logout
[root@localhost ~]# passwd neteagle
Changing password for user neteagle.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# su - neteagle
Last login: Sun Mar 12 06:02:17 CST 2023 on pts/0
[neteagle@localhost ~]$ sudo ls /root #sudo提权查看/root

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for neteagle:
anaconda-ks.cfg  hello.py   network-test.sh  Python-3.8.6.tgz
ethX             ifcfg.bak  Python-3.8.6     sedtest.txt
[neteagle@localhost ~]$ logout #回到root环境
[root@localhost ~]# cat /var/log/sudo.log #记录了neteagl的sudo日志执行情况,包括执行了哪些命令
Mar 12 06:07:20 : neteagle : 1 incorrect password attempt ; TTY=pts/0 ;
    PWD=/home/neteagle ; USER=root ; COMMAND=/bin/ls /root
Mar 12 06:08:17 : neteagle : TTY=pts/0 ; PWD=/home/neteagle ; USER=root ;
    COMMAND=/bin/ls /root
[root@localhost ~]# ll /var/log/sudo.log
-rw-------. 1 root root 231 Mar 12 06:08 /var/log/sudo.log

从测试结果来看,所有的普通用户执行sudo的命令都被记录监控了,这样一旦出现异常行为,就可以通过日志记录进行追查。

        目前IDC系统账户所有的权限都是超级权限,在安全性方面存在一定的隐患,本着“为用户提供尽可能少的权限但仍允许完成他们的工作”的宗旨,下面的2个表格对常用的命令进行了分类和细化。

权限对照表格

 权限等级授予表格(暂定:如果需要其他权限可根据实际情况进行添加。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux系统权限集中管理项目案例实践 的相关文章

  • 固定翼调试步骤

    有的时候可能会出现校准不了的情况 xff0c 可以尝试去掉一个罗盘 xff0c 一般去掉的是内置罗盘 xff0c 用外置的罗盘 xff0c 就能够达到要求 将外置的罗盘设置为主罗盘 xff0c 内置罗盘不勾选就可以实现这样的功能 从左右副翼
  • 网络分区是什么?

    网络分区 目前理解 xff0c 在分布式环境下 xff0c 有时由于网络通讯故障 xff0c 而不是服务器上的应用故障 xff0c 导致一些节点认为应用不可用 xff0c 另外一些节点认为应用仍可用 导致 xff0c 整个系统在提供服务时
  • 调试并修理垂起固定翼(VTOL)

    调试 43 修理垂起固定翼 校准遥控器 设置飞行模式 设置的模式的切换是通过通道B来进行的 xff0c 最下面是Guided模式 xff0c 该模式可以运行程序的内容 xff0c 也可以运行写入的航点 中间的模式是QLoiter模式 xff
  • NVIDIA Jetson tx2各性能介绍及切换教程

    1 tx2简介 Jetson tx2 有6个CPU核心和一个GPU NVIDIA命令行工具Nvpmodel提供 xff15 种模式 xff0c 可以方便地让用户配置CPU状态 xff0c 以最大限度地提高不同场景下的性能和能耗 2 五种模式
  • Redis中(error):ERR unknown command ‘KEYS‘, with args beginning with:

    redis报错 ERR unknown command 39 KEYS 39 with args beginning with 1 这种情况是redis服务器不支持keys命令 2 5 0版本改为scan了 2 检查redis的yml配置信
  • 如何用手机控制stm32单片机,通过蓝牙模块

    电脑与单片机通信原理 我们用到的串口调试助手 xff0c 就是通过电脑上面的虚拟串口和单片机的串口进行通信从而来调试 在建立通信的过程中 xff0c 我们需要把电脑上虚拟串口的波特率 xff0c 数据位 xff0c 奇偶校验位 xff0c
  • Vm虚拟机Deepin安装教程---kalrry

    Vm虚拟机Deepin安装教程 kalrry 前言Deepin安装 已完成 前言 Win配置记录 Mac配置记录 Deepin安装 已完成 01 点击创建新的虚拟机 02 选择自定义 高级 点击下一步 N 03 点击下一步 N 04 选择稍
  • 国内外流行的JS游戏开发框架介绍---kalrry

    国内外流行的JS游戏开发框架介绍 kalrry 前言一 整理中ing二 当今国内外流行的游戏开发框架有哪些 三 每个框架的特点以及优缺点1 Three js优点 xff1a 缺点 xff1a 2 Phaser优点 xff1a 缺点 xff1
  • JavaScript库集合---kalrry---ing

    JavaScript库集合 kalrry ing 参考 序号JS库功能备注01web3 jsweb3 js 库是一系列模块的集合 xff0c 服务于以太坊生态系统的各个功能备用链接02Three js03Ramda04Lodash05Mom
  • CPU天梯图/显卡天梯图---kalrry

    CPU天梯图 显卡天梯图 kalrry 一 CPU天梯图二 显卡天梯图 一 CPU天梯图 CPU天梯图更注重综合性能 xff0c 只具有参考意义 二 显卡天梯图 以下显卡天梯图主要是根据传统光栅性能排名
  • Pixhawk飞控资料备忘---kalrry

    Pixhawk飞控资料备忘 kalrry 一 简介二 工具 资料1 Mission Planner2 PX4 需全局跳转 3 Pixhawk官网4 视频资源 三 开发入门四 待分类 一 简介 PX4飞控软件是来自苏黎世大学的PIXHAWK项
  • vue之动态注册并渲染组件---kalrry

    vue之动态注册并渲染组件 kalrry 简介 xff1a 目录结构一 普通方法二 方案二三 方案三四 方案四 简介 xff1a 目录结构 待完善补充 index vue dir 目录文件夹 comp1 vue comp2 vue 一 普通
  • SQL-常见的聚合函数有哪些?

    聚合函数 聚合函数对一组值执行计算并返回单一的值 求个数 记录数 项目数等 xff1a count count 的用法 span class token function COUNT span span class token punctu
  • Vue之v-model双向绑定原理---kalrry

    Vue之v model双向绑定原理 kalrry 一 简介二 表单实现双向绑定1 原理2 实现 三 组件上的双向绑定1 原理2 实现3 实例 一 简介 v model实现双向绑定的语法糖 xff0c 常用于表单与组件之间的数据双向绑定 二
  • Qt开发遇到的坑---kalrry

    Qt开发遇到的坑 kalrry 一 依赖引入坑二 Qt在Debug时报错1 编译器是 MSVC 还是 MinGW 2 编译器 32位 还是 64位 三 Qt 43 MSVC编译后中文乱码四 不能将const char 类型的值分配到cons
  • Sinutrain下载安装与开启OPC UA---kalrry

    Sinumerik下载安装与开启OPC UA kalrry 前言一 安装前准备二 Win7安装1 软件安装2 开启授权3 文件配置4 客户端连接 三 Win10 11安装四 启动后使用五 启动OPC UA 前言 本教程只适用于 Sinutr
  • Qt第三方QCustomPlot的使用---kalrry

    Qt第三方QCustomPlot的使用 kalrry 一 参考博客End 例子 一 参考博客 QCustomPlot中图例的相关设置QCustomPlot使用手册QCustomPlot中图例的相关设置QCustomPlot更改图例legen
  • 【物联网树莓派毕设01】树莓派4B快速实现VNC连接

    一 前言 最近准备开始做毕设了 xff0c 想着找个地方记录一下遇到的问题 xff0c 怎么解决的 xff0c 希望能够给有需要的人一些帮助 xff0c 有什么问题还请指正 这次毕设选题是基于物联网技术的酒店管理系统 xff0c 其实是基于
  • 不忘初心牢记使命文化励志标语墙贴——个性一百剪纸

    不忘初心牢记使命手工剪纸 个性一百定制服务中心 xff0c 可快速定制各类家居家具用品 工艺礼品 图案造型 xff0c 提供从构思到设计到制作一条龙服务 xff0c 您敢想我们敢做 不忘初心牢记使命绘画贴纸 我们不局限于某种商品 xff0c
  • 动态建模——UML活动图

    1 活动图 xff1a 展示了动作或活动的执行步骤及结果 2 作用 xff1a xff08 1 xff09 描述在用例描述时 xff0c 用例的实例是如何让执行动作 xff0c 改变对象状态的 xff08 2 xff09 可以清晰的展示出活

随机推荐

  • 华为交换机常用命令(一)

    历史命名查询 display history command 配置主机名 sys sysname xxx 状态信息查询 display version display users 进入接口模式并查看信息 int g0 0 1 dis thi
  • NoSQL之 Redis配置与优化

    NoSQL之 Redis配置与优化 关系数据库与非关系型数据库关系型数据库和非关系型数据库区别 Redis简介Redis 安装部署Redis 命令工具Redis 数据库常用命令 Redis 高可用Redis 持久化RDB 持久化AOF 持久
  • MQ-2烟雾浓度传感器(STM32F103)

    本实验是通过串口调试助手显示STM32F103C8T6采集到MQ 2传感器的电压值 一 概述 1 简介 MQ 2可用于家庭和工厂的气体泄漏监装置 xff0c 适宜于液化气 丁烷 丙烷 甲烷 酒精 烟雾等的探测 它的优点是灵敏度高 响应快 稳
  • Java-异常

    什么是异常 xff1f 异常是指程序运行时 xff0c 导致正常流程被中断的事件 异常分类 可查异常 xff1a CheckedException xff08 要么try catch住 要么往外抛 xff0c 谁调用 xff0c 谁处理 如
  • 51单片机学习篇-- --蜂鸣器的使用

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 蜂鸣器是个啥 蜂鸣器一般分为两种 xff0c 一种是无源蜂鸣器 xff0c 一
  • 51单片机学习篇-- --基于51单片机的串口通信协议

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 开篇 计算机按照下行数据通信协议 xff0c 串口发送数据 xff0c 地址为
  • 卸载rancher出现的问题

    卸载rancher出现如下报错 error unable to retrieve the complete list of server APIs custom metrics k8s io v1beta1 the server is cu
  • docker审计日志过大导致磁盘IO

    问题 xff1a 节点发生磁盘io 节点审计日志量较大 xff0c 由于操作系统内核缺陷 xff0c 会低概率出现io卡主 影响版本 xff1a v1 15 11 v 1 17 9 查看节点是否有问题 1 登录节点 2 如果有类似下图的回显
  • linux 环境命令随记

    sh steve bourne bash bourne again shell gpl centos和ubuntu 默认使用 csh c shell C语言风格 tcsh ksh xff1a korb shell aix默认shell zs
  • sed命令的使用

    sed命令 格式 sed 选项 脚本命令 文件名 选项 n 使用安静silent模式 在一般sed的用法中 xff0c 所有来自stdin的内容一般都会被列出到屏幕上 但如果加上 n参数后 xff0c 则只有经过sed特殊处理的那一行 或者
  • docker安装和info信息

    docker 容器的历史 xff1a 1 Chroot Jail 就是我们常见的 chroot 命令的用法 它在 1979 年的时候就出现了 xff0c 被认为是最早的容器化技术之一 它可以把一个进程的文件系统隔离起来 2 The Free
  • docker镜像管理

    docker镜像管理 镜像结构和原理 镜像就是创建容器的模版 xff0c 含有容器启动所需要的文件系统及所需要的内容 xff0c 因此镜像主要用于方便和快速创建启动容器 镜像结构 xff1a 一个典型的 Linux文件系统由 bootfs
  • 容器操作基础命令随记

    容器操作基础命令 命令周期 一次性启动容器docker run 一次性运行容器 xff0c 退出后立即删除 xff0c 用于测试 root 64 localhost docker run rm alpine cat etc issue We
  • SRE-Google运维解密随记-1

    雇佣系统管理员 sysadmin 运维复杂的计算机系统 xff0c 是行业内一直以来的普遍做法 这些系统管理员负责将现成的软件组件部署于生产环境中 xff0c 对外提供某种业务服务 系统管理员的主要工作在于应对系统中产生的各种需要人工干预的
  • SpringCloud-Netflix并没有闭源、Eureka1.X也没有闭源

    网上流行的说法 xff1a Netflix的Eureka 闭源了 xff08 不实 xff09 引起一些人的焦虑 恐慌 xff0c SpringCloud Netflix是不是就不能用了 xff0c 没人维护了 真相 xff1a 1 Spr
  • SRE-Google运维解密随记-2-服务目标质量

    服务质量指标 SLI 服务质量目标 SLO 服务质量协议 SLA 这三项分别是指该服务最重要的一些基础指标 这些指标的预期值 xff0c 以及当指标不符合预期时的应对计划 事先选择好合适的指标有助于在故障发生时帮助SRE进行更好地决策 xf
  • SRE-Google运维解密随记-3-分布式系统的监控

    监控的大部分通用的术语 xff1a 监控 monitoring 收集 处理 汇总 xff0c 并且显示关于某个系统的实时量化数据 xff0c 例如请求的数量和类型 xff0c 错误的数量和类型 xff0c 以及处理用时 xff0c 应用服务
  • SRE-Google运维解密随记-4

    自动化系统的演进 草率地进行自动化可能在解决问题的同时产生出其他问题 因此 xff0c 虽然我们认为在大多数情况下以软件为基础的自动化是优于手动操作的 xff0c 但是比 这两个选择更好的方案是一个不需要这些的系统设计一个自治的系统 或者换
  • linux下查看wwn号

    linux终端命令行中通过 cat sys class fc host host port name 命令查看wwn号即可 cat sys class fc host host port name
  • Linux系统权限集中管理项目案例实践

    目录 1 1 etc syduoers配置语法注意事项 1 2 etc sudoers配置文件别名知识 1 3 在 etc sudoers配置文件中 xff0c 别名和配置语法的对应关系表 1 4 利用别名配置授权实践案例 2 企业环境中用