[英]Getting chown(): Operation not permitted while running uwsgi from ini file
我正在嘗試運行 nginx 和 uwsgi。 當我嘗試使用 proj 用戶在我的 proj 虛擬環境中使用以下命令運行 uwsgi 時,出現錯誤。 當我運行 uwsgi 時,我看到在proj.sock
中創建了/run/uwsgi/proj.sock
我將/run/uwsgi
drwxrwxrwx
權限更改為drwxrwxrwx
以查看問題是否與權限相關。 但是問題還是出現了。 我還檢查了/etc/passwd
並且沒有 uwsgi 用戶。
/run/uwsgi
的目錄信息是:
drwxrwxrwx 2 root root 60 Jul 16 10:53 uwsgi
當我嘗試將 proj 用戶的 sock 文件的所有權更改為 proj 虛擬環境中的 proj:nginx 時,出現以下錯誤。
chown: changing ownership of ‘/run/uwsgi/proj.sock’: Operation not permitted
當我檢查/run/uwsgi/proj.sock
文件時,它是proj:proj
但它應該更改為proj:nginx
。 這個操作可以用root手動完成。 但不能用 proj 用戶完成。
運行以下命令:
uwsgi --ini /etc/uwsgi/sites/proj.ini
錯誤 :
[uWSGI] getting INI configuration from /etc/uwsgi/sites/proj.ini<br>
*** Starting uWSGI 2.0.15 (64bit) on [Mon Jul 16 10:53:02 2018] ***<br>
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-28) on 13 July 2018 17:12:50<br>
os: Linux-3.10.0-862.6.3.el7.x86_64 #1 SMP Tue Jun 26 16:32:21 UTC 2018<br>
nodename: localhost.localdomain<br>
machine: x86_64<br>
clock source: unix<br>
detected number of CPU cores: 2<br>
current working directory: /home/proj<br>
detected binary path: /home/proj/Env/proj/bin/uwsgi<br>
!!! no internal routing support, rebuild with pcre support !!!<br>
chdir() to /home/proj/work/proj<br>
your processes number limit is 4096<br>
your memory page size is 4096 bytes<br>
detected max file descriptor number: 1024<br>
lock engine: pthread robust mutexes<br>
thunder lock: disabled (you can enable it with --thunder-lock)<br>
chown(): Operation not permitted [core/utils.c line 2623]<br>
VACUUM WARNING: unix socket /run/uwsgi/proj.sock changed inode. Skip removal
我用於proj.ini
ini 配置的proj.ini
文件是:
[uwsgi]
py-autoreload = 2
project = proj
username = proj
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = %k
uid = %(username)
socket = /run/uwsgi/%(project).sock
chown-socket = %(username):nginx
chmod-socket = 666
vacuum = true
#logto = /var/log/uwsgi/%(project).log
用戶只能將文件的組設置為他所在的組。在這種情況下,您的用戶proj
不在nginx
組中,因此不允許進行更改。 如果您將用戶添加到nginx
組(並重新登錄),那么它應該可以工作。
此外,將目錄權限設置為777
允許任何用戶在該目錄中創建和刪除文件,而套接字的666
允許任何用戶訪問它。 你可能不想那樣。 更合理的做法是讓/run/uwsgi
由 root:nginx 擁有,模式為770
,並且chmod-socket = 660
在您的項目中。
我解決了這個問題。 套接字文件位於/run/uwsgi
目錄中。
我賦予相關項目用戶在此文件夾上寫入讀取執行的權限。
setfacl -m u:projuser:rwx /run/uwsgi/
正如“ivbtar”所建議的,我剛剛從 uwsgi.ini 文件中刪除了以下幾行,然后它就開始工作了,
chown-socket = %(username):nginx
chmod-socket = 666
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.