首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我可以在.pgpass中使用SELinux吗?[centos7,pgagent_96,PostgreSQL9.6.5]

我可以在.pgpass中使用SELinux吗?[centos7,pgagent_96,PostgreSQL9.6.5]
EN

Stack Overflow用户
提问于 2017-10-18 19:51:41
回答 1查看 2K关注 0票数 3

.pgpass似乎不起作用。你能检查一下我的pgagent设置吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OS : centos 7   ( I did NOT disable selinux )

Database : postgresql 9.6.5

pgagent : pgagent_96 3.4.0-9.rhel7  ( installed package using  yum )
  1. 我以用户“弗兰克”的身份登录了centos服务器
  2. 在启动pgagent之前,我检查了pgagent的状态。(我没有启用pgagent_96服务。) frank@web$ systemctl状态pgagent_96.service pgagent_96.service - PgAgent for PostgreSQL 9.6加载:加载(/usr/lib/systemd/system/pgagent_96服务;禁用;供应商预置:禁用)活动:非活动(死)
  3. 我开始做pgagent了。一开始看上去很成功。但是几十秒后,它没有建立连接,就死了。(在启动时,CentOs询问了弗兰克的操作系统密码。) 弗兰克@web$ systemctl启动pgagent_96.service弗兰克@web$ systemctl状态pgagent_96.service pgagent_96.service - PgAgent for PostgreSQL 9.6 Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service;disabled;供应商预置:禁用)自2017-10-16 16:42:11 KST激活:活动(运行);5s前进程: 9507 ExecStart=/usr/bin/ PgAgent _96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBHOST} user=${DBUSER} port=${DBPORT} (code=exited,status=0/SUCCESS)主PID: 9510 (pgagent_96) CGroup: /system.slice/pgagent_96.service└─9510 /usr/bin/PgAgent/var /var/log/pgagent_96.log hostaddr=127.0.0.1 dbname=postgres user=postgres port=5432 16:42:11 web.frank.net systemd1: PgAgent for PostgreSQL 9.6.10月16日16:42:11 web.frank.net systemd1: Started for PostgreSQL 9.6。

(几十秒后.)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   [frank@web]$ systemctl status pgagent_96.service
    ● pgagent_96.service - PgAgent for PostgreSQL 9.6
       Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled)
       Active: failed (Result: exit-code) since 2017-10-16 16:42:56 KST; 4min 9s ago
      Process: 9507 ExecStart=/usr/bin/pgagent_96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS)
     Main PID: 9510 (code=exited, status=1/FAILURE)

    16 Oct 16:42:11 web.frank.net systemd[1]: Starting PgAgent for PostgreSQL 9.6...
    16 Oct 16:42:11 web.frank.net systemd[1]: Started PgAgent for PostgreSQL 9.6.
    16 Oct 16:42:56 web.frank.net systemd[1]: pgagent_96.service: main process exited, code=exited, status=1/FAILURE
    16 Oct 16:42:56 web.frank.net systemd[1]: Unit pgagent_96.service entered failed state.
    16 Oct 16:42:56 web.frank.net systemd[1]: pgagent_96.service failed.
  1. 我查了一下pgagent日志。(登录/var/ Log /pgagent_96.log ) 警告:无法创建主连接(尝试1):fe_sendauth:未提供密码警告:无法创建主连接(尝试2):fe_sendauth:未提供密码警告:无法创建主连接(尝试3):fe_sendauth:未提供密码警告:无法创建主连接(尝试4):fe_sendauth:未提供密码警告:无法创建主连接(尝试5):fe_sendauth:未提供密码警告:无法创建主连接(尝试6):fe_sendauth:未提供密码警告:无法创建主连接(尝试7):fe_sendauth:未提供密码警告:无法创建主连接(尝试8):fe_sendauth:未提供密码警告:无法创建主连接(尝试9):fe_sendauth:未提供密码警告:无法创建主连接(尝试10):fe_sendauth:没有密码提供的错误:停止pgAgent:无法建立与数据库服务器的主连接。
  2. 检查了我的.pgpass文件。( .pgpass在弗兰克的主目录中。/家庭/弗兰克) frank@web$ ls -alZ .pgpass -rw?弗兰克弗兰克unconfined_u:object_r:user_home_t:s0 .pgpass frank@web$ ls -al .pgpass rw?1弗兰克弗兰克43 10月16日16:23 .pgpass .pgpass@web$ id -Z -Z frank@web$ id uid=1000( frank ) gid=1000( frank ) groups=1000(Frank)10(轮子) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
  3. 检查了我的pg_hba.conf。 frank@web$ su - postgres -bash-4.2$ pwd /var/lib/pgsql/9.6/data -bash-4.2美元ls -alZ pg_hba.conf -rwpostgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_hba.conf( pg_hba.conf )

pg_hba.conf含量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                md5

# IPv4 local connections:
#host    all             all             127.0.0.1/32            ident
host    all   all   122.32.2.21/32       md5    (122.32.2.21  is my server's IP )

# IPv6 local connections:
#host    all             all             ::1/128                 ident
host    all             all             ::1/128                 md5

# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident
  1. 我这样修改了postgres用户的密码。 postgres=#更改密码‘pwd’的用户邮政;
  2. .pgpass文件的内容。 本地主机:5432:postgres:postgres:pwd
  3. 我把.pgpass的所有者从frank改为postgres。但结果是一样的。我对OS用户'root‘(/root)、'postgres’(/var/lib/pgsql )和其他两个在/home中拥有主目录的普通用户进行了相同的测试。

(1)尝试作为OS用户“root”启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [root@web frank]# ls -al .pgpass
    -rw-------. 1 postgres postgres 43 1016 17:08 .pgpass
    [root@web frank]# ls -alZ .pgpass
    -rw-------. postgres postgres unconfined_u:object_r:user_home_t:s0 .pgpass
    [root@web frank]# cat .pgpass
    localhost:5432:postgres:postgres:pwd
    [root@web frank]# systemctl start pgagent_96      (Here, centos asked frank's OS password )
    [root@web frank]# systemctl status pgagent_96
    ● pgagent_96.service - PgAgent for PostgreSQL 9.6
       Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled)
       Active: failed (Result: exit-code) since 2017-10-16 23:33:15 KST; 3s ago
      Process: 25928 ExecStart=/usr/bin/pgagent_96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS)
     Main PID: 25930 (code=exited, status=1/FAILURE)

    16 Oct 23:32:30 web.frank.net systemd[1]: Starting PgAgent for Postgre....
    16 Oct 23:32:30 web.frank.net systemd[1]: Started PgAgent for PostgreS....
    16 Oct 23:33:15 web.frank.net systemd[1]: pgagent_96.service: main pro...E
    16 Oct 23:33:15 web.frank.net systemd[1]: Unit pgagent_96.service ente....
    16 Oct 23:33:15 web.frank.net systemd[1]: pgagent_96.service failed.
    Hint: Some lines were ellipsized, use -l to show in full.

(2)尝试以OS用户“坦率”的身份开始

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [frank@web ~]$ systemctl start pgagent_96    (Here, centos asked frank's OS password )
    [frank@web ~]$ systemctl status pgagent_96
    ● pgagent_96.service - PgAgent for PostgreSQL 9.6
       Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled)
       Active: failed (Result: exit-code) since 월 2017-10-16 23:41:03 KST; 1min 21s ago
      Process: 26531 ExecStart=/usr/bin/pgagent_96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS)
     Main PID: 26533 (code=exited, status=1/FAILURE)

    16 Oct 23:40:18 web.frank.net systemd[1]: Starting PgAgent for Postgre....
    16 Oct 23:40:18 web.frank.net systemd[1]: Started PgAgent for PostgreS....
    16 Oct 23:41:03 web.frank.net systemd[1]: pgagent_96.service: main pro...E
    16 Oct 23:41:03 web.frank.net systemd[1]: Unit pgagent_96.service ente....
    16 Oct 23:41:03 web.frank.net systemd[1]: pgagent_96.service failed.
    Hint: Some lines were ellipsized, use -l to show in full.

(3)尝试以OS用户“postgres”的身份启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    -bash-4.2$ systemctl start pgagent_96       (Here, centos asked frank's OS password )
    -bash-4.2$ systemctl status pgagent_96
    ● pgagent_96.service - PgAgent for PostgreSQL 9.6
       Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled)
       Active: failed (Result: exit-code) since 월 2017-10-16 23:54:22 KST; 21s ago
      Process: 27511 ExecStart=/usr/bin/pgagent_96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS)
     Main PID: 27515 (code=exited, status=1/FAILURE)

(4)“根”、“弗兰克”和“postgres”的安全语境

(根)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@web ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

(弗兰克)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[frank@web ~]$ id
uid=1000(frank) gid=1000(frank) groups=1000(frank),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

( postgres )

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-bash-4.2$ id
uid=26(postgres) gid=26(postgres) groups=26(postgres) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
  1. 当然,我可以像这样登录数据库。但是我不能使用.pgpass文件。 root@web bin# su - postgres -bash-4.2美元psql -h localhost -U postgres psql (9.6.5) postgres=#
  2. 目前,我认为这个问题可能与.pgpass的安全上下文有关。pgagent_96或systemd可能不允许读取.pgpass文件.(我只是猜测^^ ),我检查了pgagent_96或systemd是否可以读取.pgpass。

(1)我在/etc/profile中设置了PGPASSFILE变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export PGDATA=/var/lib/pgsql/9.6/data
export PGPASSFILE=/var/lib/pgsql/.pgpass

(2)尝试启动pgagent_96,将.pgpass上下文类型从user_home_t改为postgresql_db_t、bin_t、usr_t,但我也遇到了同样的错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-bash-4.2$ echo $PGPASSFILE
/var/lib/pgsql/.pgpass
-bash-4.2$ ls -alZ .pgpass
-rw-------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 .pgpass
-bash-4.2$ systemctl start pgagent_96
     ====> failed to start pgAgent_96. same error.
-bash-4.2$ chcon --type bin_t .pgpass
-bash-4.2$ ls -alZ .pgpass
-rw-------. postgres postgres unconfined_u:object_r:bin_t:s0   .pgpass
-bash-4.2$ systemctl start pgagent_96
    ====> failed to start pgAgent_96. same error.
-bash-4.2$ chcon --type usr_t .pgpass
-bash-4.2$ ls -alZ .pgpass
-rw-------. postgres postgres unconfined_u:object_r:usr_t:s0   .pgpass
-bash-4.2$ systemctl start pgagent_96
    ====> failed to start pgAgent_96. same error.

pgagent_96、systemd、pg_hba.conf的安全上下文

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@web frank]# ls -alZ /usr/bin/pgagent_96
-rwxr-xr-x. root root system_u:object_r:bin_t:s0   /usr/bin/pgagent_96
[root@web frank]# ls -alZ /usr/lib/systemd/systemd
-rwxr-xr-x. root root system_u:object_r:init_exec_t:s0 /usr/lib/systemd/systemd
[root@web frank]# ls -alZ /var/lib/pgsql/9.6/data/pg_hba.conf
-rw-------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 /var/lib/pgsql/9.6/data/pg_hba.conf

我不知道该试试什么。请帮帮我..。

更新

  1. 我安装了postgresql 10,pgagent_10,但是结果是一样的.我想使用systemctl命令启动pgagent。我将使pagent服务自动启动pgagent服务。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-07 08:28:53

我对CentOS 7也有同样的问题。我的解决方案是:

首先,检查服务脚本中的一些变量:

/usr/lib/systemd/system/pgagent_96.service

1)默认情况下,User=pgagent和Group=pgagent --这是.pgpass文件的所有者/组,

你需要一套

chown pgagent:pgagent .pgpass

chmod 0600 .pgpass

2)接下来,将.pgpass文件移动到用户pgagent可以读取该文件的目录中。

(/home/frank对于用户pgagent是不可编辑的,例如,试试postgres安装dir /var/lib/pgsql/9.6或/var/lib/pgsql)

3)检查pgagent_96配置的位置变量,

默认情况下,EnvironmentFile=/etc/pgagent/pgagent_96.conf -您需要编辑这个文件。

下一步,在编辑器中打开pgagent_96.conf并进行更改:

( a)更改变量DBHOST=localhost的值(这很重要)

( b)添加变量PGPASSFILE=/path/your/pgpasfile/..pgpass(PGPASSFILE=/var/lib/pgsql/..pgpass)

在我的例子中,pgagent开始工作时没有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46822553

复制
相关文章
java找不到jdk文件_java运行时系统找不到指定的文件
学习jni的时候,javac Helloworld.java 生成 Helloworld.class文件以后,调用javah Helloworld提示找不到类文件
全栈程序员站长
2022/11/08
2.7K0
VBA: 批量重命名文件夹和文件名称
文章背景: 在工作中,有时需要将一些文件名称修改成特定的名称,如果文件比较多的话,手动修改费时费力,下面通过VBA代码实现批量操作。
Exploring
2022/12/18
9.5K2
VBA:  批量重命名文件夹和文件名称
使用VBA重命名文件:5个代码示例
注意到Name命令需要文件路径和文件名吗?因此,该命令不仅可以重命名文件,还可以移动文件。例如,下面的代码将文件从D:\完美Excel\移动到D:\完美Excel\我的文章\,但文件名保持不变。
fanjy
2022/11/16
2.4K0
使用VBA重命名文件:5个代码示例
pycharm重命名文件名后运行不了_重命名找不到该项目
4、这个时候,我们再运行py文件,就会出现‘系统找不到指定的文件’,运行不了py
全栈程序员站长
2022/09/27
2.1K1
pycharm重命名文件名后运行不了_重命名找不到该项目
linux重命名文件名_linux 文件重命名
https://blog.csdn.net/weixin_33724570/article/details/91909917
全栈程序员站长
2022/09/30
4.1K0
linux重命名文件名_linux 文件重命名
java删除文件,重命名文件
在做项目时,遇到需要对文件做一些删除重命名等操作。基于java语言,保存代码段如下。
全栈程序员站长
2022/08/12
1.8K0
VBA实战技巧10: 复制文件到指定的文件夹并重命名
在工作表的列A中放置着一系列带有完整路径的文件名列表,想要将这些文件移至指定的文件夹并使用列B中相应的名称对其重命名,如下图1所示。
fanjy
2020/12/18
8.5K0
VBA实战技巧10: 复制文件到指定的文件夹并重命名
linux批量文件重命名命令_shell重命名文件指令
hello_10_2016-03-17.log hello_4_2016-03-17.log hello_8_2016-03-17.log
全栈程序员站长
2022/10/02
10.7K0
删除,重命名文件
重命名文件----rename #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> //修改文件名 void REname(char *arr) { int ret=rename("你好世界.txt", arr); if (ret == 0) { printf("修改成功"); } else { printf("修改失败"); } } void test01() { char buf[] = "你好,世界.txt"; REname(b
大忽悠爱学习
2021/03/02
1.7K0
删除,重命名文件
python3批量为文件重命名
为什么使用python批量重命名而没有使用shell,python对文字的处理更灵活,对于文件名中的空格不会出现报错。
py3study
2020/01/06
5820
linux中文件重命名_如何在Linux中重命名文件?
This tutorial will walk you through the simple steps to rename a file in Linux.
全栈程序员站长
2022/09/30
8.3K0
linux重命名文件和文件夹的区别_文件夹如何重命名
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/16
4.9K0
linux 重命名 文件夹_如何给文件批量重命名
上面的例子中,子模式 \d{4} 会捕捉4个连续的数字,捕捉的四个数字匹配模式对应 $1, 将会用于新的文件名。
全栈程序员站长
2022/09/30
7K0
linux 重命名 文件夹_如何给文件批量重命名
文件批量重命名
# 把当前文件夹的所有文件重命名为 WF .... # 把这个路径下的所有文件先查找到 -- 遍历所有文件 :有一个新的名字WF .. rename(旧,新) import os file_path = os.getcwd() list1 = os.listdir(file_path) print(list1) # 当前目录每个名字前面加'WF ' for name in list1: new_name = 'WF ' + name os.rename(name, new_na
汪凡
2018/05/29
1.5K0
EditRename文件重命名工具
一款文件重命名工具。通过在文本编辑器中直接编辑多个文件的文件名来重命名文件,非常灵活,堪比一些强大的重命名工具,但更加易用。
季春二九
2023/03/24
1.1K0
EditRename文件重命名工具
php案例 重命名文件
作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 代码 index.php 效果: 之前的 之后的 代码 index.php <?php //重命
贵哥的编程之路
2022/09/29
1.2K0
php案例 重命名文件
修复 GitLab 的 CI Runner 提示找不到 pwsh 执行文件
本文告诉大家如何修复使用 GitLab 的 Runner 做 CI 时提示 “pwsh”: executable file not found in %PATH% 错误
林德熙
2023/04/07
9620
linux 重命名文件和文件夹
其实在文本模式中要重命名文件或目录的话也是很简单的,我们只需要使用mv命令就可以了,比如说我们要将一个名为abc的文件重命名为1234就可以这样来写:mv abc 1234,但是要注意的是,如果当前目录下也有个1234的文件的话,我们的这个文件是会将它覆盖的
周小董
2019/03/25
4.7K0
VBA 批量重命名
If ActiveSheet .Range("c2") = "" Then
办公魔盒
2019/07/22
1.2K0
VBA 批量重命名
linux 文件重命名的命令是什么_linux移动文件并重命名
大家好,又见面了,我是你们的朋友全栈君。 就目前所知道的知识,有两种方法。 一、mv
全栈程序员站长
2022/09/30
5.6K0

相似问题

使用awk查找KB中的数字,然后更改并替换为GB并显示整行。

17

用regex查找并替换特定的数字。

21

Server :查找并替换字符串中多次出现的特定字符串部分

20

查找并替换字符串中的特定字符

34

如何在列表的字符串中查找数字并将其替换为特定的字符?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文