使用“sudo”创建文件会弄乱权限和用户

使用“sudo”创建文件会弄乱权限和用户

我在安装从源代码编译的一些软件包时遇到了一些问题。一切似乎都运行正常,直到我尝试实际使用安装在全局位置的文件。

事实证明,新创建文件的权限和用户/组都乱了。我使用简单的目录和文件创建命令很容易复制:

$ sudo mkdir /usr/local/bar
$ sudo touch /usr/local/bar/foo
$ ls -l /usr/local
total 11M
drwxr--r--  2 root root 4,0K jul 24 23:56 bar/
[...]
$ ls -l /usr/local/bar/
ls: cannot access '/usr/local/bar/foo': Permission denied
total 0
-????????? ? ? ? ?            ? foo
$ sudo ls -l /usr/local/bar/
total 0
-rw-r--r-- 1 root root 0 jul 24 23:56 foo

如上例所示,创建的目录最初看起来不错,但查看目录内部时,文件的用户、组和其他所有内容都完全混乱。从超级用户角度查看时,它们看起来不错sudo

使用chownchmod无所谓,只要我使用,无论sudo我做什么都会导致同样的问题。

我的/etc/sudoers文件(无评论):

Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

myusername  ALL=NOPASSWD: ALL

一切都应该是默认的,除了最后一行,我添加它以便不必每次都输入密码。

我有一个完全最新的 16.04 安装。

是不是我的安装有问题?sudo是不是我的使用方式有问题?还有其他问题吗?


umask -S按要求输出:

$ umask -S
u=rwx,g=r,o=r
$ sudo bash -c "umask -S"
u=rwx,g=r,o=r

$ grep '^UMASK\|^USERGROUPS_ENAB' /etc/login.defs
UMASK       033
USERGROUPS_ENAB no

答案1

您的系统问题是您的umask设置有点奇怪/混乱。

有关一般信息,umask请参阅什么是“umask”以及它如何工作?
简而言之,我们可以说umask定义了新文件的默认权限集。它是在中配置的/etc/login.defs

的默认值为,这导致新文件的默认权限为umask(所有者:完全访问、组:读取/执行、世界:读取/执行)。022rwxr-xr-x

您已将此设置更改为,033导致默认权限为rwxr--r--,即组和其他人没有执行权限。

我们面临的问题是,从目录中删除执行权限后,该目录将不再可浏览。您需要执行权限才能列出目录的内容。由于新生成的目录可供所有人执行,但其所有者拒绝执行,因此默认情况下只有所有者用户(此处为 root)可以列出目录内容。


您有两个选择:

  • 保留并在所有需要的目录上umask手动添加供其他人使用的执行权限。chmod +x

    这是一项繁重的工作,您很可能时不时会忘记。只有当您有充分理由不默认时才这样做umask

  • 重置umask回其默认值022

    为此,请/etc/login.defs以 root 身份使用您最喜欢的文本编辑器打开该文件,例如使用sudo nano /etc/login.defs

    搜索此行:

    UNAME       033
    

    并再次将其替换为默认设置:

    UNAME       022
    

此外,我还看到您已USERGROUPS_ENAB设置为no,但其默认值为yes。此设置不仅使umask组权限等于非 root 用户的所有者权限,而且还会导致自动生成(如果不再需要,则删除)用户的主要组(与用户相同的名称和 ID)。

我个人建议也将该行重置为其默认值,除非您有理由不这样做。

因此搜索该行

USERGROUPS_ENAB no

并将其替换为

USERGROUPS_ENAB yes

相关内容