用户、组
多用户多任务的管理系统
Linux管理模式:私有模式:每一个用户对应一个和用户同名的组
公有模式
用户类型(65535个用户)
管理员:root
普通用户:redhat
系统用户:系统安装自动创建
一般用户:手动添加
useradd 用户名 /usr/sbin/useradd
修改用户登录名称 | #useradd -l newxiao1 xiao1 把xiao1改名为newxiao1 |
更改用户UID | #useradd -u 1111 newxiao1 #usermod new1xiao1 -u 1111 |
更改用户的基本组(主组) | #useradd -g redhat newxiao1 |
更改用户的附加组 | #groupadd g1 #useradd -G g1 newxiao1 |
注释信息 | #user -c woshixiao1 newxiao1 |
家目录 | |
更改shell字段(可交互式shell、非交互式shell) | #useradd -s /sbin/nologin newxiao1 |
xiao1:x:1001:1001::/home/xiao1:/bin/bash
用户名:密码的占位符:UID:GID:注释、描述字段:用户的家目录:shell字段/bin/bash /sbin/nologin
usermod [option...] [选项参数] 用户名
-l | 修改用户登录名称 | #usermod -l newxiao1 xiao1 把xiao1改名为newxiao1 |
-u | 更改用户UID | #usermod -u 1111 newxiao1 #usermod new1xiao1 -u 1111 |
-g | 更改用户的基本组(主组) | #usermod -g redhat newxiao1 |
-G | 更改用户的附加组 | #groupadd g1 #usermod -G g1 newxiao1 |
-c | 注释信息 | #user -c woshixiao1 newxiao1 |
-d | 家目录 | |
-s | 更改shell字段(可交互式shell、非交互式shell) | #usermod -s /sbin/nologin newxiao1 |
eg: | usermod -l newname -u 1234 -g 1000 -c dashazi name |
查看用户
grep '^用户名' /etc/passwd
id 用户名
cat /etc/passwd 用户配置文件
userdel -r 用户 删除用户以及创建用户相关的所有文件
passwd [用户名]
-d 删除用户密码
-l 锁定用户密码
-u 解锁用户密码
管理员:可以指定用户名更改系统任意用户的密码不需要输入之前的密码,不严格匹配密码等级设置
普通用户:不可以指定用户名,只能更改自己的密码,需要输入之前的密码,严格匹配密码等级设置
echo mima | passwd --stdin 用户名
chpasswd
[root@peach ~]# cat users
redhat:1234
root:1234
xiao1:1234
[root@peach ~]# cat users | chpasswd
[root@peach ~]# echo redhat:123456 | chpasswd
破解密码
关机-->开机-->鼠标进入启动界面-->第一个引导菜单-->按e-->找到Linux这一行在行尾添加rd.break-->ctrl-x-->mount -o remount,rw /sysroot -->chroot /sysroot -->passwd root-->设置密码--确认密码-->touch /.autorelabel -->exit --exit 等待
组类别
管理组:root
普通组:
系统组
一般组
主组,基本组、私有组,用户的默认组
附加组,额外组 用户默认组之外的组
groupadd 组名 组添加
grep '^组名' /etc/group 查看组
cat /etc/group 组配置文件
root:x:0
组名:组密码占位符:GID:组中的用户名
groupmod [option] [选项参数] 组名
-n | 修改组名 | #groupmod -n grp1 g1 |
-g | 修改组id | #groupmod -g 2222 g1 |
groupdel 组名 删除组
gpasswd 组名 设置,修改组密码
-r | 删除组密码 | |
-a | 把指定用户加入组 | #usermod -G g1 redhat == #gpasswd -a redhat g1 |
-M | 指定多个用户加入组 | #gpasswd -M user1,user2,user3 g1 |
-d | 将指定用户从组中移除 | #gpasswd -d user1 g1 |
-A | 指定组长(可以在组中添加成员或删除一个组用户) | #gpasswd -A user2 g1 |
-R | 锁定组(用户知道组密码也不能验证登录) |
登录新组
newgrp 组名
扩展
/etc/shadow 用户密码文件
用户名:加密密码:最后一修改密码的天数(1970):密码生效最短时间:最长时间:警告时间:延长时间:精确过期时间(1970):保留字段
/etc/gshadow 组密码信息
组名:组密码:组长:组成成员
/etc/default/useradd 用户创建默认加载的配置文件
参数 | 含义 |
GR0UP=100 | 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。 Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。 |
HOME=/home | 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下。 |
INACTIVE=-1 | 指的是密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,代表所有新建立的用户密码永远不会失效。 |
EXPIRE= | 表示账号过期时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的用户默认 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在创建一个新用户后,你会发现,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可以改变新建用户默认主目录中的配置文件信息。 |
CREATE_MAIL_SPOOL=yes | 指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。 |
/etc/login.defs 登录用户默认匹配的配置文件
注:配置文件中的#表示注释
MAIL_DIR /var/spool/mail \#创建用户时,要在目录/var/spool/mail中创建一个用户mail文件
PASS_MAX_DAYS 99999 \#密码最大有效期
PASS_MIN_DAYS 0 \#两次修改密码的最小间隔时间
PASS_MIN_LEN 5 \#密码最小长度,对于root无效
PASS_WARN_AGE 7 \#密码过期前多少天开始提示
#创建用户时不指定UID的话自动UID的范围
UID_MIN 500\#用户ID的最小值
UID_MAX 60000 \#用户ID的最大值
#自动组ID的范围
GID_MIN 500\#组ID的最小值
GID_MAX 60000 \#组ID的最大值
USERDEL_CMD /usr/sbin/userdel_local \#当删除用户的时候执行的脚本
CREATE_HOME yes \#使用useradd的时候是够创建用户目录
USERGROUPS_ENAB yes \#用MD5加密密码
权限
系统中的权限是在文件中标识
权限两种描述方式
字符形式: r w x
数值形式:r=4 w=2 x=1
文件默认权限值
目录文件的最高权限值 777
权限过滤值(权限掩码)umask 022
755
文本文件的最高权限值666
权限过滤值(权限掩码)umask 022
644
权限字符含义
文件文件:r read 读取文件内容(cat tac more less head tail grep )
w wirte 编辑文件内容(vim > cat file)
x excute 解释运行文件的内容(命令文件)
目录文件: r ls
w
x cd (r-x) (rwx)
linux中文件权限匹配方式
可执行文件进程的所属身份是用发起者身份,
判断进程发起者身份是否是目标文件的所属用户,是,匹配目标文件所属用户的权限;
不是,判断进程发起者身份是否是目标文件的所属组用户,是,直接匹配目标文件组权限,
不是,则直接匹配目标文件其他用户的权限;
更改文件的权限
chmod 权限 文件名
chmod ugo=rwx FILE1 //u user g group o other a all
chmod a=rwx FILE1
chmod -x FILE1
chmod u=rwx,g+w,o-r file
chmod 777 DIRNAME
chmod 7 DIRNAME == chmod 007 DIRNAME
chmod u=7 FILENAME --错误
注:普通用户修改权限,用户只能更改属于当前用户文件的权限。
chown 更改文件所属用户
chown 用户名 FILE...
chown 用户名:组名 FILE...
chgrp 更改文件所属组
chgrp 组名 FILE...
拷贝文件/etc/fstab 到/var/tmp/fstab
配置文件/var/tmp/fstab 的权限
• 文件/var/tmp/fstab 的拥有者是 zhangsan文件/var/tmp/fstab 属于 zhangsan 组
• 文件/var/tmp/fstab 对任何用户不可执行
• 其他用户(当前和将来的)能对文件/var/tmp/fstab 进行读操作
#cp /etc/fstab /var/tmp
#useradd zhangsan
#chown zhangsan:zhangsan /var/tmp/fstab
#chmod a-x /var/tmp/fstab
#chmod o+r /var/tmp/fstab
特殊权限
umask 0022
chmod 4644 file
u+s =4 所属用户的禁锢位 suid
仅对可执行文件(命令文件)设置有意义:可执行文件进程的所属身份是执行文件自身的身份
[root@www pub]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 33544 Dec 14 2019 /usr/bin/passwd
[redhat@www pub]$ passwd //passwd进程的用户身份是root(是执行文件自身的身份)
//passwd 修改当前用户的密码,更改的是/etc/shadow
[root@www pub]# ll /etc/shadow
----------. 1 root root 1744 Dec 3 11:30 /etc/shadow
为什么普通用户可以修改/etc/shadow的密码信息?
原因是passwd进程的身份是root,作为root匹配目标文件可以忽略读写权限
g+s=2 所属组的禁锢位sgid
对可执行文件(命令文件)设置有意义: 可执行文件进程的所属组身份是执行文件自身的所属组身份 (应用不是很多)
[root@www pub]# ll /usr/bin/touch
-rwxr-xr-x. 1 root root 96144 Jul 10 2021 /usr/bin/touch
[root@www pub]# chmod g+s /usr/bin/touch
[redhat@www pub]$ touch red2
[redhat@www pub]$ ll
-rw-rw-r--. 1 redhat root 0 Dec 3 16:13 red2
对目录文件设置有意义:在目录下任意用户创建的文件,文件的所属组都是当前目录的所属组
[root@www ~]# mkdir /test
[root@www ~]# chmod 777 /test
[redhat@www ~]$ cd /test
[redhat@www test]$ touch red1
[redhat@www test]$ ll
total 0
-rw-rw-r--. 1 redhat redhat 0 Dec 3 16:19 red1
[root@www ~]# chmod g+s /test ----对/test 设置sgid
[root@www ~]# ll -d /test
drwxrwsrwx. 2 root root 18 Dec 3 16:19 /test
[redhat@www test]$ touch red2
[redhat@www test]$ ll
total 0
-rw-rw-r--. 1 redhat redhat 0 Dec 3 16:19 red1
-rw-rw-r--. 1 redhat root 0 Dec 3 16:20 red2 ---创建文件的所属组取决于/test目录的所属组
o+t=1 sticky 冒险位
仅对目录文件设置有意义:
o+t在该目录下,用户只能删除属于自己的文件不能删除别人的文件。
注:(目录文件对当前用户如果没有写权限,不能删除文件;对目录文件只有有写权限,用户可以删除任意用户创建的文件)
扩展权限
./+ .表示没有扩展权限,+有扩展权限
查看文件的权限列表 :getfacl FILENAME
设置扩展权限列表:setfacl -m u:用户名:权限 FILENAME
setfacl -m g:组名:权限 FILENAME
删除扩展权限列表: setfacl -x u:用户名: FILENAME
清空扩展权限: setfacl -b FILENAME
练习题:
1.创建下列用户,组,和组的成员关系(servera)
• 创建组sysmgrs
• 一个名为 natasha 的用户,其属于 sysmgrs,这个组是该用户的从属组
• 一个名为 harry 的用户,属于 sysmgrs,这个组是该用户的从属组
• 一个名为 sarah 的用户,其在系统汇总没有可以交互的 shell
• 用户 natsha,harry,sarah 的秘密吗都要设定为:modteed
2.拷贝文件/etc/fstab 到/var/tmp/fstab 配置文件/var/tmp/fstab 的权限
• 文件/var/tmp/fstab 的拥有者是 root 文件/var/tmp/fstab 属于 root 组
• 文件/var/tmp/fstab 对任何用户不可执行
• 用户 natasha 能够对文件/var/tmp/fstab/具有读写权限
• 用户 harry 对文件/var/tmp/fstab 既不能读也不能写
• 其他用户(当前和将来的)能对文件/var/tmp/fstab 进行读操作
3.创建一个共享目录/home/managers 特性如下
• /home/managers 目录的所有权是 sysmgrs
• sysmgrs 组成员对目录有读写和执行的权限。除此之外的其他用户没有任何权限(root 用户除外)
• 在/home/managers 目录中创建的文件,其组所有权会自动设置为属于 sysmgrs组
1.
#groupadd sysmgrs
#useradd -G sysmgrs natasha
#useradd harry
#usermod -G sysmgrs harry
#useradd -s /sbin/nologin sarah
#echo modteed | passwd --stdin natasha
#echo modteed | passwd --stdin harry
#echo modteed | passwd --stdin sarah
2.
#cp /etc/fstab /var/tmp
#chown root.root /var/tmp/fstab
#chown a-x /var/tmp/fstab
#setfecl -m u:natasha:rw /var/tmp/fstab
#setfacl -m u:harry:- /var/tmp/fstab
#chmod o=r /var/tmp/fstab
3.
#mkdir -pv /home/managers
#chown sysmrgs:sysmrgs /home/managers
#chmod g=rwx /home/managers
#chmod o=- /home/managers
#chmod 770 /home/managers
#chmod g+s /home/managers