我的 linux 命令做错了什么?

我的 linux 命令做错了什么?

我想从我的组继承每个新文件,这样我就可以拥有执行权限,而没有其他人,但是当我尝试创建新文件时,它给了我 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=wo=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其他的权限将关闭位(即写入)。

如果我们设置umask0007并删除并重新触摸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 组,他们仍然可以访问这些文件。要限制这些,请设置umaskumask 0077

参考

答案2

这样我就可以有执行权限,而其他人都没有

...
chmod 2700 -R ~/Documents/tool

已经够了。按照此命令,只有您的用户(和超级用户root)才能访问~/Documents/tool/其中的文件。

您不需要将里面的文件更改为访问模式700。所以你不需要使用这里-R的选项chmod。而且你不需要摆弄你的umask.

首先,您当前umask0002已经适合通用用途。

其次,如果你依靠在某些情况下umask,您会感到不愉快的惊讶,例如,如果您注意到umaskGNOME 文件、文本编辑器等的重置(例如,在 Fedora 28 上的 Gnome 3 内部,从 GDM 开始)。这些应用程序在systemd --user服务内部运行(它们通过 启动dbus.service),因此受到此 systemd 问题的影响:https://github.com/systemd/systemd/issues/6077 不幸的是,没有办法可靠地重新配置它。

您也不需要创建新组 - 除非您想通过将某些其他用户放入该组来授予他们访问权限。

如果您打算将其他用户添加到组中并使用它来授予他们读取(和执行)或读取+写入访问权限,则您将需要一些不同的步骤。您不会使用以 结尾的模式700,因为它只允许拥有用户访问。

对于组写访问情况,如果您希望能够使用像 GNOME 一样工作的应用程序来创建此类文件,您还需要针对 systemd 问题实施解决方法。 systemd 用户服务的问题在于它们将 umask 重置为0022相反。我再说一遍,没有办法可靠地重新配置它。

相关内容