我在启用了 selinux 的 fedora 上运行 SAMBA 服务器。我在尝试以 身份在 smb.conf 中运行 bash 脚本时遇到问题root preexec
。
该脚本是可执行的,chmod +x
如果从命令行运行,脚本运行良好。
问题是当我尝试访问应该触发的共享文件夹时,我从 selinuxroot preexec
获得了 AVC 。/var/log/audit/audit.log
如何告诉 selinux 允许root preexec
使用 samba 运行脚本?
我在启用了 selinux 的 fedora 上运行 SAMBA 服务器。我在尝试以 身份在 smb.conf 中运行 bash 脚本时遇到问题root preexec
。
该脚本是可执行的,chmod +x
如果从命令行运行,脚本运行良好。
问题是当我尝试访问应该触发的共享文件夹时,我从 selinuxroot preexec
获得了 AVC 。/var/log/audit/audit.log
如何告诉 selinux 允许root preexec
使用 samba 运行脚本?
这对我来说有点搞笑。我有一个文件,我正在循环运行awk和cut命令,由head命令提供。命令是:
head -n X all.du.K.txt | while read line ; do NON_APP=$(echo ${line} | awk '{print $1}' | cut -d"," -f2) ; APP=$(echo ${line} | awk '{print $2}' | cut -d"," -f2) ; PATH=$(echo ${line} | awk '{print $3}') ; echo ${PATH},${NON_APP},${APP} ; done >> final.csv
如果 X 是 1,它可以工作,但如果 X 是 2 或任何其他数字,我就会收到以下错误:
head -n 2 all.du.K.txt | 读取行时;执行 NON_APP=$(echo ${line} | awk '{print $1}' | cut -d"," -f2) ; APP=$(echo ${line} | awk '{print $2}' | cut -d"," -f2) ; PATH=$(echo ${line} | awk '{print $3}') ; echo ${PATH},${NON_APP},${APP} ; 完成 >> final.csv
命令“cut”可在以下位置使用
- /bin/cut
- /usr/bin/cut 无法找到命令,因为 '/bin:/usr/bin' 未包含在 PATH 环境变量中。cut:未找到命令 命令“awk”可在以下位置使用
- /bin/awk
- /usr/bin/awk 无法找到命令,因为 '/bin:/usr/bin' 未包含在 PATH 环境变量中。awk:未找到命令 命令“awk”可在以下位置使用
- /bin/awk
- /usr/bin/awk 无法找到命令,因为 '/usr/bin:/bin' 未包含在 PATH 环境变量中。awk:未找到命令 命令“cut”可在以下位置使用
- /bin/cut
- /usr/bin/cut 无法找到命令,因为 '/usr/bin:/bin' 未包含在 PATH 环境变量中。cut:未找到命令 命令“awk”可在以下位置使用
- /bin/awk
- /usr/bin/awk 找不到命令,因为 PATH 环境变量中不包含“/usr/bin:/bin”。awk:未找到命令
我的 $PATH 环境如下:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
如果在set -x on 的情况下运行上述循环,我会得到以下输出,仅供大家参考:
- head -n 2 all.du.K.txt
- 读取行 ++ echo /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c,5375K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c,17086K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c ++ awk'{打印$ 1}' ++ cut -d,-f2
- NON_APP = 5375K ++ echo /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c,5375K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c,17086K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c ++ awk'{打印$ 2}' ++ cut -d,-f2
- APP = 17086K ++ echo /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c,5375K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c,17086K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c ++ awk'{打印$ 3}'
- PATH = / var / opt / gitlab / gitlab-rails /共享/artifacts / e0 / e7 / e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c
- 回显/var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c,5375K,17086K
- 读取行 ++ echo /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4,145K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4,191K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4 ++ awk '{print $1}' ++ '[' -x /usr/lib/command-not-found ']' ++ cut -d, -f2 ++ /usr/lib/command-not-found -- awk ++ '[' -x /usr/lib/command-not-found ']' ++ /usr/lib/command-not-found -- cut 命令 'cut' 可在以下位置使用
- /bin/cut
- /usr/bin/cut 无法找到命令,因为 '/usr/bin:/bin' 未包含在 PATH 环境变量中。cut:未找到命令 命令“awk”可在以下位置使用
- /bin/awk
- /usr/bin/awk 找不到命令,因为 '/usr/bin:/bin' 未包含在 PATH 环境变量中。awk:未找到命令 ++ 返回 127 ++ 返回 127
- NON_APP = ++ 回显/var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4,145K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4,191K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4 ++ awk '{print $2}' ++ '[' -x /usr/lib/command-not-found ']' ++ /usr/lib/command-not-found -- awk ++ cut -d, -f2 ++ '[' -x /usr/lib/command-not-found ']' ++ /usr/lib/command-not-found -- cut 命令'cut'可在以下位置使用
- /bin/cut
- /usr/bin/cut 无法找到命令,因为 '/bin:/usr/bin' 未包含在 PATH 环境变量中。cut:未找到命令 命令“awk”可在以下位置使用
- /bin/awk
- /usr/bin/awk 找不到命令,因为 '/usr/bin:/bin' 未包含在 PATH 环境变量中。awk:未找到命令 ++ 返回 127 ++ 返回 127
- APP = ++ echo /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4,145K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4,191K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4 ++ awk '{print $3}' ++ '[' -x /usr/lib/command-not-found ']' ++ /usr/lib/command-not-found -- awk 命令 'awk' 可在以下位置使用
- /bin/awk
- /usr/bin/awk 找不到命令,因为 PATH 环境变量中不包含“/usr/bin:/bin”。awk:未找到命令 ++ 返回 127
- 路径=
- 回音,,
- 读行
来自我的输入文件的示例:
/var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c,5375K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c,17086K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/e7/e0e72896f2d07d134de6efb2d6541bed7e297e17f010f67f30247abc56d92c6c /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4,145K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4,191K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/38/e03865e0382175da3126eb126534c2d3c9b4cf69483fa8a167d05c070360edc4 /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/f2/e0f23d7875aff9c6b4ef20f27e7d38c4e312811ae627319267f566a4dc244636,168K /var/opt/gitlab/gitlab-rails/shared/artifacts/e0/f2/e0f23d7875aff9c6b4ef20f27e7d38c4e312811ae627319267f566a4dc244636,555K /var/opt/gitlab/gitlab-rails/共享/artifacts/e0/f2/e0f23d7875aff9c6b4ef20f27e7d38c4e312811ae627319267f566a4dc244636
知道这里发生了什么有趣的事情吗? Bash 版本是“GNU bash,版本 5.0.17(1)-release (x86_64-pc-linux-gnu)”
我有一个 bash 脚本,我想获取给定网络适配器(在我的情况下为“ens18”)的全局 IPv6 地址。首先,我发出了以下命令:
ip -6 addr
这给了我以下输出,其中包含我正在寻找的地址:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 fd00::3170:4ff:eff4:a4ab/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 6736sec preferred_lft 3136sec
inet6 2a02:8070:2982:4300:3170:4ff:eff4:a4ab/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 6736sec preferred_lft 3136sec
inet6 af60::3170:4ff:eff4:a4ab/64 scope link
valid_lft forever preferred_lft forever
3: br-7ac197bd041e: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 af60::42:80ff:fe52:3481/64 scope link
valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 af60::42:6eff:fecf:5e6/64 scope link
valid_lft forever preferred_lft forever
6: veth074f8b0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 af60::7073:40ff:fe59:aad0/64 scope link
valid_lft forever preferred_lft forever
8: vethe85ed67@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 af60::5c09:65ff:fe34:34f4/64 scope link
valid_lft forever preferred_lft forever
因此全局 IPv6 地址为“2a02:8070:2982:4300:3170:4ff:eff4:a4ab”。
如何从我的 bash 脚本中可靠地检索该值?
当我在 bash shell 中运行以下命令时:
if [[ $(readonly | cut -d= -f1 | grep -qo HISTFILE && echo $?) == 0 ]]; then sudo grep -iwo "readonly HISTFILE" /etc/profile /etc/profile.d/*; else echo "HISTFILE not set or not set properly"; fi
上面的命令返回了我想要的结果,即:
/etc/profile.d/os-security.sh:readonly HISTFILE
但是当我将上述命令放入 shell 脚本中时,结果发生了变化,即:
HISTFILE not set or not set properly
这里是完整的外壳:
[ansible@rhel8-hardening-test ~]$ if [[ $(readonly | cut -d= -f1 | grep -qo HISTFILE && echo $?) == 0 ]]; then sudo grep -iwo "readonly HISTFILE" /etc/profile /etc/profile.d/*; else echo "HISTFILE not set or not set properly"; fi
/etc/profile.d/os-security.sh:readonly HISTFILE
[ansible@rhel8-hardening-test ~]$
[ansible@rhel8-hardening-test ~]$
[ansible@rhel8-hardening-test ~]$
[ansible@rhel8-hardening-test ~]$ cat test.sh
#!/bin/bash
if [[ $(readonly | cut -d= -f1 | grep -qo HISTFILE && echo $?) == 0 ]]; then sudo grep -iwo "readonly HISTFILE" /etc/profile /etc/profile.d/*; else echo "HISTFILE not set or not set properly"; fi
[ansible@rhel8-hardening-test ~]$
[ansible@rhel8-hardening-test ~]$
[ansible@rhel8-hardening-test ~]$
[ansible@rhel8-hardening-test ~]$ bash test.sh
HISTFILE not set or not set properly
[ansible@rhel8-hardening-test ~]$
当我使用上述命令的 shell 脚本时,如何才能获得与当前 shell 相同的结果?
我希望 bash sort 能够像这样比较字符串:
出于某种原因,这似乎不是事实。
让我们接受以下输入:
a
b
.
-
这是由 bash sort 排序的
-
.
a
b
现在,输入
b.de
bb.de
我期望排序结果如下:
b.de
bb.de
因为第一个字符是相等的,并且对于第二个字符来说,.
它在前面b
(如在第一个测试中所见)。
由于某种原因,情况并非如此,字符串的排序如下:
bb.de
b.de
为什么会sort
出现这样的行为?有没有办法让它表现得“如预期”?
我已经使用 python 测试了同样的例子,python 的排序与预期一致。
我正在尝试创建一个文件夹结构来测试备份脚本。文件夹是基于日期的,并且将具有文件夹名称的修改日期。
为此,我创建了一个日期列表并对其进行迭代,创建了目录并将修改时间设置为该日期。
#!/bin/bash
dates="2024-01-01 2024-01-02" # + many more.
for d in $dates ; do
mkdir "/mnt/2024/Backups/${d}" 2>/dev/null
t="${d//-/}0000"
touch -a -m -t "${t}" "/mnt/2024/Backups/${d}"
done
如果我运行这个脚本,我会得到:(
go.sh: 6: Bad substitution
在我的脚本中是这一行t="${d//-/}0000"
)
令人困惑的是,如果我在 bash (ubuntu) 上进行测试
$ d=2024-01-01
$ t=${d//-/}
$ echo $t
20240101
它的行为符合预期。有人能解释一下发生了什么,或者如何解决它吗?
我正在编写一个 bash 脚本,它将生成一个根证书和一个服务器证书。根证书生成成功,但服务器证书提示我输入 - 但是由于这是一个 bash 脚本,它应该只使用配置中的值。
rootCA_openssl.cnf
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[ req_distinguished_name ]
countryName = NO
countryName_default = NO
stateOrProvinceName = Nordland
stateOrProvinceName_default = Nordland
organizationName = Lumina Ventures
organizationName_default = Lumina Ventures
commonName = Lumina Ventures Root CA 1
commonName_default = Lumina Ventures CA 1
[ v3_req ]
basicConstraints = CA:true
keyUsage = critical, keyCertSign
根尔萨
openssl genrsa -aes256 -out rootCA.key --passout pass:password 2048
为根 CA 证书创建 CSR(证书签名请求)文件
openssl req -new -key rootCA.key -out rootCA.csr -config rootCA_openssl.cnf --passin pass:password
生成根CA证书文件rootCA.pem
openssl x509 -req -in rootCA.csr -sha512 -signkey rootCA.key -out rootCA.pem -days 1095 -extensions v3_req -extfile rootCA_openssl.cnf --passin pass:password
服务器_openssl.cnf
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[ req_distinguished_name ]
countryName = NO
countryName_default = NO
stateOrProvinceName = Nordland
stateOrProvinceName_default = Nordland
localityName = Lofoten
localityName_default = Lofoten
organizationName = Lumina Ventures
organizationName_default = Lumina Ventures
commonName = 80.50.50.20
commonName_default = 80.50.50.20
commonName_max = 64
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 80.50.50.20
出现提示时输入密码
openssl genrsa -aes256 -out server.key --passout pass:password 2048
req(到此停止)
openssl req -new -key server.key -out server.csr -config server_openssl.cnf --passin pass:password
这促使我:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
NO [NO]:
如何在服务器配置中使用默认值?我尝试将其添加prompt = no
到该[ req ]
部分,但它给出了一个新的错误:
Error making certificate request
4057E170FB7C0000:error:04000067:object identifier routines:OBJ_txt2obj:unknown object name:../crypto/objects/obj_dat.c:376:
4057E170FB7C0000:error:05800077:x509 certificate routines:X509_NAME_ENTRY_create_by_txt:invalid field name:../crypto/x509/x509name.c:252:name=countryName_default
我要做的最后一件事是生成证书,但是我被困在 openssl req
openssl x509 -req -in server.csr -sha256 -CA rootCA.pem -CAkey rootCA.key -out server.pem -days 1095 -extensions v3_req -extfile server_openssl.cnf
我正在使用 bash 脚本生成根证书。
我有一个包含配置数据的 rootCA_openssl.cnf 文件:
rootCA_openssl.cnf
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
countryName = NO
countryName_default = NO
stateOrProvinceName = Stavanger
stateOrProvinceName_default = Stavanger
organizationName = Stavanger Info
organizationName_default = Stavanger Info
commonName = 88.5.44.3
commonName_default = 88.5.44.3
[ v3_req ]
basicConstraints = CA:true
keyUsage = critical, keyCertSign
生成 RSA
openssl genrsa -aes256 -out rootCA.key --passout pass:password 2048
为根 CA 证书创建 CSR(证书签名请求)文件
当我尝试生成 CSR 文件时,Ubuntu 会提示我配置。
openssl req -new -key rootCA.key -out rootCA.csr -config rootCA_openssl.cnf --passin pass:password
这是 Ubuntu 向我提出的要求:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
NO [NO]:
我将在 bash 脚本中运行命令,因此无法按下键盘上的 Enter 键来回答问题。
我怎样才能在不被要求的情况下运行 openssl req?
我有 2250 个元数据文件,需要有一个从 0 开始到 2249 的唯一编号,如下行。
"name": "KF # RENUMBER",
我使用了 perl 命令 (perl -pi -w -e 's/SEARCH_FOR/REPLACE_WITH/g;' *.json) 将多个文件中的某个单词替换为我需要的任何内容,但我不知道如何替换用一个单词替换它,用数字替换它,所以在一天结束时我有多个文件,其中有一行:
"name": "KF # 1",
"name": "KF # 2",
...
"name": "KF # 2249",
我试过perl -pi -w -e 's/RENUMBER/$count++;/g;' *.json
但这"name": "KF # ++;",
在所有文件中都返回了
如果这很重要的话,我正在使用 MacOS 中的终端来执行此操作。
任何帮助,将不胜感激!谢谢!
我正在使用 wget 下载 bash 脚本中的一些文件。我需要像这样使用它:
wget -t 20 --content-disposition $link
这里的问题是,我无法指定输出文件,因为它来自服务器。有什么方法可以从命令本身获取文件名吗?那么它写在哪里以便在脚本中进一步使用它呢?
多谢!
干杯