假设我有两个用户 Alice 和 Bob 以及一个组 GROUPNAME 和一个文件夹foo,两个用户都是 GROUPNAME 的成员(使用 Linux 和 ext3)。
如果我将用户 Alice 下的文件保存为foo,则权限为:-rw-r--r-- Alice Alice。但是,是否可以实现保存在某个子目录下的每个文件都foo具有权限-rwxrwx--- Alice GROUPNAME(即所有者 Alice,组 GROUPNAME)?
如果我将 更改umask为0000,我希望创建一个具有rwxrwxrwx权限的文本文件(根据我对 umask 的理解,如“可能的重复”问题中所述)但是,当我尝试此操作时,我得到以下信息
$ umask 0000
$ touch /tmp/new.txt
$ ls -ld /tmp/new.txt
-rw-rw-rw- 1 alanstorm wheel 0 Jun 2 10:52 /tmp/new.txt
Run Code Online (Sandbox Code Playgroud)
也就是说,省略了执行权限,我最终得到rw-rw-rw-了文件(目录是rwxrwxrwx)。我在本地 OS X 机器、共享主机上的旧 BSD 机器和在 linode 上运行的 linux 服务器上尝试了这个。
为什么是这样?我的理解是 umask 是权限的最终仲裁者——我对此的理解不正确吗?如果是这样,还有什么会影响 unix 系统上文件的默认权限?
如何使用与默认值不同的 umask 在 Linux(zsh,如果重要)中交互式执行命令,仅用于一个命令?也许将命令组合在一行中?新的 umask 应仅应用于该命令,并为输入的下一个命令返回其默认值。
理想情况下,该命令在输入之前与有效的默认 umask 无关(换句话说,不必指定默认 umask)。
在 AIX 下,我可以使用以下命令检查umask所有用户:
cut -d : -f 1 /etc/passwd | while read ONELINE; do lsuser -a umask "$ONELINE"; done
Run Code Online (Sandbox Code Playgroud)
但是如何umask在 Linux 下检查所有用户的设置?(su对每个用户然后umask命令?有没有更好的方法?)
更新1:
这su对所有用户来说并不是最好的,因为在一些 RHEL 服务器上,一些用户的默认 shell 是暂停/关闭..:
shutdown:x:6:0:shutdown;asdf;asdf;F:/sbin:/sbin/shutdown
Run Code Online (Sandbox Code Playgroud)
所以如果我su对用户...然后服务器关闭?
UPDATE2:我为一个非 su 的答案创建了一个赏金。
限制性 umask 为 077 有什么缺点?许多发行版(我相信所有发行版,除了 Red Hat?)的默认 umask 为 022,在 /etc/profile.conf 中配置。对于多个用户正在访问的非桌面系统来说,这似乎太不安全了,而且安全性令人担忧。
与此相关的是,在 Ubuntu 上,用户的主目录也使用 755 权限创建,安装程序声明这是为了让用户更容易共享文件。假设用户可以轻松地手动设置权限来共享文件,这不是问题。
还有什么其他缺点?
所以我知道umask可以限制特权用户,使用这种格式umask ugo。
我知道 read = 4, write = 2, and exec = 1. 但是,当我输入时umask,它返回 4 位数字,即0022or 0073。我现在不知道这是如何工作的,因为有一个额外的数字。那个额外的数字是什么0022意思?
是否可以umask为系统用户设置(使用useradd --system username)?
如果我理解正确,文件权限有一个关联的 3 位数字,用于指定读/写/执行权限。
umask 值是从默认值中减去的默认“掩码”。那么对于 0022 的 umask 值,777 的默认值将变为 755?
这是否正确,如果正确,umask 值中的第一个 0 是多少?
使用 Gnome 3.18。我在其他家庭成员之间共享文件,但我的发行版 (archlinux) 上的默认 umask 是0022. 所以创建的每个文件/目录对于我们的公共组都是不可写的。
我尝试插入umask 0002,/etc/profile但 gnome 会话仍在使用0022. 不过,它适用于登录 bash shell。
我也尝试在/etc/pam.d/system-auth: 中添加这一行:
session required pam_umask.so umask=0002
它与/etc/profile. 我试过
如果我在 gnome-terminal shell 中手动更改 umask,然后我从中启动一个应用程序,比如 gedit,然后它创建的文件具有所需的权限。如果我从 gnome 菜单启动 gedit,则不会。所以我的事情真的是为gnome会话设置umask,我找不到在哪里做。
编辑(回答吉尔斯的评论):我使用 gdm 3.18 作为 DM。我还尝试将 pam_umask 行添加到/etc/pam.d/gdm-launch-environment. 所有其他gdm-*文件都包含session来自文件的包含system-auth,因此它们不需要更多。它不会改变任何东西。
/etc/login.defs包含UMASK 077但也USERGROUPS_ENAB yes应该为主要组是用户名的用户设置umask为0077或0007。
包含022umask in的唯一文件/etc是 …
我意识到新文件和目录的权限表现得有点奇怪。首先,umask 似乎返回了正确的答案:
$ umask
0002
Run Code Online (Sandbox Code Playgroud)
这意味着对我的用户和我的组具有完全访问权限,对世界其他地方没有写访问权限,没有 suid。但是如果我在 $HOME 中创建一个文件,它看起来是这样的:
$ ls -l testfile
-rw-rw-rw- 1 robe robe 0 mar 16 12:58 testfile
Run Code Online (Sandbox Code Playgroud)
即,给每个人写访问权限。目录也会发生同样的情况:
$ ls -ld testdir
drwxrwxrwx 2 robe robe 6 mar 16 13:00 testdir
Run Code Online (Sandbox Code Playgroud)
我认为这与使用 umask 0000 而不是 0002 相同。我在所有 /etc 中搜索了一些更改默认 0002 或 0022 的 umask 实例,但没有找到。这是默认的 CentOS 5.5 安装。为什么会发生这种情况的任何提示?