Linux基础:管理用户和组+控制对文件的访问+监控和管理Linux进程(20210713笔记)
用户和组
修改用户密码策略
chage -M 90 -W 7 <用户> #使用 chage 命令修改密码策略
将刚新建的用户密码策略修改为:每90天改一次密码,警告期为7天
chage -d 数字 <用户> #指定密码最后修改日期(0则每次登录都要修改)
普通用户加入root用户组也不会具备root权限,但权限会增加(继承root用户组里的权限)
id <用户名> #显示用户uid、gid、group
/etc/login.defs文件
修改PASS_MAX_DAYS,更改自当前日期起多少天过期(密码默认最长期限)
PASS_MIN_DAYS 设置密码默认最短期限
PASS_WARN_AGE 设置密码的默认警告周期
/etc/sudoers.d/组名
创建该文件并添加”%组名 ALL=(ALL) ALL"为该组所有成员配置管理权限
vim /etc/sudoers.d/组名
或 echo ”%组名 ALL=(ALL) ALL" >> /etc/sudoers.d/组名
第一个 ALL 指示允许从任何终端、机器访问 sudo
第二个 (ALL) 指示 sudo 命令被允许以任何用户身份执行
第三个 ALL 表示所有命令都可以作为 root 执行
获取超级用户权限
普通用户一般只能对自己目录下的文件,以及可移动硬盘进行管理。
固定硬盘及其他高 级管理需要root用户权限。
root具有高于文件系统的至高权限。
权限会带来安全的隐患,在 Linux 上一般会通过临时获得超级用户特权,来降低 root 用 户泄露的风险。
使用su切换用户
su <用户名> #切换用户,不切换环境变量(保留当前用户PATH)。
su - <用户名> #切换用户,同时切换环境变量。
echo $HOME
echo $PATH #查看路径?
su -c <用户> #以另一个用户身份运行任意程序
exit #退出用户。
使用 su 命令不仅可以用于切换到 root 用户,还可以用于切换到其他用户。
使用 su 命令切换到 root 用户需要输入 root 用户的密码。
使用sudo获取超级用户权限
允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。
这样不仅减少了 root 用户的登陆和管理时间,同样也提高了安全性。
临时获取root权限,输入本用户密码(有时间限制)
sudo <命令> #在要运行的命令前加上 sudo 即可(默认日志记录到/var/log/secure)
sudo su
① 需借用权限的用户或组,在开头的位置加上%代表组
② 借用哪个主机上哪个用户的权限
③ 借用的命令
组的概念
组是需要共享文件和其他系统资源访问权限的用户的集合,可以对一组用 户授予文件访问权限,实现统一的管理。
在 Linux 中,创建用户的时候会自动以用户名字创建一个同名组。如果后面用户改名了,组的名称不会改。
组也有密码,一般用于提高用户的添加组时候的安全性。
组的类型
主要组:定义在 /etc/passwd 中用户的组
补充组:定义在 /etc/group 中用户的组
使用 id 命令可以用户的主要组和补充组
/etc/group
用户组的名称
用户组的密码,已经转移到 /etc/gshadow 中,基本很少使用
组 ID(GID)
组成员
/etc/gshadow
组名:组密码:组管理员:组成员
默认情况,组不设置密码
gpasswd <组名> #设置组密码
管理用户组
新建用户组
groupadd <组名>
创建组时,系统会使用 /etc/login.defs 中指定范围的 GID,一般是1000以后。系 统保留了一定范围的 GID,可以通过 -r 选项来使用这些 GID。该范围由 /etc/login.defs 中的 SYS_GID_MIN 和的 SYS_GID_MAX 来定义。
删除用户组
groupdel <组名>
设置组成员
gpasswd -a <用户> <组> #将用户添加到组
gpasswd -d <用户> <组> #将用户从组移除
不同用户间使用逗号分隔。使用 -M 选项添加用户将覆盖组内原有用户。
usermod -G <组1>, <组2>, ...<用户>#将某用户添加到多个组
如果该用户还有其他补充组,将从其他补充组 移除。
设置组管理员
gpasswd -A <用户> <组>
设置组管理员,以委派权限的形式让组管理完成对组的管理
修改用户组属性
gpasswd <组> 修改组的密码
groupmod [选项] <组>
groupmod -n group01 group1 #使用 -n 选项修改组名称 修改用户组 group1 的名称为 group01
group01 作为 -n 选项的属性先写,group1 作为命令执行的参数写在最后。
groupmod -g 2000 group01 #使用 -g 选项修改 GID 修改用户组 group01 的 GID 为 2000
控制对文件的访问
解释Liunx文件系统权限
Liunx文件系统基本权限
数字加权:三个角色各自三项加起来之和
文件可能会继承目录的权限(一般默认不会继承,但可以通过一些配置实现)
r:ls(ll)
w:touch rm mv
x:cd
从命令行管理文件系统权限
修改文件/目录权限
chmod whowhatwhich <文件/目录>
who:u(用户)、g(组)、o(其他人)、a(全部)
what:+、-、=
which: r、w、x(X)
chomd u+x 1.txt #不考虑原来的权限,直接添加或减少某个权限
chmod u=rwx 1.txt #直接指定某个对象的权限
chmod 777 1.txt #可以使用数字加权法直接指定权限,同时设定三个角色的权限
chmod –R a=rwx test #使用 -R 选项实现递归设置。将 test 目录及子目录子文件的权限都设置为 rwx
在递归设置权限时,如果涉及执行权限,可以使用大写的 X,只递归设置 rw 权限,而不影响原有文件的执行权限(如果原有/无x权限,设置X后权限不变)。因为如果子文件带执行权限就会变成脚本,可能会被执行(漏洞文件、病毒文件)。
修改文件所有者和所属组
chown <用户> <文件/目录> #修改文件所有者
chgrp <组> <文件/目录> #修改所属组
chown <用户>:<组> <文件/目录> #同时修改文件的所有者和所属组
只有root用户可以修改文件的所有者;而所有者可以修改文件的所属组。
chown -R ... #递归设置所有者所属组
特殊权限
suid(u+s)(4),sgid(g+s)(2),t(o+t)(1)
特殊权限会显示在执行权限处。如有执行权限将写作小写的s/t;反之,写作大写的S/T(原本没有执行权限)。
rws rwt rwS rwT ——u/g+s o+t
换成数字一共四位:第一位看s/S和t/T的和,其他三位同普通的一样(S、T无x权限不计数)
默认权限
目录是 0777,文档是 0666(所有文件都没有执行权限)
新建文件644,新建目录755
umask的使用:在默认权限的基础上减去 umask 就是新建目录/文件的权限,而不是父目录权限减 umask。在 /etc/bashrc 中定义的 umask 默认是 0002。
只有用户 UID 为200以上,并且用户名和主要组名相同,umask 才是 002。如果不满足这些条件, 那么 umask 将变成 022。
umask 通常还会设置为:
0:其他人将具有对目录和文件的执行权限
027:其他人将没有任何权限,可以确保只有所有者和所属组具有权限。
umask有要求,需要新建的文件/目录具备某些权限
修改umask:
到两个配置文件里改
或
新建脚本文件
监控和管理Liunx进程
进程是什么
程序和进程
程序:程序员写好的代码,运行就会发挥某个作用。不会因系统运行而 发生修改。
进程:已启动的可执行程序运行中的实例,就是程序运行起来的 部分,一个程序可能包含多个功能,就会运行多个进程。(系统进程、应用进程)
进程的组成
已分配内存地址空间;
安全属性(所有权凭据和特权);
程序代码 (一个或多个执行线程);
进程状态
进程环境
本地和全局变量;
当前调度上下文;
分配的系统资源(如文件描述符合、网络端口)
父进程和子进程
运行一个新进程时,通过共享上一级进程的地址空间、资源、属性等内容来创建的(fork)
上一级进程称为父进程,当前进程称为子进程。
PID是子进程标识符(每个进程都有唯一的进程ID),父进程是PPID。
父进程在子进程运行期间处于睡眠状态,子进程退出时发出信号令父进程收到而唤醒,清理子条目的进程表
描述进程状态
多任务处理操作系统中,每个CPU在一个时间点上处理一个进程
进程运行时,它对CPU时间和资源分配的直接要求会有变化
进程分配有一个状态,它随着环境要求而改变
运行:R
睡眠:S、D、K、I
停止:T
僵停:Z、X
列出进程
查看进程
ps [aux] [lax] [-ef] #静态显示系统进程
列出信息包括:唯一进程识别符(PID)、CPU 和已经花费的的实时时间、内存、进程 的优先级、进程命令,进程用户,进程状态等等。
top指令 进程动态显示页面
top
方括号中的进程(通常位于顶部)为调度的内核进程
ps
pstree
ps 仅显示一次,如需重复更新进程显示,使用 top 命令(动态查看)
pstree 可以采用树形格式显示,来查看父/子进程关系
控制作业
进程组 process group:协同工作的一个或多个进程就是一个进程组,通常与作业关联。 通过进程组,可以对多个进程进行统一的管理。所有进程都属于某个进程组,每个进程组都有一个组长进程,相应的 PID 就是进程组的进程组 ID。
作业 jobs:在命令行上执行一个命令的时候,就会变成一个作业。一个作业可能是一个进程,也可能是多个进程。作业和进程组相似,主要区别在于作业中某个进程创建的子 进程(fork)不属于作业,属于进程组。
会话 session:会话是一个或多个进程组的集合。一个会话可以有一个控制终端。建立与控制终端连接的会话首进 程被称为控制进程(一般 bash 就是控制进程)。
显示和作业相关的信息:ps -j命令
PID:进程ID;
PPID:父进程ID;
PGID:进程组首进程PID;
SID:会话首进程的PID,一般是shell本身。
PGID和SID通常都是一样的。