标签 centos7 下的文章

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:显示版本信息并退出。


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