权限抽象
用户和组
- 用户账户
- 组(group)账户: 为成员们分配某一类权限, 一个成员可以在多个组内, 那就可以获得多个相应的权限
- root账户, 也就是超级管理员, 对系统有着完全的掌控,可以使用系统提供的全部能力
- linux中的文件有三种权限
- 读权限®: 控制读取文件
- 写权限(w): 控制写入文件
- 执行权限(x): 控制将文件执行
初始权限问题
linux为每个用户创建一个同名分组, 文件谁创建谁拥有
rw-rw-r–: 意思是当前用户及当前组都可读可写不可执行, 所有用户组可读不可写不可执行.
权限架构思想
优秀的权限架构主要目标:
让系统安全,稳定且用户, 程序之间相互制约, 相互隔离
要求权限系统中的权限划分足够清晰, 分配权限的成本足够低
优秀的权限架构:
- 最小权限原则(least Privilege)
- 权限设计需要保证系统的安全和稳定
- 对于安全级别较高的时候, 还需要成员权限相互牵制.
- 每个程序也应该减少权限
- 权限划分的边界应该足够清晰,尽量做到相互隔离
分级保护
权限包围(privilege bracking)
用户分组指令
- 查看
groups
: 查看所有用户分组- 同名自有分组
- adm 分组于系统监控, /var/log 中的部分日志文件就是adm分组
- sudo 分组用户可以通过sudo指令提升权限
- 用户分组指令
cat /etc/passwd
查看所有分组- 创建用户:
sudo useradd foo
: 创建了foo用户, 也默认为当前用户创建了foo用户组 - 为用户创建密码:
passwd foo
之后输入密码, 即为 foo用户创建了密码. - 创建分组:
sudo groupadd foogroup
, 创建了foogroup分组 - 为用户添加次级分组
sudo usermod -a -G sudo foo
, 为foo用户添加到sodu组中, 使foo用户有了sodu组的权限, -a: append -G: 次级分组清单, foo: 账户名 - 修改用户分组:
sudo usermod -g somegroup foo
: 将foo用户的组修改为somegroup, -g:
root@bc55bdb74522:/srv/jupyterhub# useradd foo
root@bc55bdb74522:/srv/jupyterhub# groupadd foo
groupadd: group 'foo' already exists
root@bc55bdb74522:/srv/jupyterhub# passwd foo
New password:
Retype new password:
passwd: password updated successfully
文件权限管理指令
- 查看
ls -l
- 修改文件权限
chmod +x ./foo
: 将foo文件设置为可执行chmod -x ./foo
: 取消foo文件的可执行权限chmod +rwx ./foo
, 将foo文件设置为可读可写可执行权限rwxrwxrwx
可以使用二进制111 111 111
来表示(中间的空格是为了方便展示), 转换为十进制即为:777
, 所以也可以使用chmod 777 ./foo
为foo文件设置为可读可写可执行的权限rw-rw-rw-
, 可以使用二进制110 110 110
来表示, 转为十进制即为:666
, 所以也可以使用chmod 666 ./foo
配置为可读可写不可执行权限- 以此类推: 776 667 之类的都可以随便组合使用了
- 修改文件所属用户
chown bar ./foo
将foo的用户改为barchown g.u ./foo
将foo的用户改为g.u