我想从我的组继承每个新文件,这样我就可以拥有执行权限,而没有其他人,但是当我尝试创建新文件时,它给了我 664 权限,我该如何解决这个问题?
sudo adduser $USER cyber_espionage
sudo chown $USER:cyber_espionage ~/Documents/tool
sudo chmod 775 ~/Documents/tool
sudo chown $USER:cyber_espionage -R ~/Documents/tool
sudo chmod 2700 -R ~/Documents/tool
sudo find ~/Documents/tool -type d -exec chmod 775 "{}" \;
sudo find ~/Documents/tool -type f -name "*.py,*.sh" -exec chmod +x "{}" \;
sudo find ~/Documents/tool -type f -name "*.sh" -exec chmod +x "{}" \;
答案1
背景
您需要使用该命令设置文件权限模式掩码umask
。执行此操作后,复制到各自目录中的任何新文件都将具有权限设置,以便只有通过启用的权限位umask
才会传播到新复制的文件。
$ umask
0022
# -or- symbolically
$ umask -S
u=rwx,g=rx,o=rx
上面指出权限g=w
或o=w
将被省略(关闭,有效)。请参阅此 U&L 问答,标题为:执行与读取位。 Linux 中的目录权限如何工作?如果不清楚,请参阅有关权限的更多信息。
笔记Unixumask
可能是一个有点令人困惑的话题,因为它是一个掩码,所以它屏蔽了权限位,而不是规定要使用哪些位,而是说你不想要哪些位。
更简洁地说:
仅对
umask
要创建的文件的权限位应用额外的掩码。文件的权限位主要由创建文件的程序决定,特别是由模式参数creat()
或系统调用open()
。这执行位如果没有原因(例如创建可执行文件),通常不会设置。任何值都umask
不能添加创建程序未指定的位;umask
仅有的重置位。
你的问题
现在回到你的问题,让我们touch afile
:
$ touch afile
$ ls -l afile
-rw-r--r-- 1 vagrant vagrant 0 Jul 8 11:45 afile
在上面umask
设置为0022
规定组的权限将2
关闭位(即写入)并且2
其他的权限将关闭位(即写入)。
如果我们设置umask
为0007
并删除并重新触摸afile
:
$ umask 0007; rm -f afile; touch afile; ls -l
total 0
-rw-r----- 1 vagrant vagrant 0 Jul 8 11:56 afile
现在的权限是其他用户无法访问该文件 (0007)。这是因为我们已经打开了权限其他组件的所有位 (rwx),并“屏蔽”了它们通过我们的umask
设置进行设置。
要通过 Unix 权限限制其他用户访问您的目录,请将您的权限设置umask 0007
为限制“其他”用户组。
笔记:如果文件设置为其他人所属的 Unix 组,他们仍然可以访问这些文件。要限制这些,请设置umask
为umask 0077
。
参考
答案2
这样我就可以有执行权限,而其他人都没有
...
chmod 2700 -R ~/Documents/tool
已经够了。按照此命令,只有您的用户(和超级用户root
)才能访问~/Documents/tool/
其中的文件。
您不需要将里面的文件更改为访问模式700
。所以你不需要使用这里-R
的选项chmod
。而且你不需要摆弄你的umask
.
首先,您当前umask
的0002
已经适合通用用途。
其次,如果你依靠在某些情况下umask
,您会感到不愉快的惊讶,例如,如果您注意到umask
GNOME 文件、文本编辑器等的重置(例如,在 Fedora 28 上的 Gnome 3 内部,从 GDM 开始)。这些应用程序在systemd --user
服务内部运行(它们通过 启动dbus.service
),因此受到此 systemd 问题的影响:https://github.com/systemd/systemd/issues/6077 不幸的是,没有办法可靠地重新配置它。
您也不需要创建新组 - 除非您想通过将某些其他用户放入该组来授予他们访问权限。
如果您打算将其他用户添加到组中并使用它来授予他们读取(和执行)或读取+写入访问权限,则您将需要一些不同的步骤。您不会使用以 结尾的模式700
,因为它只允许拥有用户访问。
对于组写访问情况,如果您希望能够使用像 GNOME 一样工作的应用程序来创建此类文件,您还需要针对 systemd 问题实施解决方法。 systemd 用户服务的问题在于它们将 umask 重置为0022
相反。我再说一遍,没有办法可靠地重新配置它。