管理员 发布的文章

InnoSteup | 打包后由于执行权限导致无法执行问题


描述

在win11系统安装用InnoSetup封装的程序,安装完成运行程序时,不是无法运行就是运行后闪退,涉及执行权限不够,因为默认安装的目录在C:Program Files(x86)下,正常安装进去是没有足够权限运行,会报错导致无法运行。

解决办法

方法1:修改Inno Setup创建出来的iss内的代码

启动Inno Setup进行编译时,输入相关编译基础信息后,会根据输入的相关内容自动生成编译脚本,在脚本中加入以下2行脚本内容:

[Dirs]
Name: {app}; Permissions: users-full

因为默认生成的脚本是没有[Dirs]这个字段的,增加这两行脚本后,打包的程序的安装目录拥有完全控制的权限。

方法2:修改SetupLdr.e32下的配置文件

使用Resource Hacker 修改 INNO安装目录下的SetupLdr.e32文件中的Manifest内容
修改SetupLdr.e32第24行内容:

原文:<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
修改为:<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>

注意编译后保存!!!


Linux | Python3.10.13源码编译安装


需求

最近再适配统信的机器,但是统信的源里的软件都不是最新的,python最高版本就能支持到3.7。然而这边的三方需要的python版本是3.10的,而且需要dev版本,就需要自己重新编译了。

基础依赖环境安装

sudo apt install libffi-dev tcl-dev tk-dev libbz2-dev zlib1g-dev libsqlit3-dev libxml2-dev libssl-dev libxslt1-dev liblzma-dev libreadline-dev llvm libncurses5-dev libncursesw5-dev xz-utils libgdbm-dev libncurses-dev

编译及安装

cas_user@casuser:/data/home/cas_user/code/$ tar -zxvf Python-3.10.13.tgz  # 解压
cas_user@casuser:/data/home/cas_user/code/$ cd Python-3.10.13
cas_user@casuser:/data/home/cas_user/code/Python-3.10.13$ ./configure --prefix=/home/user/python_install_path --enable-shared CFLAGS=-fPIC  # 配置参数
cas_user@casuser:/data/home/cas_user/code/Python-3.10.13$ make -j8 && sudo make install  # 编译及安装

配置参数解析

配置项解释
--prefix=path指定安装目录
--enable-shared生成.so动态库
CFLAGS=-fPIC编译选项
--enable-optimizations启用优化

其他参数以后补充。


C++ | 一个毫秒的时间统计的代码。。


描述

所里需要在软件中添加并行下的代码运行时间,本来是想用ctime库直接统计,但是发现有些计算太微妙,不好统计。直接用毫秒来统计是一个比较好的办法

示例代码

#include <iostream>
#include <chrono>
void function1()
{
    // 第一个函数的代码
}
void function2()
{
    // 第二个函数的代码
}
int main()
{
    int total_iterations = 10000;
    // 循环的总迭代次数
    auto start_time_outer = std::chrono::high_resolution_clock::now();
    // 记录整个循环的开始时间
    for (int i = 0; i < total_iterations; i++)
    {
        auto start_time_function1 = std::chrono::high_resolution_clock::now();
        // 记录第一个函数的开始时间
        function1();
        // 调用第一个函数
        auto end_time_function1 = std::chrono::high_resolution_clock::now();
        // 记录第一个函数的结束时间
        auto start_time_function2 = std::chrono::high_resolution_clock::now();
        // 记录第二个函数的开始时间
        function2();
        // 调用第二个函数
        auto end_time_function2 = std::chrono::high_resolution_clock::now();
        // 记录第二个函数的结束时间
        auto duration_function1 = std::chrono::duration_cast<std::chrono::microseconds>(end_time_function1 - start_time_function1);
        // 计算第一个函数的执行时间
        auto duration_function2 = std::chrono::duration_cast<std::chrono::microseconds>(end_time_function2 - start_time_function2);
        // 计算第二个函数的执行时间
        std::cout << "Function 1 time in each loop iteration is: " << duration_function1.count() << " microseconds" << std::endl;
        std::cout << "Function 2 time in each loop iteration is: " << duration_function2.count() << " microseconds" << std::endl;
    }
    auto end_time_outer = std::chrono::high_resolution_clock::now();
    // 记录整个循环的结束时间
    auto duration_outer = std::chrono::duration_cast<std::chrono::microseconds>(end_time_outer - start_time_outer);
    // 计算整个循环的执行时间
    std::cout << "The overall loop time is: " << duration_outer.count() << " microseconds" << std::endl;
    return 0;
}

OpenSSH | 更新到最新版本修复CVE-2023-38408


描述

2023年7月19日,OpenSSH发布紧急安全补丁,解决OpenSSH ssh-agent转发中存在安全漏洞远程执行CVE-2023-38408。CVE-2023-38408是一个远程代码执行漏洞,位于 ssh-agent 的转发功能内,特别是涉及提供PKCS#11相关服务的情况下。在某些条件下,可以操纵ssh-agent对PKCS#11的支持,以便通过转发的代理套接字来促进远程代码执行。利用的先决条件包括受害者系统上存在特定库以及需要将代理转发到攻击者控制的系统。

解决办法

1 . 升级到OpenSSH 9.3p2或更高版本:升级到最新版本的OpenSSH至关重要,因为它包含缓解漏洞的关键补丁。确保所有相关系统和服务器及时更新至推荐版本或更高版本。

2 . 另外采取预防措施来避免被利用:

建议在仅仅OpenSSH用于远程主机管理的机器,通过Openssh配置(sshd_config)、防火墙,安全组ACL等限制来源访问IP为白名单仅可信IP地址,同时,非必要,关闭SSH代理转发功能,禁止在有关主机启用ssh隧道等。

关闭SSH代理转发功能方法为:
配置/etc/ssh/sshd_config
AllowTcpForwarding NO

本人选择了更新Openssh的版本(头硬)

这边是Centos7的系统,默认的Openssh版本是

准备工作(保证编译安装不正确情况下能正常连接服务器)

1 . 安装对应服务

yum install telnet* xinetd  # 安装telnet服务

2 . 配置xinetd
下面文件内容需要自己创建文件或者编辑

  • vim /etc/xinetd.d/telnet

service telnet
{

flags=REUSE
socket_type=stream
wait=no
user=root
server=/usr/sbin/in.telnetd
log_on_failure += USERID
disable= no

}

3 . 启动相关服务

# 设置服务开机自启及启动
systemctl enable xinetd.service
systemctl enable xinetd.service
systemctl enable telnet.socket
systemctl start xinetd

# 设置防火墙放通telnet
firewall-cmd --zone=public --add-port=23/tcp --permanent
firewall-cmd --complete-reload

# 添加telnet用户(不能直接用root登录)
useradd telnet
passwd telnet

编译安装

1 . 使用telnet形式登录后su到管理员

2 . 下载源码解压

阿里云(官方推荐镜像站):https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/
openssh-9.3p2源码下载地址

wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.3p2.tar.gz
tar -zxvf openssh-9.3p2.tar.gz
# 停止当前ssh服务
systemctl stop sshd

3 . 备份相关信息

# 备份当前ssh服务及配置
cp -a /etc/ssh /etc/ssh.bak
cp -a /usr/sbin/sshd /usr/sbin/sshd.bak
cp -a /usr/bin/ssh /usr/bin/ssh.bak
# 删除老配置
rm -rf /etc/ssh/*

# 卸载已安装的openssh相关软件包
rpm -e `rpm -qa | grep openssh` --nodeps

4 . 配置

#编译预配置
cd openssh-9.3p2 && ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-zlib --with-ssl-dir=/usr/local/openssl --with-md5-passwords --with-pam

configure.jpg

5 . 编译及安装

make
make install

这里编译安装会出现一些问题。提示Ubable to load host key "/etc/ssh/ssh_host_*_key": bad permission等文件权限的错误。
makeInstallError.jpg

问题解决办法:
直接重新给文件附上权限

chomd 0600 /etc/ssh/ssh_host_*_key

屏幕截图 2023-07-25 145132.jpg

6 . 启动

# 检查并删除老版本启动脚本
ls /usr/lib/systemd/system/ssh*
rm -f /usr/lib/systemd/system/ssh*

# 拷贝启动脚本
cp contrib/redhat/sshd.init /etc/init.d/sshd
# 拷贝sshd.pam配置文件
cp contrib/redhat/sshd.pam /etc/pam.d/

# 建立软连接
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/# 若报错可将已存在的文件重命名,再执行软连接

systemctl daemon-reload

# 启动并设置开机自启动
systemctl start sshd && systemctl enable sshd
# 允许root远程登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 启动ssh服务
systemctl start sshd
# 查看ssh服务状态
systemctl status sshd

启动ssh服务报错:

Starting sshd:/etc/rc.d/init.d/sshd: line 49: /usr/sbin/sshd: No such file or directory
Failed to start SYSV: Openssh server daemon.

解决办法:

cp -a /usr/local/openssh/sbin/sshd /usr/sbin/sshd

屏幕截图 2023-07-25 145211.jpg

7 . 准备战斗结束

# 删除telnt
systemctl stop telnet.socket
systemctl disable telnet.socket

#删除防火墙放行端口
firewall-cmd --remove-port=23/tcp --permanent
firewall-cmd --reload

# 启动ssh服务
systemctl start sshd

屏幕截图 2023-07-25 145242.jpg
屏幕截图 2023-07-26 105921.jpg