在 Ubuntu 14.04 中设置一个新的网络服务器并尝试为 PHP 生成的文件争论文件权限。
默认情况下,其中的所有目录和文件/var/www都属于/分组到 www-admin。目录权限为rwxrwsr-x,文件权限为rw-rw-r--。
然后,我们将有限数量的目录上的组设置为 www-data - 这样 PHP(通过 Apache)就可以在此位置写入日志和缓存文件。
但是,我无法让 PHP 遵守 umask 0002,因此 PHP 生成的文件只能写入 www-data 用户。这是一个问题,因为我们使用持续集成和其他一些清理流程。
到目前为止,我有:
/etc/pam.d/common-session/etc/pam.d/common-session-noninteractive/etc/profile/etc/apache2/envvars/etc/login.defswww-data时将 umask 设置为 0002/etc/passwdsudo chfn -o "umask=002" daemon_username我仍然被困住了。
我已经停止/启动了该服务,甚至重新启动了计算机 - 没有乐趣。
我正在尝试使用特定的(0002)运行任意 Ansible 模块umask。
一些 Ansible 模块(例如git)支持umask参数(或mode直接设置权限的参数),但许多模块不支持。
据我所知,Ansible 不会调用 shell(除非您使用该shell模块),因此更改 shell 配置文件中的 umask 是没有用的。
我的方法是更改UMASK 中的行/etc/login.defs,但这对 Ansible 没有影响。仍为umask0022。PAM
似乎配置为包括pam_umask.so.
我知道我可以使用该shell模块作为解决方法(shell: umask 0002; some_command),但这似乎是一个丑陋的黑客。
我如何让 Ansible 尊重我的umask?
这是针对 CentOS 8 系统的 Ansible 2.9.9。
我在 Fedora 19 中找不到在哪里设置 umask(为由 php 脚本创建的文件设置适当的权限)。(具体来说,我希望新文件具有 664 权限)
我用来openssl在脚本中生成私钥和 CSR。该脚本需要先生成密钥,然后调用chmod 400 whatever.key将私钥的权限更改为更安全的内容。
有没有办法消除第二步并openssl从一开始就创建具有适当权限的文件?对我来说,让其他进程无法读取私钥(即使是一毫秒)似乎更干净。
您可以umask在脚本中使用来执行类似的操作还是有其他方法?
我们的 apache 作为 www-data:psacln 运行
如果这条线运行;
<?php file_put_contents("./file.txt","");
Run Code Online (Sandbox Code Playgroud)
然后 apache 在没有对该组的写权限的情况下创建这个文件,
-rw-r--r-- 1 www-data psacln 9 2010-02-25 16:17 file.txt
Run Code Online (Sandbox Code Playgroud)
如何设置我们的 ubuntu/apache 以便在网站内创建文件/文件夹时默认授予组写权限?
我的umask是0002。
那么当 I 时rsync -r me@remote:new .,为什么结果组不可写?
drwxrwsr-x 10 root developers 4096 Aug 22 12:55 .
drwxrwsr-x 12 root developers 4096 Jul 14 19:05 ..
drwxrwsr-x 3 root developers 4096 May 16 15:04 old
drwxr-sr-x 4 aaronadams developers 4096 Jun 26 15:17 new
Run Code Online (Sandbox Code Playgroud) 我一直在试图找出文件权限有什么问题。当我使用 FileZilla 上传文件时,所有文件都获得权限 -rw-r--r--。我希望他们有 -rwxr-xr-x。我曾尝试使用 umask 来修复权限,但出了点问题。我读过您可以像这样使用 umask 更改权限,例如:
在 /etc/ssh/sshd_config 中,更改以下内容:
Subsystem sftp /usr/lib/openssh/sftp-server -u 002
Run Code Online (Sandbox Code Playgroud)
通过此更改,我将使用 -rw-rw-r-- 获取文件。据我所知 0 应该赋予所有权利?但我只得到 rw。
怎么了?我正在使用 Debian。
为什么 umask 是 $perms AND NOT $mask 而不是简单的 $perms AND $mask 呢?
换句话说,为什么里面没有 NOT;为什么它没有实现为和掩码?
比如666和700,给600?
我正在尝试将所有用户的默认 umask 设置为 002,包括我的 CentOS 机器上的 root。
根据这个和其他答案,这可以通过编辑/etc/profile. 然而,该文件顶部的评论说:
除非您知道自己在做什么,否则更改此文件不是一个好主意。最好在 /etc/profile.d/ 中创建 custom.sh shell 脚本以对您的环境进行自定义更改,因为这将防止在将来的更新中需要合并。
所以我继续创建以下文件:
/etc/profile.d/myapp.sh
与单行:
umask 002
Run Code Online (Sandbox Code Playgroud)
现在,当我以 root 身份创建一个文件时,该文件天生就有 664 权限,正如我所希望的那样。但是由我的 Apache mod_wsgi 应用程序创建的文件,或使用 sudo 创建的文件,仍然默认为 644 权限......
$ touch newfile(作为根):
结果 = 664(作品)
$ sudo touch newfile:
结果 = 644(不起作用)
Apache mod_wsgi 应用程序创建的文件:
结果 = 644(不起作用)
Python 的 RotatingFileHandler 创建的文件:
结果 = 644(不起作用)
为什么会发生这种情况,以及如何确保系统范围内的 664 文件权限,无论创建文件的内容是什么?
在网络上的各种文档中,关于 umask 的操作方式,linux/unix 文件的基本权限是 666。
这也与默认 ACL 权限对在默认 ACL 权限下创建的文件强制执行 rw 掩码这一事实有关。
这至少与以下系统有关:
Ubuntu 12.04.3
但是,我认为这种行为在许多 unix 中很常见。
我在虚拟专用服务器上使用 CentOS。
当我以 root 身份进入并更改文件夹的 chmod 值时,它会起作用。但是,我放入该文件夹的任何文件都不会继承我设置的 chmod。
这是我使用的:
chmod -Rv 777 files
Run Code Online (Sandbox Code Playgroud)
回报是这样的:
mode of `files' retained as 0777 (rwxrwxrwx)
mode of `files/1344188366-f7cad6aa87685db775817d4168c329ef-AUTO_INSURANCE2.csv'
changed to 0777 (rwxrwxrwx)
Run Code Online (Sandbox Code Playgroud)
好的,所以一个文件改变了。但是,如果我将任何文件放入该文件夹中,它们将具有不同的 chmod 值。如何让 chmod 坚持该目录中的每个文件和文件夹?
我希望默认 chmod 设置的文件正在通过 XHR 上传。IE 从浏览器到服务器的文件上传过程。
如何在 PHP 中的应用程序代码上设置 chmod 级别?
编辑
我想我已经找到了解决问题的合理方法。下面的答案解决了文件权限问题。但是get_current_user()在 php 中运行后,我意识到运行脚本的用户与我正在尝试处理的文件的用户不同。文件用户是 apache,因为那是创建它的人。但是PHP脚本是不同的用户,默认用户。
umask ×12
linux ×5
centos ×2
chmod ×2
fedora ×2
php ×2
php-fpm ×2
ansible ×1
apache-2.2 ×1
apache-2.4 ×1
debian ×1
filesystems ×1
openssl ×1
rsync ×1
sftp ×1
ssh ×1
systemd ×1
ubuntu ×1
ubuntu-14.04 ×1
unix ×1