我在安装从源代码编译的一些软件包时遇到了一些问题。一切似乎都运行正常,直到我尝试实际使用安装在全局位置的文件。
事实证明,新创建文件的权限和用户/组都乱了。我使用简单的目录和文件创建命令很容易复制:
$ 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
。
使用chown
或chmod
无所谓,只要我使用,无论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
(所有者:完全访问、组:读取/执行、世界:读取/执行)。022
rwxr-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