分类 Window 下的文章

软件 | Veracrypt开源加密软件-硬盘、U盘、文件夹加密


描述

VeraCrypt是一款适用于Windows、Mac OSX和Linux的免费开源磁盘加密软件。基于TrueCrypt 7.1a。

主要功能

  • 在文件中创建虚拟加密磁盘,并将其作为真实磁盘装载。
  • 对整个分区或存储设备(如USB闪存驱动器或硬盘驱动器)进行加密。
  • 加密安装Windows的分区或驱动器(启动前身份验证)。
  • 加密是自动、实时(动态)和透明的。
  • 并行化和流水线技术使数据的读写速度与驱动器未加密时一样快。
  • 加密可以在现代处理器上进行硬件加速。
  • 提供合理的否认,以防对手强迫你透露密码:隐藏卷(隐写术)和隐藏操作系统。

下载地址

官方下载网址

使用流程(加密文件夹,挂载成磁盘)

  1. 安装的话就是普通软件的安装流程
  2. 软件主界面点击创建加密卷
    微信截图_20230704100252.png
  3. 选在创建文件型加密卷
    微信图片编辑_20230704100508.jpg
  4. 选择标准的加密卷,隐藏的文件描述特别逗,都能感觉到画面。。。
    微信图片编辑_20230704100508.jpg
  5. 选择加密卷存放的位置
    微信图片编辑_20230704100508.jpg
  6. 配置加密算法,对于我来说默认就行,没人没事闲的处理这些玩应
    微信截图_20230704100857.png
  7. 设置加密卷的大小,这里是文件夹挂载磁盘,所以生成文件的大小就是设置的大小,也是挂载加密磁盘后的大小。
    微信截图_20230704101059.png
  8. 配置加密卷的密码,下一步的时候密码太简单会有提示
    微信截图_20230704101247.png
  9. 格式化加密卷,其中需要移动鼠标来构建随机加密的字符串
    微信截图_20230704101404.png
  10. 最后格式化完成创建
    微信截图_20230704101616.png
  11. 挂载加密卷文件为本地磁盘
    微信截图_20230704102135.png
  12. 挂载成功,正常使用。
    屏幕截图 2023-07-04 100038.jpg

创建加密磁盘/U盘流程(待处理)

  1. 优先把U盘或磁盘的加密分区分出来格式化一下。我用的工具是DiskGenius
  2. 软件主界面点击创建加密卷
  3. 选在创建加密非系统分区/设备
    屏幕截图 2023-07-05 073400.jpg
  4. 选择标准的加密卷(与加密卷一致)
  5. 选择加密卷存放的位置
  6. 配置加密算法,对于我来说默认就行,没人没事闲的处理这些玩应
  7. 加密卷的大小不用设置,直接是磁盘大小。
    屏幕截图 2023-07-05 073545.jpg
  8. 配置加密卷的密码,下一步的时候密码太简单会有提示
  9. 格式化加密卷,其中需要移动鼠标来构建随机加密的字符串
  10. 最后格式化完成创建
  11. 挂载加密卷磁盘为本地磁盘(或者选中挂载符直接点全部加载)
    微信截图_20230705100407.png
  12. 输入密码,挂载成功,正常使用。

这里挂载需要注意一下,因为Veracrypt把磁盘变成里加密卷,所以window不能直接识别,每次插入都会提示【使用驱动器中的光盘之前需要将其格式化】,你说加密了你还不能格式话,格式完就成普通磁盘了。
微信图片编辑_20230705094656.jpg


Docker | -v 对挂载的目录没有权限 Permission denied


情况

今天用docker部署jenkins的时候碰到问题了,挂载的目录权限出现了问题。本人的解决办法是临时关闭selinux即可

报错代码

touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

问题所在

centos7中安全模块selinux把权限禁掉了。

jenkins的composer

version: "3"
services:
  jenkins:
    build: .
    container_name: jenkins
    ports:
      - "8083:8080"
    volumes:
      - "/home/jenkins:/var/jenkins_home"
    image: jenkins/jenkins:lts
    restart: always

处理流程

  1. 先不添加挂载的情况查看一下文件需要的用户权限是啥,这里显示的是jenkins:jenkins
    屏幕截图 2023-06-28 105338.jpg
  2. 心思直接赋上1000的权限,才发现容器内外权限不能通用
  3. 临时禁用selinux
setenforce 0
  1. 启动jenkins容器即可

四种解决方案

1.在运行时加 --privileged=true

docker run -d -p 8083:8080 -v /home/jenkins:/var/jenkins_home --privileged=true --name jenkins jenkins/jenkins:lts

2.临时关闭selinux然后再打开

[root@localhost home]# setenforce 0
[root@localhost home]# docker start jenkins
[root@localhost home]# setenforce 1

3.永久关闭selinux,修改/etc/selinux/config

SELINUX=enforcing
改为
SELINUX=disabled

4.添加linux规则,把要挂载的目录添加到selinux白名单

chcon -Rt svirt_sandbox_file_t /home/jenkins/

chcon命令简介

chcon命令 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用--reference选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于/usr/bin/chcon。

语法

chcon [选项]... 环境 文件...
chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
chcon [选项]... --reference=参考文件 文件...

选项

-h, --no-dereference:影响符号连接而非引用的文件。

--reference=参考文件:使用指定参考文件的安全环境,而非指定值。

-R, --recursive:递归处理所有的文件及子目录。
-v, --verbose:为处理的所有文件显示诊断信息。
-u, --user=用户:设置指定用户的目标安全环境。
-r, --role=角色:设置指定角色的目标安全环境。
-t, --type=类型:设置指定类型的目标安全环境。
-l, --range=范围:设置指定范围的目标安全环境。

以下选项是在指定了-R选项时被用于设置如何穿越目录结构体系。如果您指定了多于一个选项,那么只有最后一个会生效。

-H:如果命令行参数是一个通到目录的符号链接,则遍历符号链接。
-L:遍历每一个遇到的通到目录的符号链接。
-P:不遍历任何符号链接(默认)。
--help:显示此帮助信息并退出。
--version:显示版本信息并退出。


CMake: 引入三方库及打包当前项目


前述

这里整一个cmake引入三方库及导出安装包的示例代码。
引入三方库用的是

set(*_DIR "**")
find_package(*)
target_link_libraries(${PROJECT_NAME} PRIVATE *)

导出安装报用到的是

install(TARGETS ${PROJECT_NAME} 
    RUNTIME 
    DESTINATION bin
)

install(
    FILES
    $<TARGET_FILE:*>
    DESTINATION bin
)
include (InstallRequiredSystemLibraries)\
...此处为CPack配置...
include(CPack)

示例

test.zip
Git testMain
Git testLib

CPack文档地址

https://cmake.org/cmake/help/latest/manual/cpack-generators.7.html

代码

部分代码已注释,具体详解也写道对应的注释里了。

cmake_minimum_required(VERSION 3.5.0)
project(testMain VERSION 0.1.1 LANGUAGES C CXX)

# set(testLib_DIR "Y:\\thirdparty\\testLib\\cmake")   # 如果不是安装形式的第三方库需要设置对应目录
find_package(testLib REQUIRED)                      # 查找已安装的三方库

include_directories(include)                        # 添加头文件路径
file(GLOB FILES_SRC "src/*.cpp")                    # 添加当前目录下的源文件至FILES_SRC

add_executable(${PROJECT_NAME} "main.cpp" ${FILES_SRC})

target_link_libraries(${PROJECT_NAME} PRIVATE testLib)

add_custom_command(                                 # 将自定义构建规则添加到生成的构建系统
    TARGET ${PROJECT_NAME}  POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:testLib> $<TARGET_FILE_DIR:${PROJECT_NAME}>         # 复制testLib.dll文件到目标目录
    # COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>/bin/                              # 创建bin目录存放三方dll
    # COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:testLib> $<TARGET_FILE_DIR:${PROJECT_NAME}>/bin/    # 复制dll库到bin目录
)

# add_custom_target(                                  # 增加一个没有输出的目标(总会被构建)
#     CopyFile
#     VERBATIM
#     COMMAND_EXPAND_LISTS
#     COMMAND ${CMAKE_COMMAND} -E copy_if_different
#     $<TARGET_FILE:testLib> $<TARGET_FILE_DIR:${PROJECT_NAME}>
# )

install(TARGETS ${PROJECT_NAME} 
    RUNTIME 
    DESTINATION bin                                 # 指定安装目录
)

install(
    FILES
    $<TARGET_FILE:testLib>
    DESTINATION bin                                 # 指定文件复制目录
)

############################## 打包 ##############################
include (InstallRequiredSystemLibraries)
# set(CPACK_GENERATOR ZIP)                            # 指定打包成ZIP
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")  #设置安装界面的License
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")      #设置架构
set(CPACK_DEBIAN_PACKAGE_NAME "测试软件")           #设置程序名,就是程序安装后的名字
set(CPACK_PACKAGE_NAME "测试软件")                  #设置安装包的包名,打好的包将会是<packagename>-<version>-<sys>.deb,如果不设置,默认是工程名
set(CPACK_PACKAGE_VERSION "1.0.0")                  #设置版本号
set(CPACK_SYSTEM_NAME "win64")                      #系统名
SET(CPACK_PACKAGE_DESCRIPTION "这是一个测试软件 项目包")        #设置description
SET(CPACK_PACKAGE_CONTACT "root@bug-maker.com")     #设置联系方式
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "猪在天上飞")   #设置维护人
# set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/DEBIAN/postinst;${CMAKE_SOURCE_DIR}/DEBIAN/postrm;")  #设置包的安装脚本
include(CPack)

结果


Centos7: 添加bind9的DNS服务


需求

内网需要的服务比较多了,不能都用IP地址来处理相关服务,得搭建个内网的DNS服务器来区分相关业务。

安装bind

这里选择yum直接安装,也可以编译安装使用。

yum install bind bind-utils

配置bind主配置文件

vim /etc/named.conf

// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
        #listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { 127.0.0.1; 192.66.0.113; }; # 这里添加本机地址或者直接any也可以
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };    # 这里需要注意一下修改成any,要不其他机器不能访问
        forward only;
        forwarders {223.5.5.5;8.8.8.8;}; # 添加上游DNS

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recurs                                                                                                                                                                                                                                                                     ion.
         - If you are building a RECURSIVE (caching) DNS server, you need to ena                                                                                                                                                                                                                                                                     ble
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable                                                                                                                                                                                                                                                                      access
           control to limit queries to your legitimate users. Failing to do so w                                                                                                                                                                                                                                                                     ill
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;   # 允许向上游查询为yes,反之为no

        dnssec-enable no;  # 安全检查,修改成no。要不会导致未配置的域名不向上游查询,导致查询错误
        dnssec-validation no;  # 安全检查,修改成no。要不会导致未配置的域名不向上游查询,导致查询错误

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

域名配置

vim /etc/named.rfc1912.zones

// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};

zone "code.ciomp" IN {
        type master;
        file "code.ciomp.zone";
        allow-update { any; };
};
# 添加自己需要配置的域名
zone "ciomp-code.com" IN {
        type master;
        file "ciomp-code.com.zone";  #此为此域名对应配置文件名
        allow-update { any; };
};

域名详细配置

这里注意一下目录,由于主配置中配置了文件夹。相对的域名配置文件直接放在这即可。

vim /var/named/ciomp-code.com.zone

$ORIGIN  ciomp-code.com.
$TTL    600 ; 10 minutes
@   IN SOA dns.ciomp-code.com. dnsadmin.ciomp-code.com. (
                2023062101   ; serial
                10800        ; refresh (3 hours)
                900          ; retry  (15 minutes)
                604800       ; expire (1 week)
                86400        ; minimum (1 day)
                )
            NS  dns.ciomp-code.com.
$TTL    60  ; 1 minute
*       A 10.66.0.11
  • 注意:serial字段在每次修改配置文件时数值+1

启动dns服务

systemctl start named ## 启动dns
systemctl enable named ## 设置开机启动

  • 注意:系统防火墙的53端口记得需要开放出来

检查

dns服务检查

[root@localhost named]# netstat -lntup | grep 53
tcp        0      0 192.66.0.113:53         0.0.0.0:*               LISTEN      7473/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      7473/named
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      7473/named
tcp6       0      0 ::1:53                  :::*                    LISTEN      7473/named
tcp6       0      0 ::1:953                 :::*                    LISTEN      7473/named
udp        0      0 192.66.0.113:53         0.0.0.0:*                           7473/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           7473/named
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           869/avahi-daemon: r
udp6       0      0 ::1:53                  :::*                                7473/named
[root@localhost named]#

客户端检查(需要将DNS地址修改成DNS服务器的ip)

C:\Users\Administrator>nslookup www.ciomp-code.com
服务器:  UnKnown
Address:  192.66.0.113

名称:    www.ciomp-code.com
Address:  10.66.0.11

Win访问Linux samba拒绝访问(无效句柄)


摘要

samba的环境是Linux下的docker配置的,镜像是dperson/samba,家里的服务器用的一点问题都没有,所里的服务器配置之后同事挂载就会出现【位置不可用,无效句柄】的错误提示,尤其实在访问个文件夹回到根目录的时候就很容易出现这个提示,需要重新挂载才能好使,这样还不如不用。上网查了一下,有说配置文件有问题,有说目录权限有问题,都尝试了一下还是没解决,最后发现是selinux的问题。

问题

屏幕截图 2023-05-31 135250.jpg

解决办法

宿主机处理就可以。SELinux设置自由模式后重启一下smb服务再挂载就好了。。

[root@localhost ~]# setenforce 0    # 将SELinux设置为自由(permissive)模式
setenforce: SELinux is disabled
[root@localhost ~]# setenforce 1    # 将SELinux设置为强制(enforcing)模式
setenforce: SELinux is disabled
[root@localhost ~]#