问题
导出 rootfs 的时候,出现一个问题,sudo 出现权限错误 /usr/bin/sudo must be owned by uid 0 and have the setuid bit set。
定位
查看这个文件的属性,会看到 sudo 属性缺少了 SUID,而一个正常的 sudo 文件应该的权限如下:
1 | ls -l /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 的目录下,用户若在该目录下拥有 w 及 x 的权限,则当用户在该目录下创建的子目录或者文件,也只有拥有者与 root 有权限删除。

