1 用户与用户组管理
1.1 用户与用户组
//linux用户和用户组
Linux系统是一个多用户多任务的分时操作系统
使用系统资源的用户需要账号进入系统
账号是用户在系统上的标识,系统根据该标识分配不同的权限和资源
一个账号包含用户和用户组
//用户分类
超级管理员 UID为0 拥有系统一切权限 一般为root用户
系统用户(伪用户) UID 1-499 方便系统管理,用来运行系统和服务的用户
普通用户 UID从500开始 可以登入系统的用户 拥有系统部分权限
//用户组分类
初始组 用户刚登陆系统所在的组,用户必须有一个且只能有一个
附加组 除了初始组外加入的其他组,可以有0或多个
1.2 Linux 系统添加用户 useradd
`命令格式 useradd [选项] 用户名`
选项i
`-u 用户ID` 指定用户id,一般指定UID要大于500,不指定系统会自动分配
`-g 初始组名` 指定用户初始组 尽量不要指定 系统会创建和新增用户名相同的组为该用户的初始组
`-G 附加组名` 指定用户所属附加组 多个时用逗号隔开
`-c 说明文字` 备注文字 文字会保存到“/etc/passwd”文件第五列
`-d 家目录`指定用户家目录
`-s shell` 指定用户登陆后使用的shell程序vim /etc/passwd 查看添加的用户
vim /etc/shadow 查看用户密码
1.3 Linux修改用户密码 passwd
`命令格式 passwd [选项] 用户名`
选项
`-l 或 --lock` 临时锁住密码使密码失效
`-u 或 --unlock` 解锁
`-d 或 --delete` 删除现有用户的密码
`-n 天数`两次密码修改时间间隔 /etc/shadow第四列
`-x 天数`密码有效期/etc/shadow第五列
`-w 天数`密码到期前的警告天数/etc/shadow第六列
`-i 天数`密码到期后的宽限天数/etc/shadow第七列
`-S 或 --status` 显示用户密码状态
`--stdin` 从标准输入读取令牌 主要用在通过脚本批量添加用户,不需要交互的场景`用户名` 用户名省略 默认修改当前登陆用户的密码 一般修改自己的密码直接执行passwd就可以
只有管理员才有修改用户密码权限 普通用户只能改自己的密码
1.4 Linux 修改系统用户信息 usermod
`命令格式 usermod [选项] 用户名`
选项
`-u` 修改用户ID
`-d` 修改用户家目录
`-c` 修改用户说明
`-g` 修改用户初始组
`-G` 修改用户附加组
`-s` 修改用户登入后所使用的shell程序
`-e` 修改账号失效日期 格式“YYYY-MM—DD”
`-l` 修改用户名
`-L` 锁定账号 与 `passwd -l 用户名`作用一样
`-u` 解锁账号
1.5 Linux 删除用户 userdel
`命令格式 userdel [选项] 用户名`
选项
`-r` 同时删除用户家目录和用户邮件
1.6 Linux查看用户UID和GID id
`命令格式 id [选项] 用户名`
选项
一般不使用任何选项
`-g` 仅显示该用户当前有效的用户组ID
`-G` 显示该用户所有用户组ID
`-u` 仅显示该用户ID
1.7 Linux添加用户组 groupadd
`命令格式 groupadd [选项] 组名`
选项
`-g` 指定组ID
`-r` 创建系统用户组 系统用户组的组ID小于1000 与/etc/login.defs内的 GID_MIN有关
1.8 Linux修改用户组 groupmod
`命令格式 groupmod [选项] 组名`
选项
`-g` 修改组ID
`-n` 修改组名
1.9 Linux删除用户组 groupdel
`命令格式 groupdel 组名`
注 如果用户组是某个用户的初始组 必须先删除这个用户或修改用户的GID后才能删除该用户组
1.10 显示当前登陆用户名 whoami
1.11 显示当前已登陆用户信息 w /who
这两个指令查询的信息都来源于日志文件 /etc/run/utmp
`命令格式 w [选项] 用户名`
选项
`-h 不打印头信息`
`-s 使用短输出格式`
`命令格式 who [选项] 查询文件`
选项
`-H 显示各栏位的标题信息列`
`-q 只显示登入系统的账号名称和总人数`
`-w 显示用户的信息状态栏`
`-u 显示闲置时间 用户一分钟没有进行任何动作 标志“。”号 超过24小时标志"old"`
1.12 用户身份切换 su /sudo
普通用户登陆系统,需要执行某些操作权限不够时,可以切换到有权限的用户身份去执行
su可以进行任何身份的切换,root用户切换其他用户不需要密码 其他情况切换都需要输入对应的登陆密码
`命令格式 su [选项] 用户名`
选项
`-或 -l 或 --login` 切换身份时同时切换环境变量,如果不加该选项 用户切换后环境变量还是旧的
`-c` 只执行一次指令不切换身份注 不加用户名默认切换root
使用su指令需要知道root密码,这样容易导致密码流出很不安全,使用sudo来切换身份只需要知道用户自己的密码就可以,不是所有用户都能使用sudo指令,前提需要管理员给用户开发sudo权限。
`命令格式 sudo [-b] [-u 新使用者账号] 要执行的命令`
选项
`-b` 将后续的命令放到背景中让系统自行运行
`-u` 后面可以接切换的用户名 若无此项代表切换身份为root
`-l` 用法 sudo -l 显示sudo可以执行哪些命令
2 权限管理
2.1 Linux权限介绍
Linux是多用户的操作系统,允许多个用户同时登陆工作,Linux权限是操作系统用来限制不同用户对资源的访问机制。
基本权限 给文件和目录的所属者(u)、所属组(g)、其他用户(o)、分配的读®、写(w)、执行(x)权限
ACL权限 可以针对单一用户或用户组设定权限
特松权限 除了读写执行权限的另一种特殊权限(s/t,SUID/SGID/SBIT)
2.2 基本权限
2.2.1 权限位介绍(11位)
11位权限位的含义图 例 -rw-r–r–.
//第1位 代表文件类型,Linux不使用扩展名表示文件类型,使用权限位第一位表示文件类型。常见的文件类型
`-` 普通文件
`d` 目录文件(Linux中一切皆文件 目录也是文件)
`l` 软链接文件
`b` 块设备文件 这是一种特殊设备文件,存储设备都是这种文件 如分区文件/dev/sdal
`c` 字符设备文件, 特殊设备文件,输入设备一般都是这种文件如鼠标、键盘
`p` 管道符文件 这是一种少见的特殊设备文件
//第2-4位 代表文件所属者权限
`r` 是读取权限
`w` 是写权限
`x` 是执行权限
//第5-7位 代表文件所属组权限 同样是rwx
//第8-10位 代表文件其他人权限 同样是rwx
//第11位
`.` 如果是点 代表受SELinux安全上下文保护
`+` 如果是加号表示设置了ACL权限
2.2.2 权限含义解释
权限对文件的作用
读® 有读权限 可以执行cat more less head tail指令查看文件
写(w) 有写权限 可以执行vim echo等修改文件数据命令 注意对文件有写权限,是不能删除文件本身的,只能修改文件中的数据,想要删除文件 需要对文件的上级目录拥有写权限
执行(x) 有执行权限,代表文件可以允许
权限对目录的作用
读® 有读权限 可以执行ls指令查看目录下的内容 有哪些文件和子目录
写(w) 有写权限 可以修改目录下的数据,在目录中新建、删除、复制、剪切、粘贴子文件或子目录 touch rm cp mv等指令
执行(x) 目录是不能运行的。有执行权限 代表可以进入目录 可以执行cd指令进入目录
2.2.3 权限设定
chomd 命令用来修改文件或目录的权限
chomd [选项] 权限模式 文件或目录
选项
`-R` 递归设置权限
`--reference=参考文件或目录` 使用参考文件或目录的权限来设置目标文件或目录的权限权限模式分为符合组合和八进制数组合
//符合格式 [ugoa] [[+-=][permission]] [用户身份] [[赋予方式][权限]]
用户身份
`u` 所有者
`g` 所属组
`o` 其他人
`a` 全部身份
赋予方式
`+` 加入权限
`-` 减去权限
`=` 设置权限
权限
`r` 读
`w` 写
`x` 执行
//八进制数组合格式[0-7][0-7][0-7]三位数字组成每一位数字都是权限之和 第一位是所属者 第二位所属组 第三位其他人
`r` 读权限对应的数字 `4`
`w` 写权限对应的数字 `2`
`x` 执行权限对应的数字 `1`
chown命令用来修改文件和目录的所有者和所属组
chown [选项] 所有者[:所属组]文件或目录
选项
`-R` 递归设置权限
`--reference=参考文件或目录`
省略[:所属组] 仅改变文件所属者
chgrp命令用来修改文件和目录的所属组
chgrp [选项] 用户组 文件或目录
选项
`-R` 递归设置权限
`--reference=参考文件或目录`
2.2.4 默认权限与umask
1权限掩码 umask
当创建一个新文件和目录是会默认有一些权限的,新建的文件权限一般是“-rw-r–r–”,新建的目录权限一般是"drwxr-x-r-x".
文件默认最大权限 新建文件的默认最大权限是666(-rw-rw-rw-),没有执行权限,需要用户手动赋予
目录默认最大权限 新建目录的默认最大权限是777(drwxrwxrwx)
权限掩码值所表示的权限就是新建文件和目录要从默认最大权限里要排除的权限,查询掩码值有两种方式,直接执行umask以数字方式展示,可以看到‘0022“,执行umask -S 以符号展示,其中缺少的权限对应的权限值就是掩码值
2默认权限计算方式
`新建文件` 文件的默认最大权限是-rw-rw-rw-,通过计算
(-rw-rw-rw-)- (-----w--w-) = (-rw-r--r--)新建文件默认权限是 -rw-r--r-- 即644
`新建目录` 目录的默认最大权限是drwxrwxrwx,通过计算
(drwxrwxrwx)-(d----w--w-) = drwxr-xr-x
新建目录默认权限是 drwxr-xr-x 即655
3修改权限掩码 umask 命令
umask命令是用来显示或设置创建文件、目录的权限掩码的
umask [选项] [权限模式]
选项
`-S`以符号组合的方式输出权限掩码,不使用该选项时以八进制数的形式输出
权限模式 与chmod相同
注 使用umask设置的权限掩码只有临时有效,如果需要永久有效,需要修改/etc/bashrc文件里的内容,不建议修改
2.3 ACL权限
ACL(Access Control LIst) 主要目的是在提供传统的owner、group、others 的read、write、execute权限之外的细部权限设定,ACL可以针对单一使用者,单一文件或目录来进行r、w、x的权限规范
**命令 **
getfacl 查看ACL权限
语法 `getfacl [文件名]`
setfacl 添加、删除ACL权限
语法 `setfacl [选项] [文件名]`
选项
`-m` 设定ACL权限 多条逗号隔开
`-x` 删除ACL权限 多条逗号隔开
`-b` 删除所有ACL权限
`-d` 设定默认ACL权限
`-k` 删除默认ACL权限
`-R` 递归设定ACL权限ACL规则
`[d:]u:[用户名]:[权限(rwx)]` 指定用户的权限
`[d:]g:[组名]:[权限(rwx)]` 指定用户组的权限[d:] 表示设定为默认权限