pysunred 发表于 2023-4-3 16:39:03

centos9的用户权限问题

友友好,
我现在碰到一个这样的问题,找了半天没找到相关资料

我新建了一个共享盘权限设置为rwx,如下命令:
chmod -R 770 /usr/share/public
然后user1在这个文件夹中新建一个文件
这个文件的权限却为rw,没有x了。
需要再执行一次
chmod -R 770 /usr/share/public
才有rwx

这到底是哪里出了问题呢?
我要的效果是我把这个文件夹及其子目录都设置为rwx
为什么在这个文件夹里新建的文件不会自动为rwx???

isdkz 发表于 2023-4-3 16:42:42

本帖最后由 isdkz 于 2023-4-3 16:49 编辑

你好!

这个问题的原因在于,当用户创建一个新文件时,Linux 默认的行为是不分配执行权限。你可以通过设置文件创建掩码 (umask) 来改变这个默认行为。

umask 是一个控制默认文件和目录权限的设置。它通过从完全权限(通常为 777 文件夹和 666 文件)中减去指定的值,

从而决定新文件和目录的默认权限。例如,当 umask 设置为 002 时,新创建的文件将具有 664(rw-rw-r--)权限,新创建的目录将具有 775(rwxrwxr-x)权限。

也就是说不管怎样你新创建的文件都是没有执行权限的



Linux 系统默认不会让新创建的文件继承其父目录的权限。但是,你可以使用setfacl(文件访问控制列表)来实现类似的效果。


要让新创建的文件继承其父目录的权限,您可以使用 setfacl 命令来配置访问控制列表。这使您可以更精确地控制目录及其子文件的权限。

首先,确保您的系统已经安装了 acl 软件包。在基于 Debian 的系统中,使用以下命令安装:

sudo apt-get install acl

在基于 RHEL/CentOS 的系统中,使用以下命令安装:

sudo yum install acl

使用 setfacl 命令设置默认 ACL。例如,要为目录 /usr/share/public 设置默认 ACL,以便新创建的文件继承其父目录的权限,请执行以下命令:

sudo setfacl -d -m u::rwx,g::rwx,o::r-x /usr/share/public

这会将默认用户(u)、组(g)和其他(o)权限分别设置为 rwx、rwx 和 r-x。

现在,新创建的文件将继承其父目录的权限。请注意,setfacl 需要文件系统支持 ACL,并且在不同的文件系统上,这些设置的效果可能略有不同。


pysunred 发表于 2023-4-3 16:58:01

isdkz 发表于 2023-4-3 16:42
你好!

这个问题的原因在于,当用户创建一个新文件时,Linux 默认的行为是不分配执行权限。你可以通过设 ...

原来这么麻烦,我就是想让同一个部门的人访问相应的文件夹,不管是谁上传的,有没有更简单的办法

isdkz 发表于 2023-4-3 16:58:50

pysunred 发表于 2023-4-3 16:58
原来这么麻烦,我就是想让同一个部门的人访问相应的文件夹,不管是谁上传的,有没有更简单的办法

那没必要给执行权限呀

pysunred 发表于 2023-4-3 17:05:45

isdkz 发表于 2023-4-3 16:58
那没必要给执行权限呀

如何没有执行权,同组其他用户双击都无法打开?我也觉得纳闷
为什么同一组用户,别人有rw权限,去无法打开查看?

isdkz 发表于 2023-4-3 17:08:31

pysunred 发表于 2023-4-3 17:05
如何没有执行权,同组其他用户双击都无法打开?我也觉得纳闷
为什么同一组用户,别人有rw权限,去无法打 ...

文件夹是需要执行权才能打开的,文件不需要

pysunred 发表于 2023-4-3 17:18:34

isdkz 发表于 2023-4-3 17:08
文件夹是需要执行权才能打开的,文件不需要

就是文件文本文档,打开时,也提示无权打开

pysunred 发表于 2023-4-3 17:20:44

-rwxrw---- 1 zengjh gklw       04月3 17:01 ddd.txt

isdkz 发表于 2023-4-3 17:28:06

pysunred 发表于 2023-4-3 17:18
就是文件文本文档,打开时,也提示无权打开

可能别人访问你的smb使用的用户不是你那个文件所属用户,也不在文件所属的组里面

你先创建一个权限为666的文件测试一下看看能不能访问

pysunred 发表于 2023-4-3 17:36:20

isdkz 发表于 2023-4-3 17:28
可能别人访问你的smb使用的用户不是你那个文件所属用户,也不在文件所属的组里面

你先创建一个权限为6 ...

[综合共享资料]
      comment = public data
      path = /usr/share/public
      valid users = @pubgroup
      write list = @pubgroup
      create mask = 770
      directory mask = 770

用户是所属组,文件是组内另外一个用户创建的。我就是奇怪

pysunred 发表于 2023-4-3 17:40:53

按理来说,不管是谁创建的文件,只要组的权限是rw,同组成员就可以打开吧,为什么不行呢?

pysunred 发表于 2023-4-3 17:43:00

我刚刚试了下你建议使用ACL规则,但仍是这样,
应该系统默认创建的文件,其它成员最高只有rw权限,
现在的问题是,为什么组内其它成员无法打开?
这个跟主组,附组有关系吗??

tengke 发表于 2023-4-19 17:47:24

看看要查看的用户在那个组里   , 对应的组是否是文件的所属组里面      查看文件组是否有对应的权限

ForGot_227 发表于 2023-4-24 09:27:33

/etc/bashrc中有个 umask的参数。777 减去 这个参数 的值等于你新建文件的默认权限。
例如777 - 027 = 750 权限

琅琊王朝 发表于 2023-7-30 22:06:02

根据您提供的信息,您希望将/usr/share/public文件夹及其子目录设置为rwx权限。您使用的命令chmod -R 770 /usr/share/public是正确的,应该可以实现这个目标。
然而,新创建的文件默认情况下可能不会继承父目录的权限。这是因为在Linux中,新创建的文件会继承默认的权限,通常是根据系统的umask值来确定的。
要解决这个问题,您可以通过更改umask值来设置新创建文件的默认权限。umask值是一个掩码,用于确定新创建文件的权限。默认情况下,umask值通常设置为022,这意味着新创建的文件权限会减去022。
您可以使用umask命令来查看当前的umask值。如果umask值不是您期望的权限设置,您可以使用umask命令来更改它。例如,如果您希望新创建的文件具有完全权限(rwx),可以执行以下命令:
umask 000
然后,再次创建文件,它应该继承父目录的权限并具有rwx权限。
请注意,更改umask值会影响系统中所有新创建的文件和目录的权限。如果您只想更改特定目录下新创建文件的权限,可以考虑使用ACL(访问控制列表)来设置更精细的权限控制。

Softest卧龙 发表于 2023-8-26 23:00:50

因为你递归了这个目录文件夹/目录啊
当然这个文件的权限却为rw,没有x了
你需要把命令中的-R,去掉,取消递归
我解释一下递归recuisive:就是你设置的这个目录权限会“会传染”到它的子目录中

第二种情况说明:如果 我要的效果是我把这个文件夹及其子目录都设置为rwx
那就是你的权限写错了,把770改成777试试
让其他组的用户也有同样权限,祝你好运~
页: [1]
查看完整版本: centos9的用户权限问题