问题

导出 rootfs 的时候,出现一个问题,sudo 出现权限错误 /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

定位

查看这个文件的属性,会看到 sudo 属性缺少了 SUID,而一个正常的 sudo 文件应该的权限如下:

1
2
ls -l /usr/bin/sudo
# -rwsr-xr-x 1 root root 166056 Jan 19 2021 /usr/bin/sudo

上面的命令显示,sudo 属于 root/root,所有用户都拥有可执行的权限,同时设置了 Set UID (SUID);简单来说就是在执行时具有文件所有者的权限。

解决

所以切到 root 账号,修改文件权限即可:

1
chmod 4751 /usr/bin/sudo

Linux 文件特殊权限

SUID/SGID/SBIT 权限设置与一般rwx属性的设置类似:

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

并且也可以通过 ls -ll 来查看属性设置

  • rwsrw-r– 表示设置 SUID 属性
  • rwxrwsrw- 表示设置 SGID
  • rwxrw-rwt 表示设置 SBIT 属性

设置 UID(SUID):设置使文件在执行阶段具有文件权限

SUID 仅可在二进制文件上使用。

设置 GID (SGID):只对目录有效

任何用户在此目录下创建的文件,所属 用户组 都和目录所属 用户组 相同;

Sticky Bit (SBIT):防删除属性,只对目录有效

在拥有 SBIT 的目录下,用户若在该目录下拥有 wx 的权限,则当用户在该目录下创建的子目录或者文件,也只有拥有者与 root 有权限删除。