在debian的安装手册中提到了这样一句话:
默认系统上新建的第一个用户使用 sudo 命令变成根用户。
手册地址:
https://www.debian.org/releases/stable/amd64/ch06s03.zh-cn.html#di-finish
我的问题是,使用sudo apt update其实就等同于用户root在apt update?
如果是的话,那么这个用户其实就是根用户,完全的根用户权限,这么理解对么?
在debian的安装手册中提到了这样一句话:
默认系统上新建的第一个用户使用 sudo 命令变成根用户。
手册地址:
https://www.debian.org/releases/stable/amd64/ch06s03.zh-cn.html#di-finish
我的问题是,使用sudo apt update其实就等同于用户root在apt update?
如果是的话,那么这个用户其实就是根用户,完全的根用户权限,这么理解对么?
对。
$ sudo whoami
root
可以看这个 arch Wiki sudo链接:
https://wiki.archlinuxcn.org/wiki/Sudo
有没有哪些情况,必须靠root账户解决而不能用sudo?
当你把 sudo 搞坏了的时候(比如丢了 suid、配置文件写糊了)。
其实我更倾向于把用户加入 sudo 组,不过都行
不严谨的说,sudo 的工作原理是:
考虑这样一个场景,用户 uid=1000 启动了 bash,在 bash 中运行 passwd
命令,这是个 SUID 程序,它的 EUID 会被设置为 0,因此它可以访问或修改密码文件;它的 RUID 属于用户,所以用户可以向 passwd 进程发送信号。
同理,使用 sudo {command}
的时候,sudo 也被设置了 EUID=0,具有 root 权限,它会检查用户是否在 sudoers 列表,是否符合设定,然后检查用户密码,如果一切正常那就会用指定的 uid 启动命令进程。当不使用 -u 参数指定用户名时,默认会使用 root 用户运行命令(取决于配置)。
题外话:
因为 SUID 的特殊性,一般的,挂载不可信的外部硬盘时都会在挂载参数写 nosuid。类似的挂载参数还有 noexec,nodev。另外的,目前流行的发行版中,对于常用的 U 盘等设备,应该默认禁止了不安全的标志位生效,所以应该是不用担心的。
快速挑战!
问题:如果一个 bash 脚本或者说 .sh 文件被设置了 SUID 位,直接运行它也会有 root 权限吗?
答案是不会。因为运行 .sh 的程序是 shebang 指定的 shell,它没有 SUID。