用户组
AAA
用户类别
管理员 只有一个UID=0
普通用户 1-65535
系统用户 1-999
系统管理账号:1-200
系统普通账号 : 201-999
一般用户 1000-
公有模式 users ** 私有模式 用户在自己的组当中(创建用户会创建一个和用户同名的组)
1.用户创建
useradd == adduser 添加用户或者更新添加用户的基本信息
#useradd USERNAME #useradd -u 1111 -g 1000 -d /test/user2 -s /sbin/nologin user2 创建用户命令 (选项) 要创建的用户名 -c 更改描述名称 -u 指定UID -g 指定用户的基本组(主组) -G 指定用户的附加组 -d 指定家目录 -s 指定shell字段 -r 指定系统用户
2.查看系统中用户信息
1)用户的配置文件(/etc/passwd)
用户名:密码占位符: 用户唯一id值:基本组的组id:描述字段(注释):家目录:shell
2)id 判断系统某一个用户是否存在
3)grep ^USERNAME /etc/passwd
3.用户修改
usermod [options] LOGIN
-c 修改描述名称
-d 指定家目录
-g 修改基本组
-G 修改附属组 会将用户以指定的附属组进行修改
-l 修改登录名称
-L 锁定用户
-s 修改shell
-u 修改UID
-U 解锁
4.删除用户
userdel -r USERNAME 完整删除一个用户相关的所有信息
注: 也会删除用户的基本组,但是如果基本组当中存在的其他的用户通过userdel -r 不能删除该基本组
userdel USERNAME 只删除用户配置文件相关信息,如果要完整删除用户需要手动删除用户的家目录/home/USERNAME和邮件文件/var/spool/mail/USERNAME
组类别
管理组 只有一个
普通组 1-65535
基本组(默认组、主组) 一个用户只有一个基本组
附属组 一个用户可以有多
1.创建组
groupadd GROUPNAME
-g 指定gid
-r 指定为系统组(1-999)
groupadd -g 456 -r GROUPNAME
2.查看组信息
1)查看组配置文件/etc/group
组名:组密码占位符:组id:组中的用户名(把当前组作为附属组的用户名)
2)grep ^USERNAME /etc/group
3)组修改
groupmod 修改组信息
-g 修改组id
-n 修改组名
groupmod -n grp1 g1 将g1组名改为grp1
4)删除组
groupdel GROUPNAME
只能删除附属组组当中有用户也可以删除,不能删除基本组
用户密码管理
1.设置密码
passwd USERNAME 用户密码修改,设置用户密码
passwd / chage更改密码参数
-l 锁定用户密码
-u 解锁用户
-x
-n
-w
-d
[root@162 ~]# echo mima | passwd --stdin root Changing password for user root. passwd: all authentication tokens updated successfully.
chpasswd 批量更改
echo root:mima | chpasswd
vim file
root:mima1
zhangsan:mima2
cat file | chpasswd
chpasswd < file
2.查看密码信息 /etc/shadow
用户名:密码:最后一次设置密码的时间(1970.1.1开始统计到设置密码的天数):密码最短时间:最长:警告时间:宽限时间:过期精确时间(1970.1.1开始统计到密码失效的天数)
组密码管理
1)设置组密码
gpasswd GROUPNAME
-a 将指定用户拉到某一个组
-d 从组中移除用户
-M 设置组成员列表
-r 删除组密码
-R 锁定组密码(解锁--重置组密码)
-A 设置组长(可以将添加,删除组中用户)
newgrp 切换新组
注:作为管理员切换组不需要组密码,如果是组成员也不需要验证组密码
2)查看组密码/etc/gshadow
组名:组密码:组长:组成员
补充:
useradd haha /etc/passwd /etc/shadow /etc/group /etc/gshadow
/home/USERNAME 家目录
/var/spool/mail/USERNAME 邮件文件
默认定义用户添加的相关参数值:/etc/login.defs /etc/default/useradd
实验:创建学习组1,学习组2 ;他们的组gid分别为1111,2222,添加成员并将uid为1088,
和uid为1066的成员为两组的组长,其中一组组长有一个‘外号’laoda。
不同学习组进入需要密码才能进入(设置密码);即使密码泄露也不希望组之外的成员进入。
groupadd -g 1111 g1
groupadd g2
groupmod -g 2222 g2
useradd u1
usermod -u 1088 u1
useradd u2
usermod -u 1066 u2
gpasswd -a u1 g1
gpasswd -a u2 g2
gpasswd -A u1 g1
gpasswd -A u2 g2
usermod -c laoda u1
gpasswd g1
gpasswd g2
gpasswd -R g1
gpasswd -R g2
kali
sudo用户授权
通过管理员给普通用户下发执行命令的特权
vim /etc/sudoers
redhat ALL=(ALL) NOPASSWD: /usr/sbin/useradd
提权用户 提权用户所在的主机名=(授权用户) 提权不需要密码验证: 提取可执行的命令
$sudo useradd u1
su
su redhat
su - redhat
w | who | users查看系统通过哪些用户基于终端登录
last 查看当前主机近期时间里通过哪些用户验证登录当前主机
whoami 查看当前终端通过哪一个用户身份登录
权限
[root@162 ~]# ll total 40 -rw-r--r--. 1 root root 0 Feb 13 21:15 111
系统权限在文件中标识
2-11
2-10 9个字符标识一般权限r w x
9个字符每三个字符一组标记权限 所属用户 所属组 其他用户
用户如何匹配对应文件的权限
111该文件所属用户是root用户,对于root用户对111文件现在拥有rw-
11 扩展权限标识符 .没有扩展权限 +有扩展权限
系统当中权限的描述方式:
字符形式: rwx (系统权限的标识)
数值形式: 4=r 2=w 1=x 对于111文件所属用户root他的权限6 所属组的权限4 其他用户的权限4
(用户方便描述权限)
系统中文件默认的权限值
**权限掩码:(权限过滤符) umask = 022 033
目录最高权限:777 755 744
文本文件的权限: 666 644 644
6 6 6
rw- rw- rw-
0 3 3 0 4 4 0 5 5
--- -wx -wx r-x r-x
rw- r-- r--
6 4 4
权限修改:chmod
chmod 权限 FILENAME(管理员可以更改所有用户创建文件的权限;但是普通用户只能更改自己创建的文件(文件的所属用户是当前用户))
字符形式: chmod u=rwx,g+wx,o-x a chmod ugo=rw FILENAME == chmod a=rw FILENAME
数值形式: chmod 644 FILENAME chmod 66 FILENAME 066
chown 更改文件所属用户 chown 所属用户名 FILENAME chown u1 a chown u2:u2 a chown :u4 a
chgrp 更改文件的所属组 chgrp 所属组(组名) FIELNAME
权限匹配规则:(没有扩展权限时)
标准定义: 安全上下文
通过发起者用户执行一个可执行文件(命令),匹配一个目标文件时,判断执行文件的发起者身份是否是目标文件的的所属用户,如果是直接匹配所属用户权限,如果不是开始匹配是否是文件所组的用户如果是直接匹配所属组权限,不是则直接匹配其他用户的权限。
(首先判断发起用户,是否是文件的所属用户,如果是直接匹配所属用户权限,如果不是开始匹配是否是文件所组的用户如果是直接匹配所属组权限,不是则直接匹配其他用户的权限。)
文件权限字符含义
d目录: r 查看(列出)目录下的文件信息 ls
w 能够在指定目录中创建文件 touch > >> vim nano mkdir mv cp (对于普通用户如果没有写权限,则不能删除该目录下的文件)
x 打开该目录 cd
-文本文件: r 查看该文件的内容
w 编辑文件内容
x 运行文本内容(命令文件)
[redhat@162 ~]$ cd /root -bash: cd: /root: Permission denied 作为redhat对于/root目录没有执行权限 [root@162 /]# ll /root -d redhat用户对于/root是其他用户,需要其他用户位加上执行权限 dr-xr-x---. 18 root root 4096 Feb 16 21:35 /root [root@162 /]# chmod o+x /root [root@162 /]# su - redhat [redhat@162 ~]$ cd /root
[root@162 /]# touch file [root@162 /]# ll -rw-r--r--. 1 root root 0 Feb 16 22:03 file [redhat@162 /]$ cat file [redhat@162 /]$ echo this is red1 >file -bash: file: Permission denied [root@162 /]# chmod o+w file [redhat@162 /]$ echo this is red1 > file [redhat@162 /]$ cat file this is red1 [redhat@162 /]$ ./file -bash: ./file: Permission denied [root@162 /]# chmod o+x file [redhat@162 /]$ ./file ./file: line 1: this: command not found
特殊权限
chmod u+s,o+s,o+t FILENAME 是在文件对应的执行位显示,如果文件默认没有执行权限特殊权限大写标识,如果有特殊权限特殊权限字符小写标识。
chmod 7644 FILENAME 特殊权限是7(u+s=4,g+s=2.o+t=1) 644标准权限
u+s =4 所属用户的强制位(对于可执行文件的所属用户禁锢) ---1.对可执行文件设置有意义
g+s =2 所属组的强制位(对于可执行文件的所属组禁锢)(对目录文件设置--目录文件的所属组禁锢;表示任何用户创建文件的所属组都是当前目录的所属组)
o+t =1 sticky冒险位(对一个目录文件存在冒险位,用户只能删除自己文件不能删除别人的文件)
[root@162 /]# ll /usr/bin/touch -rwxr-xr-x. 1 root root 109776 Feb 14 03:07 /urs/bin/touch [redhat@162 ~]$ touch red1 // 通过当前用户redhat,执行可执行文件touch,所以touch进程文件的所属用户就是当前用户,根据当前进程创建目标文件,所以目标文件的所属用户以及所属组和进程文件的所属用户和所属组一样。 [redhat@162 ~]$ ll red1 -rw-rw-r--. 1 redhat redhat 0 Feb 16 22:40 red1 root@162 /]# chmod u+s /usr/bin/touch [root@162 /]# ll /usr/bin/touch 对可执行文件设置u+s -rwsr-xr-x. 1 root root 109776 Feb 14 03:07 /usr/bin/touch [redhat@162 ~]$ touch red2 //通过当前用户redhat执行可执行文件touch,touch进程文件的所属用户取决于文件自身的用户root,所属组取决于发起者身份redhat的基本组,所以目标文件的所属用户是root:redhat [redhat@162 ~]$ ll red2 -rw-rw-r--. 1 root redhat 0 Feb 16 22:46 red2 root@162 /]# chmod g+s /usr/bin/touch [root@162 /]# ll /usr/bin/touch 对可执行文件设置u+s,g+s -rwsr-sr-x. 1 root root 109776 Feb 14 03:07 /usr/bin/touch [redhat@162 ~]$ touch red3 //通过当前用户redhat执行可执行文件touch,touch进程文件的所属用户取决于文件自身的用户root,所属组取决于文件自身的所属组root,所以目标文件的所属用户是root:root [redhat@162 ~]$ ll red3 -rw-rw-r--. 1 root redhat 0 Feb 16 22:46 red2
实际案例: [root@162 /]# ll /etc/shadow ----------. 1 root root 1812 Feb 16 03:21 /etc/shadow 为什么用户能够通过passwd修改密码命令对密码文件有写权限 [root@162 /]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 34512 Aug 12 2018 /usr/bin/passwd [redhat@162 ~]$ passwd 通过发起者身份redhat,运行passwd可执行文件,可执行文件进程的所属用户取决于文件自身用户root,通过root用户对密码文件进行操作。
g+s 对目录设置 [root@162 /]# chmod o+w /pub [redhat@162 pub]$ touch aa [redhat@162 pub]$ ll total 0 -rw-rw-r--. 1 redhat redhat 0 Feb 17 01:12 aa [root@162 /]# chmod g+s /pub -目录所属组禁锢 [root@162 /]# ll -d /pub drwxr-srwx. 2 root root 16 Feb 17 01:12 /pub [redhat@162 pub]$ touch bb --任何用户在该目录下创建的任意文件的所属组都和目录的所属组一样 [redhat@162 pub]$ ll total 0 -rw-rw-r--. 1 redhat redhat 0 Feb 17 01:12 aa -rw-rw-r--. 1 redhat root 0 Feb 17 01:13 bb
目录o+t [root@162 /]# mkdir /test [root@162 /]# ll -d /test drwxr-xr-x. 2 root root 6 Feb 17 01:21 /test [root@162 /]# chmod o+w /test [u1@162 zuoye]$ cd /test [u1@162 test]$ touch u1 [u1@162 test]$ touch u2 [u1@162 test]$ touch u3 [redhat@162 ~]$ cd /test [redhat@162 test]$ touch red1 [redhat@162 test]$ touch red2 [redhat@162 test]$ touch red3 [root@162 test]# touch root1 [root@162 test]# touch root2 [root@162 test]# touch root3 [redhat@162 test]$ rm root1 ---对于当前目录没有特殊权限,但对当用户拥有写权限,所以用户可以删除任意用户创建的文件 rm: remove write-protected regular empty file 'root1'? y [root@162 test]# chmod o+t /test --设置特殊权限 [root@162 test]# ll -d /test drwxr-xrwt. 2 root root 98 Feb 17 01:25 /test [redhat@162 test]$ rm red1 redhat@162 test]$ rm root2 rm: remove write-protected regular empty file 'root2'? y rm: cannot remove 'root2': Operation not permitted ---用户只能删除自己文件不能删除别人的文件 注:对于管理员,目录文件有特殊权限该用户也可以删除任何用户创建的文件
扩展权限:
getfacl FILENAME 查看文件的权限列表 setfacl -m u:USERNAME:prem FILENAME g:GROUPNAME:prem FILENAME setfacl -x u:USERNAME: FILENAME 删除文件的一条扩展权限 setfacl -b FILENAME 清空指定文件的扩展权限 应用场景(对于系统中的文件,只要求对某一个或者某一些用户对文件由不同的权限可以通过扩展权限来实现)