Permissions

永久更改 /var/run/postgresql 的權限

  • January 21, 2021

在 Linux Mint 17.0 Cinnamon Edition 上,我想將其用作所有 postgres 數據庫/var/run/postgresqlunix_socket_directories選項。

每當我執行命令pg_ctl -D postgres-data -o '-F -p 33311' start啟動本地數據庫時,都會收到錯誤消息FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.33311.lock": Permission denied

正如 AskUbuntu、StackOverflow 和各種論壇上的許多答案所暗示的那樣,我必須執行sudo chmod 777 /var/run/postgresqlsudo chown -R $USER:$USER /var/run/postgresql更改目錄的權限,以便我可以寫入它。然後我就可以啟動我的數據庫了。但是,每次我重新啟動時,權限都會消失;該目錄不再是全域可寫的,並且使用者postgres-xc收回使用者和組對該目錄的所有權。

既不也不sudo adduser $USER postgres緩解sudo adduser $USER postgres-xc權限問題。

我嘗試按照此處所述進行全新安裝,但重新啟動時仍然存在問題。

我嘗試將值更改unix_socket_directories/tmpin ./postgres-data/postgresql.conf(本地數據庫配置文件),這使我可以啟動該特定數據庫,而無需在每次重新啟動時更新權限。但是,我還有一個腳本,用於pg_ctl -D $DIR initdb && pg_ctl -D $DIR start即時設置和啟動數據庫。因此,postgresql.conf這些數據庫使用預設配置文件,因此在執行該腳本時出現unix_socket_directories不可寫/var/run/postgresql和權限被拒絕錯誤。手動/以程式方式即時編輯這些配置以供使用unix_socket_directories = '/tmp'是……不可取的。

我知道我可以使用-o標誌 withpg_ctl來覆蓋unix_socket_directories選項 to /tmp,但是這個腳本由不使用 Ubuntu 的其他開發人員共享,所以我不一定要限制每個人都使用該/tmp目錄,特別是如果他們的配置略有不同。我希望每個人都使用預設位置進行安裝。就個人而言,我也更願意保留預設目錄,以便與其他 Ubuntu 軟體包兼容;例如,pgadmin/var/run/postgresql預設會查找鎖定文件。

我也嘗試過編輯/etc/postgresql/9.3/main/pg_ctl.conf,試圖在我使用時自動通過設置這些選項pg_ctl

# Automatic pg_ctl configuration
# This configuration file contains cluster specific options to be passed to
# pg_ctl(1).

pg_ctl_options = '-o "-c unix_socket_directories=/tmp -c unix_socket_group=jackson -c unix_socket_permissions=0777"'

但這沒有任何效果。

請告知我如何將我的所有 postgres 數據庫/var/run/postgresql用作我的unix_socket_directories選項,而不必sudo chown -R $USER:$USER /var/run/postgresql每次重新啟動系統時都執行。謝謝。

/var/run/postgresql 的權限取自 /usr/lib/tmpfiles.d/postgresql.conf

執行以下命令來回收目錄(立即和隨後的引導):

service='reclaim-postgresql'
service_file="/etc/init.d/${service}"

echo "#!/bin/sh
set -e

### BEGIN INIT INFO
# Provides:          ${service}
# Required-Start:    \$postgres-xc
# Required-Stop:     \$postgres-xc
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Reclaim /var/run/postgresql
### END INIT INFO

chown -R ${USER}:${USER} /var/run/postgresql" \
   | sudo tee "${service_file}"
sudo chmod +x "${service_file}"
sudo update-rc.d "${service}" defaults
sudo service "${service}" start

請注意,在執行sudo apt-get upgrade更新 postgres 時,您可能需要臨時更新sudo chown -R postgres:postgres /var/run/postgresql才能使升級成功。

引用自:https://unix.stackexchange.com/questions/206917