各位好,
谢谢大家帮忙解惑我的相关问题,
但是可能是我的叙述不是很清楚,所以有些回答误会我的意思
关于我上一篇的问题是写说,我无法理解 sudo su - USER_NAME 这个指令的使用情境,
先来作个情境设定,
假设一个系统有 4 个帐号 (root , alice , bob , service)
1. root 没有设定密码,所以无法经由 root 帐号登录,
仅能经由 sudoer 使用 sudo su - root 来取得 root BASH
2. alice 为自然人帐号,并且在 wheel group 中,是拥有 sudoer 权限的帐号,
3. bob 为自然人帐号 (非 daemon 或 application service ),bob 非 sudoer
4. service 为 application 的帐号,非 sudoer
先说我对于 Linux 系统的使用理解,
帐号、权限分离是很好的做法,
所以每个服务,每个自然人都应该要有自己的帐号,
如此,谁可以做什么,谁做了什么,都应该一目了然,
(这边先排除 root)
我想像中的帐号管理是,
admin (sudoer) 当然拥有较高权限,
admin 可以创造帐号,以用于不同的服务管理
(例如: postgres 管理 postgreSQL service)
例如:
admin 创造了 postgres 服务的帐号,理当也知道 postgres 的密码,
所以需要管理 DB service 的时候,就用 postgres 的帐密登入,
管理完后,登出,
帐号、权限分离,很 OK
关于自然人帐号的部分,
alice 创造了 bob 的帐号,
bob 第一次登入的时候,创建了密码,
alice 可以使用他的管理者权限去增减 bob 帐号的权限,甚至把 bob 帐号删除,
但是 alice 不应该有可以伪装成 bob,以 bob 身份去做事情的权限,
因为 bob 是一个自然人,
如果今天 alice 是使用 bob 的帐密登入了 bob 的帐号,
那就是 bob 的密码外泄,alice 盗用密码,这很明确,没问题
但是 $ sudo su - bob ,这个指令是要用 alice 自己的密码登入 bob 的帐号,
alice 可以在 bob 不知道的时候,
以 bob 的名义去 create, read, update, delete, bob home directory 的任何档案
或者修改任何 bob 帐号权限可以修改的任何系统 configuration,
而 log 上都会显示成 bob 自己做的,
这不就是等同帐号盗用吗?
而重点是 bob 的密码还没有外泄,因为 alice 是用自己的密码登入的
当然我们都知道 root / admin 的权力至高无上,所以我们应该交给信任的人来作
假设我们信任的 administrator,他永远忠诚且不受情绪困扰,每日稳定工作,
但是 admin 的帐号有没有可能外泄?
随便想就有好几个情境,在实际资安上是有发生过的
1. hacker 取得 admin 的帐密,执行不法行为后,为了隐藏痕迹,则伪造或删除 log
2. 组织内的内鬼,想要做一些不法的事情,但又不敢用自己的帐号作,
所以就以 social engineering 取得 admin 帐号,
并且 $ sudo su - USER_A , 嫁祸给一个替罪羊来掩盖自己的痕迹
.... 等等,许多的方式
以上的资安问题,
不就是因为 $ sudo su - USER_NAME 所造成的吗?
再说现在资安的趋势就是 zero trust,
连内网都要加强防护,许多系统也都不设定 root
而为什么 linux 会允许这种指令,感觉就是 anti-security pattern
或者是说
Linux 系统应该改成,admin 可以转换成 service 的帐号,
但是不能转换成自然人的 user account
这样应该就会好很多
不知道各位前辈,可以指点解惑吗?
谢谢
※ 引述《gowrite (gowrite)》之铭言:
: 各位好,我是一个 Linux 自学的新手,
: 想问一个有关于 Linux 中在 BASH 作 user 转换的实际意义,
: 假设使用 centOS 系统中,
: 有三个 users (root , alice , bob)
: 其中 alice 在 wheel group 中 (意即 alice 可以使用 sudo 指令)
: 当 alice 登入系统,取得自己的 BASH shell 之后,
: 就可以使用转换 user 指令
: $ sudo su - bob
: 然后 alice 输入自己密码,就可以转换 user 变成 bob
: 就可以用 bob 的角色做事情,
: 这边就是我最搞不懂的部分
: 1. 为什么 Linux 系统会允许 user A 可以不需要 user B 的允许,
: 就让 user A 自己转换为 user B 去做事情?
: 这样跟帐号盗用的差别在那里?
: 2. 为什么 Linux 系统在 user A 转换成 user B 时,要输入的是 user A 的密码,
: 而不是 user B 的密码?
: 3. Linux 系统如此设计的意义是在哪里呢?
: 同样的东西在 windows,alice 则必须要在 logout 之后,
: 重新以 bob 的账号登入,并且是以 bob 的密码登入,
: 我一直搞不懂 Linux 为什么转换成别人的 user account 是用自己的密码
: 希望有熟悉 Linux 系统意义的前辈可以帮忙解惑,
: 谢谢