[英]How to trace where php5-fpm umask settings are coming from on ubuntu
我真的很感激在Ubuntu上追蹤和診斷umask問題的任何幫助:
我通過proxy_fcgi
運行php5-fpm
和Apache。 該進程使用0022的umask運行(通過讓PHP將umask()
的結果發送到文件[結果為'18'== 0022])來確認。 我想將其更改為0002,但無法追蹤umask的來源。
使用umask 0002設置Apache,作為測試,如果我禁用proxy_fcgi
並運行上面的測試,我會得到一個u + g具有rw訪問權限的文件(文件內容確認umask為'2'== 0002)。
如果我sudo -iu fpmuser
並運行umask
,結果是0002。
系統信息:
到目前為止,我已經嘗試了以下(每個系統重啟和重新測試后):
umask 0002
添加到/etc/init.d/php5-fpm
的開頭 --umask 0002
添加到/etc/init.d/php5-fpm
的start-stop-daemon
調用中 umask 0002
添加到fpm
用戶家中的.profile
有些東西顯然正在調整php-fpm進程的umask - 所以,我怎樣才能開始跟蹤強制umask 0022進入php-fpm進程的內容?
編輯(1):
/etc/login.defs
調整系統范圍的umask(請參閱如何設置系統范圍的umask? )會影響其他地方的umask(例如,通過sudo
comannds現在有一個0002的umask),但是php-fpm仍會創建一個umask為的umask 0022.請注意,我驗證了session optional pam_umask.so
也存在於/etc/pam.d/common-session-noninteractive
,我測試了002和0002的session optional pam_umask.so
。 編輯(2):
nginx
和php5-fpm
復制問題(使用unix套接字設置為監聽模式'0666')。 編輯(3):
我已經確認我可以通過以下任一方式手動操作umask(通過檢查創建的測試文件的權限來驗證):
一個。 在shell中,設置一個umask然后從shell運行/usr/sbin/php-fpm
灣 在shell中,使用我喜歡的任何umask值運行以下命令:
start-stop-daemon --start --quiet --umask 0002 --pidfile /var/run/php5-fpm.pid --exec /usr/sbin/php5-fpm -- --daemonize --fpm-config /etc/php5/fpm/php-fpm.conf
但是/etc/init.d/php5-fpm
文件中的這個完全相同的命令在運行sudo service php5-fpm stop; sudo service php5-fpm start
時無法調整umask sudo service php5-fpm stop; sudo service php5-fpm start
sudo service php5-fpm stop; sudo service php5-fpm start
或重啟。
不是ubuntu上umask設置來源的一般跟蹤解決方案(到目前為止我發現的唯一方法是復制問題,試圖將其分離為腳本或函數,然后退回的好舊方法)通過遞歸調用的每個腳本/函數)但解決php5-fpm umask問題 。 我在google,stackoverflow和其他地方發現了很多關於這個問題的點擊,但到目前為止還沒有解決方案。 希望這對人們有用。
編輯/etc/init/php-fpm.conf
以包含行umask 0002
(或任何你想要的umask)。 我的文件版本現在看起來像這樣:
# php5-fpm - The PHP FastCGI Process Manager
description "The PHP FastCGI Process Manager"
author "Ondřej Surý <ondrej@debian.org>"
start on runlevel [2345]
stop on runlevel [016]
### my edit - change umask setting
umask 0002
pre-start exec /usr/lib/php5/php5-fpm-checkconf
respawn
exec /usr/sbin/php5-fpm --nodaemonize --fpm-config /etc/php5/fpm/php-fpm.conf
說明
通過在啟動時啟動php5-fpm
的service
命令進行跟蹤,它會對/etc/init/${SERVICE}.conf
運行一些檢查(我的副本上的第118行),同時驗證initctl
是否存在並且可以報告它的版本。 如果傳遞了這些測試,則使用upstart
,在php5-fpm
的情況下使用/etc/init/php-fpm.conf
文件。
ubuntu新貴網站提供了非常明確的指示。 特別是您可以查看新貴食譜 ,了解您需要的具體信息。
最好的我可以解決這意味着因此'service'命令從未實際運行在/etc/init.d/php5-fpm
中找到的start-stop-daemon …
命令,這就是為什么我以前的編輯沒有效果。 相反,當你使用像service php5-fpm start
等service php5-fpm start
時,它會轉到upstart
(實際上是initctl
)。
如果使用systemd,請在/etc/systemd/system
目錄中創建一個名為php7.2-fpm.service.d
的新目錄。 此目錄的名稱將根據您的發行版和PHP版本而有所不同。 運行systemctl list-units --type=service | grep --ignore-case php
systemctl list-units --type=service | grep --ignore-case php
找出它的systemctl list-units --type=service | grep --ignore-case php
。 在此目錄內,放置一個名為umask.conf
的文件, umask.conf
包含以下內容:
# /etc/systemd/system/php7.2-fpm.service.d/umask.conf
[Service]
UMask=0002
要使更改生效,請運行:
systemctl daemon-reload && systemctl restart php7.2-fpm
此解決方案的好處是,在更新軟件包時,您的自定義不會丟失。
從systemd手冊解釋這是如何工作的:
與單元文件foo.service一起,可能存在“drop-in”目錄foo.service.d /。 解析文件本身后,將解析此目錄中帶有后綴“.conf”的所有文件。 這對於更改或添加單元的配置設置很有用,而無需修改單元文件。 每個插件文件都必須具有適當的節標題。 請注意,對於實例化的單元,此邏輯將首先查找實例“.d /”子目錄並讀取其“.conf”文件,然后是模板“.d /”子目錄和那里的“.conf”文件。
除了/ etc / systemd / system之外,系統服務的drop-in“.d”目錄可以放在/ usr / lib / systemd / system或/ run / systemd / system目錄中。 / etc中的drop-in文件優先於/ run中的文件,后者優先於/ usr / lib中的文件。 任何這些目錄下的drop-in文件優先於位於任何位置的單元文件。 具有不同名稱的多個插入文件以字典順序應用,而不管它們駐留在哪個目錄中。
在編輯php5-fpm.service之前更好地復制systemd腳本,否則它將在下次更新時被覆蓋:
cp /lib/systemd/system/php5-fpm.service /etc/systemd/system/
vi /etc/systemd/system/php5-fpm.service
Add: UMask=0002 in [Service] section.
systemctl daemon-reload
systemctl restart php5-fpm
來源: https : //ispire.me/running-php-fpm-with-different-user-group-using-umask/
okey,但這適用於所有池。 能用這樣的東西設置它會很方便
env [umask] = 0002(沒有機會這樣做)
谷歌搜索,但似乎不是一個方法來實現每個主機。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.