用户 、组和权限管理
知识点
1.
linux操作系统是支持多用户, 多任务的. Multi-tasks, Multi-Users
2. 使用者的权限
用户识别是通过标识, 密码.
认证: Authentication
授权: Authorization
审计: Audition
组: 用户组, 存储用户的容器
3. 用户类别
管理
普通用户
登录用户
系统用户
用户标识: UserID, UID
16位二进制数字标识, 范围0-65536
管理员: 0
普通用户: 1-65535
系统用户: 1-499(CentOS6) 1-999(CentOS7)
登录用户: 500-65535(CentOS6) 1000-65535(CentOS7)
名称解析:
就是一个名称转换的过程 Username <---> UID
根据名称解析库进行解析: 解析库位于 /etc/passwd
[root@localhost ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin ...
4. 组类别
组类别1:
组标识: GroupID: GID
管理员组: 0
普通用户组: 1-65535
系统用户组: 1-499(CentOS6) 1-999(CentOS7)
登录用户组: 500-65535(CentOS) 1000-65534(CentOS7)
名称解析: group那么 <---> gid
解析库: /etc/group
[root@localhost ~]# cat /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4:
...
组类别2:
用户的基本组
用户的附加组
组类别3:
私有组: 组名同用户名, 且只有一名用户
公共组: 组内包含多个用户
5. 认证信息:
通过比对实现存储的, 与登录时提供的信息是否一致.
password:
/etc/shadow: 用户密码库
/etc/gshadow: 组密码库
密码的准则:
1. 使用随机密码
2. 最短不要低于8位
3. 应该使用大写字母, 小写字母, 数字和标点符号中的3类以上
4. 定期更换
加密算法:
对称加密: 加密和解密需要使用同一个密码
非对称加密: 加密和解密使用的是一对儿秘钥
秘钥对:
公钥: public ley
私钥: private key
单向加密: 只能加密, 不能解密: 提取数据的特征码
定长输出: md5算法产生固定的32个字节长度
雪崩效应: 就像md5摘要算法一样, 只要有一位不同, 输出结果就完全不同
常用的加密算法:
MD5: message digest, 128bits
sha: secure hash algorithm, 160bits
sha224, sha256, sha384, sha512
为了防止用户的密码一致, 会在计算之间添加随机的salt
/etc/passwd: name: 用户的信息库
name: password:UID:GID:GECOS:directory:shell
name: 用户名
password: 密码
UID:
GID: 用户主组的id号
GECOS: 注释的信息
directory: 用户的家目录
shell: 用户的默认shell, 登录时默认shell程序
tcpdump:x:72:72::/:/sbin/nologin user:x:1000:1000:user:/home/user:/bin/bash centos:x:1001:1001::/home/centos:/bin/bash gentoo:x:1002:1002::/home/gentoo:/bin/bash
/etc/shadow: 用户密码
9个字段
用户名: 加密的密码:最近一次修改密码的时间: 最短使用期限: 最长使用期限: 警告期限: 密码禁用: 用户过期日期: 保留字段
最短使用期限: 是指上次改后需要经历的最短时间才能继续修改
最长使用期限: 距离上次修改密码后的允许使用的最大时间
密码禁用: 用户不允许使用自己的密码登录
账户禁用: 用户不允许登录
/etc/group: 租的信息
group_name:password:GID:user_list
组名: 密码: 组ID: 用户列表
密码: 放在/etc/gshadow中
user_list: 该组的用户成员, 一次组为附加组的用户的用户列表
user:x:1000:user centos:x:1001: gentoo:x:1002: slackware:x:1003:
6. linux用户和组管理
groupadd: 添加组
groupadd [OPTIONS] group_name
-g GID: 指定GID: 默认是上一个组的GID + 1
-r: 创建系统组
groupmod: 修改组
groupmod [options] GROUP
-g GID: 指定修改为新的gid
-n newname: 修改为新的组名
groupdel: 删除组
groupdel GROUP
useradd: 添加用户
useradd [options] LOGIN
-u UID 指定用户的uid, 否则为上一个uid+1, 1000以下是系统用户, 1000以上为登录用户
-g GID 指定基本组id, 这个组必须事先存在
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]] 可以为用户添加多个附加组
-c --comment COMMENT: 指定注释信息
-d, --home-dir HOME_DIR: 指定用户的家目录, 默认是在/home目录下添加一个与登录名同名的家目录, 并从/etc/skel目录复制文件到该目录下, 如果目标目录已经存在, 则不会复制环境 初始化文件到家目录
-r --system: 创建一个系统用户
-s --shell SHELL: 指定用户的默认shell, 可用的shell列表 存在于/etc/shells
useradd -D: 显示创建用户的默认选项
配置用户的选项都在 /etc/login.defs这个配置文件下
useradd -d [选项] 修改创建用户的默认选项
修改的文件保存在 /etc/default/useradd文件中..
[root@localhost ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh [root@localhost ~]# useradd -s /bin/sbin/nologin t5 [root@localhost ~]# tail -1 /etc/passwd t5:x:1012:1014::/home/t5:/bin/sbin/nologin
usermod: 修改用户
-u, --uid UID: 修改用户的uid
-g, --gid GROUP: 修改用户所属的基本组, 组得事先存在
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]] 修改用户的附加组, 但是使用的时候会覆盖原来的附加组
-a, --append: 和-G一起使用, 表示追加的作用, 不会覆盖原来的附加组..
-c, --comment COMMENT, 修改注释信息
-d, --home HOME_DIR: 修改用户的家目录, 但是会把原来用户的文件都删除, 这时候就需要和-m命令一起使用
-m, --move-home: 移动用户的家目录, 这个只有和-d一起使用才能生效
-l, ,-login NEW_LOGIN: 修改用户的用户名
-L, --lock: 锁定用户的密码, 这个实在用户的密码之前添加!号
-U, --unlock: 解锁用户的密码
-s, --shell SHELL: 更改用户的登录shell
userdel: 删除用户
-r 删除用户时一并删除家目录
passwd: 密码管理命令
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
不带任何参数, 表示修改自己的密码
passwd USERNAME : 修改指定用户的密码, 但是只有管理员有此权限
-l, -u: 锁定和解锁指定用户的密码
-d: 清除用户的密码
-i; 密码过期后还能活动的时间.
-e : 设置密码的过期时间 date
-n: 设置密码的最小天数
-x: 设置密码的最大天数
-w: 设置密码的警告天数.
--stdin: 通过管道的方式将前面的字符串修改到用户的密码, 而不用重复输入两遍
echo "PASSWORD" | passwd --stdin USERNAME
gpasswd: 组密码的管理命令
gpasswd [option] group
不带选项: 是直接为组添加密码
-a, --add user: 向此组直接添加用户, 并让用户以此为附加组
-d, --delete user: 从组中移除用户
newgrp命令: 临时切换到一个新组
newgrp [-] [group]
chage: 更改用户的密码过期信息
chage [options] LOGIN
用法与passwd类似
id命令:
id 显示用户的真实有效的id信息
id [OPTION]... [USER]
-u 仅显示有效的uid
-g 显示基本组id
-G 显示用户的基本组和附加组id
-n: 显示名称而非id号
su命令: switch user
登录时切换: 会通过读取目标用户的配置文件来重新初始化
su - USERNAME
su -l USERNAME
非登录式切换: 不会读取目标用户的配置文件进行初始化
su USERNAME
su -c command, --command=command 不切换目录但是通过对方账号执行命令.
管理员切换不需要任何密码
[root@localhost ~]# su - gentoo Last login: Tue Aug 13 10:50:23 CST 2019 on pts/4 [gentoo@localhost ~]$ pwd /home/gentoo
# 非登录式切换 [root@localhost ~]# whoami root [root@localhost ~]# su gentoo [gentoo@localhost root]$ whoami gentoo [gentoo@localhost root]$ pwd /root
7. 权限管理
进程安全上下文:
ls -l
rwxrwxrwx:
左三位, 定义user(owner) 的权限
中三位, 定义group的权限
右三位, 定义other的权限
ownership: user, group6+
进程对文件的访问权限应用模型:
进程的属主与文件的属主是否相同, 如果相同, 则应用属主的权限
否则, 则检查进程的属主是否与文件的属组相同, 如果相同, 则应用属组的权限
否则, 则应用其他(other)的权限
权限:
r: read, 读权限
w: write, 写权限
x: execute, 执行权限
文件:
r: 可获取文件的数据
w: 可修改文件的内容
x: 文件可以运行为进程.
目录:
r: 可使用ls命令获取文件下所有的文件列表信息
w: 可修改此目录下的文件列表, 即创建或删除文件
x: 可cd到此目录中, 即可以使用ls -l 来获取所有文件的详细信息
权限组合机制:
--- 000 0
--x 001 1
-w- 010 2
-wr 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
权限管理命令:
chmod命令:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
三类用户:
u: 属主
g: 属组
o: 其他
a: 所有
(1): chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示的方法
赋权表示法: 直接操作一类用户的所有权限位
u=
g=
o=
a=
授权表示法: 直接操作一类用户的一个权限位 r, w, x
u+, u-
g+, g-
o+, o-
a+, a-
(2) chmod [OPTION]... OCTAL-MODE FILE...
八进制权限表示法:
不能减少任何权限, 否则会省略属主的权限赋值
(3) chmod [OPTION]... --reference=RFILE FILE...
参考某个文件的文件的权限
选项:
-R, --recursive 递归地修改一个目录的权限 一般只用于上述的授权表示法
[root@localhost ~]# touch t [root@localhost ~]# ll t -rw-r--r--. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod g=rw t [root@localhost ~]# ll t -rw-rw-r--. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod u=rwx t [root@localhost ~]# ll t -rwxrw-r--. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod o=rw t [root@localhost ~]# ll t -rwxrw-rw-. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod a=rw t [root@localhost ~]# ll t -rw-rw-rw-. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod u=rwx,g=rw,o= t [root@localhost ~]# ll t -rwxrw----. 1 root root 0 Aug 13 21:05 t # 直接操作一类权限添加减少权限 [root@localhost ~]# ll t -rwxrw----. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod u-x t [root@localhost ~]# ll t -rw-rw----. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod a+r t [root@localhost ~]# ll t -rw-rw-r--. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod a-r t [root@localhost ~]# ll t --w--w----. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod 666 t [root@localhost ~]# ll t -rw-rw-rw-. 1 root root 0 Aug 13 21:05 t [root@localhost ~]# chmod --reference=test t
从属关系管理命令: chown, chgrp
chown命令: 修改属主
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
选项:
-R: 递归的修改
chgrp命令: 修改属组, 功能和chown差不多.
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意: 仅能管理员修改
[root@localhost ~]# chown -R gentoo:t5 tmp [root@localhost ~]# ll tmp total 32 drwxr-xr-x. 2 gentoo t5 4096 Aug 8 15:17 conf.d -rw-r--r--. 1 gentoo t5 158 Aug 8 07:23 hosts -rw-r--r--. 1 gentoo t5 23 Aug 8 07:23 issue [root@localhost ~]# chown -R t5.gentoo tmp [root@localhost ~]# ll tmp total 32 drwxr-xr-x. 2 t5 gentoo 4096 Aug 8 15:17 conf.d -rw-r--r--. 1 t5 gentoo 158 Aug 8 07:23 hosts -rw-r--r--. 1 t5 gentoo 23 Aug 8 07:23 issue
问题:用户对目录 有写权限, 但对目录下的文件没有写权限, 用户能够删除这个文件或修改这个文件的内容.
可以.
umask: 反向掩码, 文件的遮罩码
用户默认创建的文件都是 666-umask, 当创建的文件具有执行权限的时候, 会默认加1
用户默认创建的目录都是777-umask
root用户: 0022, 普通用户: 0002
此类设定仅对当前shell有效
install命令:
单源复制:
install [OPTION]... [-T] SOURCE DEST
多源复制:
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
创建目录
install [OPTION]... -d DIRECTORY...
常用选项:
-m, --mode=MODE: 设定目标权限, 默认为755
-o, --owner=OWNER: 设定目标文件的属主
-g, --group=GROUP: 设定目标文件的属组
-d: 创建目录
mktemp: 创建临时目录或临时文件
mktemp [OPTION]... [TEMPLATE]
创建的时候, 名字必须有3个X
-d: 创建目录