簡體   English   中英

如何在ubuntu上追蹤php5-fpm umask設置的來源

[英]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。

系統信息:

  • PHP:5.5.3-1ubuntu2.1
  • Apache:2.4.6
  • Ubuntu:13.10
  • PHP-PFM使用TCP端口列出(因為Unix端口尚未工作/支持)

到目前為止,我已經嘗試了以下(每個系統重啟和重新測試后):

  • umask 0002添加到/etc/init.d/php5-fpm的開頭
  • --umask 0002添加到/etc/init.d/php5-fpmstart-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):

  • 我已經能夠使用nginxphp5-fpm復制問題(使用unix套接字設置為監聽模式'0666')。
  • 我很想跟蹤umask的來源,但我會選擇某種方式來強制它達到我想要的效果。
  • 我應該補充說,第一次測試是在Amazon Ubuntu 13.10映像上完成的。 我在“編輯2”中的測試,在虛擬機中使用Ubuntu13.10服務器ISO設置的副本完成。 所有安裝都是通過apt-get完成的,而不是通過下載源和構建來完成的。

編輯(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-fpmservice命令進行跟蹤,它會對/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 startservice 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM