问题
导出 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
有权限删除。