我一直在寻找一种方式来设置的OpenSSH的的umask以0027在所有连接类型一致的方式。
通过连接类型,我指的是:
3. 和 4. 之间的区别在于前者启动一个通常读取/etc/profile信息的外壳,而后者不启动。
此外,通过阅读这篇文章,我了解到较新版本的 OpenSSH 中存在 -u 选项。然而这行不通。
我还必须补充一点,/etc/profile现在包括umask 0027.
逐点进行:
-u 0027在这里sshd_config提到的设置,是不够的。如果我不设置这个参数,sftp 默认使用umask 0022. 这意味着如果我有两个文件:
-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write
Run Code Online (Sandbox Code Playgroud)
当我使用 sftp 将它们放入目标机器时,我实际上得到:
-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 …Run Code Online (Sandbox Code Playgroud) 我有一个目录,其中有一个由多个用户共享的项目。这些用户使用 SSH 访问此目录并修改/创建文件。
这个项目应该只对特定的用户组是可写的:我们称之为“mygroup”。在 SSH 会话期间,当前用户创建的所有文件/目录默认应归组“mygroup”所有,并具有组可写权限。
我可以解决权限问题umask:
$ cd project
$ umask 002
$ touch test.txt
Run Code Online (Sandbox Code Playgroud)
文件“test.txt”现在是组可写的,但仍然属于我的默认组(“mislav”,与我的用户名相同)而不是“mygroup”。我可以chgrp递归地设置所需的组,但我想知道是否有一种方法可以隐式设置某些组,例如 umask 在会话期间更改默认权限。
这个特定目录是一个带有工作副本的共享 git 存储库,我希望git checkout和git reset操作为在工作副本中创建的新文件设置正确的掩码和组。操作系统是 Ubuntu Linux。
更新:一位同事建议我应该查看POSIX ACL 的getfacl/setfacl,但下面结合umask 002当前会话中的解决方案对我来说已经足够了,而且要简单得多。
我们有一个 Ubuntu 10.04 服务器。如何设置它以便通过 SFTP 或 SSH 创建(或复制)的新文件具有 g+rw 和 g+rwx 权限(在适当的情况下)?
我也在使用 setgid (chmod g+s) 以便他们继承正确的组所有者。
如何将创建的目录和文件的默认值设置为 775 ?我的理解是我需要修改VSFTPD上的umask,但是我怎么知道要改成什么?
假设我的 umask 是 0077。
我有一个目录,foo我想对其应用特殊权限。我在其中创建的所有文件foo都应该是全局可读的,并且所有目录都应该是全局可读和可执行的。
目前,如果我创建一个文件,它将是 0600,目录将是 0700:
$ cd foo/
$ touch file
$ mkdir directory
$ ls -l
drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw------- 1 nfm nfm 0 2012-01-12 16:15 file
Run Code Online (Sandbox Code Playgroud)
我希望文件是 0644,目录是 0755,不管我的 umask:
drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw-r--r-- 1 nfm nfm 0 2012-01-12 16:15 file
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
002默认情况下,我需要 apache2 创建的文件具有 umask ,即组 rw。
我试过放入umask 002/etc/apache2/envvars ,虽然这个脚本确实作为 apache 启动的一部分执行(apache2ctl graceful),但 umask 没有效果。大概在启动过程中的某个地方(例如,当用户从 降级root到 时www-data)有更好的地方放置它。
我读过有关 Fedora 的帖子和一个建议将 umask 放入的帖子,/etc/init.d/apache2但这些都不适用于 Debian (Squeeze)。
你能帮我吗?
我知道这个问题已经讨论过了,但是通过阅读帖子我无法找到答案,因为有些人说“是的 umask 可以工作”,而其他人说“OpenSSH put 命令始终保留权限”
在此之前,准确地说:
internal-sftp子系统,-u 0002用于 umask-por-P选项从我一方面读到的内容:有很多方法可以为 SFTP 传输定义 umask:
-u的internal-sftp(或sftp-server)中,由于5.4的OpenSSHsftp-server(在其中我们明确设置了 umask - 这不适合 chrooted 环境顺便说一句)pam.d/sshd文件中添加特定配置另一方面,我读过:
OpenSSH SFTP 客户端和服务器确实传输权限(作为扩展)并在本地创建具有权限的远程文件。AFAICT,没有办法禁用这种行为。
所以我做了以下测试:
在我的客户端上,我创建了权限为 600 和 700 的文件MYFILE和目录MYDIR。
然后用sftp命令:
mkdir => the new directory has permissions following the umask (OK)
put MYFILE …Run Code Online (Sandbox Code Playgroud) // 2 月 8 日更新 - 简要说明未决问题:
我们的情况
我们公司的几个人登录到服务器并上传文件。他们都需要能够上传和覆盖相同的文件。他们有不同的用户名,但都属于同一个组。但是,这是一个 Internet 服务器,因此“其他”用户应该(通常)只有只读访问权限。所以我想要的是这些标准权限:
文件:664
目录:771
我的目标是所有用户都不需要担心权限。服务器的配置方式应使这些权限适用于所有新创建、复制或覆盖的文件和目录。只有当我们需要一些特殊权限时,我们才会手动更改它。
我们通过 Nautilus 中的 SFTP-ing 将文件上传到服务器,通过使用 sshfs 挂载服务器并在 Nautilus 中访问它,就像它是本地文件夹一样,以及通过命令行中的 SCP-ing。这基本上涵盖了我们的情况和我们的目标。
现在,我已经阅读了很多关于美丽的 umask 功能的内容。据我所知,umask(与 PAM 一起)应该允许我做我想做的事:为新文件和目录设置标准权限。然而,经过许多小时的阅读和反复试验,我仍然没有让它起作用。我得到了许多意想不到的结果。我真的很想深入了解 umask 并且有很多问题没有得到解答。我将在下面发布这些问题,以及我的发现和对导致这些问题的试验的解释。鉴于很多事情似乎都出错了,我认为我做错了几件事。因此,有很多问题。
注意:我使用的是 Ubuntu 9.10,因此无法更改 sshd_config来设置 SFTP 服务器的 umask。已安装 SSH OpenSSH_5.1p1 Debian-6ubuntu2 < 需要 OpenSSH 5.4p1。那么问题来了。
1. 我是否需要重新启动 PAM 更改才能生效?
让我们从这个开始。涉及的文件太多了,我无法弄清楚什么会影响,什么不会影响,也因为我不知道是否必须重新启动整个系统才能使 PAM 更改生效。我在没有看到预期的结果后这样做了,但这真的有必要吗?或者我可以从服务器注销并重新登录,新的 PAM 策略是否有效?或者是否有一些“PAM”程序可以重新加载?
2. 是否有一个单一的文件可以影响所有会话的所有用户?
所以我最终更改了许多文件,因为我阅读了许多不同的东西。我最终在以下文件中设置了 umask:
~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session …Run Code Online (Sandbox Code Playgroud) 我有一个 http 守护进程服务器进程 (yaws),我希望服务器使用 002 的 umask 写入任何新文件,以便同一组中的另一个用户可以修改、移动或删除由守护进程创建的文件。这是在 Ubuntu 10.04 上。
与Apache不同,yaws没有umask的配置选项,那么有什么方法可以设置任何守护进程的umask呢?
我找到了关于将 init 脚本更改为 add 的答案umask 002。这确实有效,但我不确定编辑 init 脚本是在多台机器上轻松记录和配置的最佳方式。
我还发现参考pam_umask模块这里。看起来这允许在 /etc/passwd 的 GECOS 字段中配置 umask 的每个用户设置。
还有其他方法可以为守护进程设置 umask 吗?推荐的方式是什么?
我正在尝试使用特定的(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。