用户和用户组
Linux系统是一个多用户、多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员(root)申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问(权限);另一方面也可以帮助用户组织文件(家目录),并为用户提供安全性保护(权限)。
每个用户账号都拥有一个唯一的用户名和各自的密码。
要想实现用户账号的管理,要完成的工作主要有如下几个方面:
用户账号的添加、删除、修改以及用户密码的管理。
用户组的管理(添加,删除,修改)。
注意三个文件
/etc/passwd 存储用户的关键信息
/etc/group 存储用户组的关键信息
/etc/shadow 存储用户的密码信息
windows则是单用户多任务
几个关键词
单用户
多用户
如何理解?
某个时刻点同时允许登录的用户数量,windows只能同时登录一个用户,所以是单用户
单任务
多任务
如何理解?
执行指令的时候可以同时执行多个指令
1.用户管理
(1).添加用户
语法:
useradd 选项1 选项1的值 选项2 选项2的值 ... 用户名
常用选项
-M :不创建家目录
-r:系统用户
-g:表示指定用户的用户主(主要)组,选项的值可以是用户组的id,也可以是组名
-G:表示指定用户的用户附加(额外)组,选项的值可以是用户组的id,也可以是组名
-u:uid,用户的id(用户的标识符),系统默认会从500之后(centos7从1000开始)按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ的自选靓号情况】
-c:comment,添加注释(选择是否添加)
-s:指定用户登入后所使用的shell 解释器 【专门的接待员】
-d:指定用户登入时的启始目录(家目录位置)
-n:取消建立以用户名称为名的群组(了解,如果不指定-g用户组,默认创建和用户名一样名称的组)
演示:添加一个用户
useradd zhangsan
#查看配置文件passwd最后一行的内容
tail -1 /etc/passwd
#查看是否新建了一个家目录
ls /home/
#查看用户组
tail -1 /etc/group
#通过id指令验证用户是否添加成功
id zhangsan
再次添加一个用户,添加注释选项
useradd lisi -c "this is lisi"
然后认识/etc/passwd
文件,搞清楚存的是什么?
vim /etc/passwd
依次解释为:
用户名:密码:用户ID:用户组ID:注释:家目录:解释器shell
密码:此密码位置一般情况都是“x”,表示密码的占位
用户ID(-u)
用户组ID(-g)
注释(-c)
家目录(-d)
解释器shell(-s)
可以发现问题-G
和-n
没有体现出来,-n
可以理解
那么-G
在哪里呢?看演示
案例:添加选项,创建用户wangwu
,让wangwu
属于1001主组,附加组1000,用户ID分配666,并且要求不能登录到系统,注释内容为"user wangwu"
useradd -g 1001 -G 1000 -u 666 -c "user wangwu" -s /sbin/nologin wangwu
验证是否成功
id wangwu
查看附加组(/etc/group)
vim /etc/group
理解:
用户wangwu
的附加组是1000,附加组的名称是zhangsan
注意:
查看用户的主组可以查看passwd
文件,查看附加组可以查看group
文件
(2).用户的修改
语法:
usermod 选项 选项的值 …. 用户名
常用选项
-g:表示指定用户的用户主组,选项的值可以是用户组的id,也可以是组名
-G:表示指定用户的用户附加组,选项的值可以是用户组的id,也可以是组名
-u:uid,用户的id(用户的标识符),系统默认会从500之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ的自选靓号情况】
-l:修改用户名
-c<备注>:修改用户帐号的备注文字
-d<登入目录>:修改用户登入时的目录
-s<shell>:修改用户登入后所使用的shell
案例:修改lisi用户主组为1000,附加组改为1001
usermod -g 1000 -G 1001 lisi
案例:修改zhangsan用户用户名,改为zhangsan001
usermod -l zhangsan001 zhangsan
(3).密码设置(特殊)
特殊点
- 该指令普通用户也可执行
- 只有root用户才可以指定用户名
Linux不允许没有密码的用户登录到系统,因此前面创建的用户目前都处于锁定状态,需要设置密码之后才能登录计算机(简单来讲就是激活用户要改密码)
root用户改任何人包括自己的都不用输入旧密码,其余用户改密码需要输入旧密码
语法:
passwd [用户名]
案例:设置zhangsan001
用户的密码
passwd zhangsan001
此时查看存储用户密码的文件
vim /etc/shadow
在设置用户密码之后可以登录帐号,例如此处需要登录zhangsan001
此处,需要有两个点注意:
切换用户之后前后的工作路径是不变的
普通用户没有办法访问root用户家目录,但是反之则可以
(4).用户删除
语法:
userdel 选项 用户名
常用选项
-r 表示删除用户的同时,删除其家目录
案例:删除zhangsan001
userdel -r zhangsan001
发现删除不了,如何解决? ctrl+d
一直退到root就可以删除了
2.用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group
文件的更新。
/etc/group
文件的认识
依次解释
用户组名:密码:用户组ID:组内用户名[看附加组的]
组内用户名:表示附加组是该组的用户名称
(1).添加用户组
语法:
groupadd 选项 选项的值 …. 用户组名
常用选项
-g:类似用户添加里的“-u”,-g表示选择自己设置一个自定义的用户组ID数字,如果自己不指定,则默认从500之后(centos7从1000)递增;
案例:添加一个组 admins
groupadd admins
(2).编辑用户组
语法:
groupmod 选项 选项的值 … 用户组名
常用选项
-g:类似用户修改里的“-u”,-g表示选择自己设置一个自定义的用户组ID数字
-n:类似于用户修改“-l”,表示设置新的用户组的名称
案例:修改admins用户组,将组ID改成1314,将名称改为admin123
groupmod -g 1314 -n admin123 admins
(3).删除用户组
语法:
groupdel 用户组名
案例:删除用户组 lisi
提示:无法删除,这是某个用户的主组,如何解决?
则先从组内移出所有用户(改还是删除,看你需求)
权限管理
1.权限介绍
在Linux中分别有读、写、执行权限
读权限:
对于文件夹来说,读权限影响用户是否能够列出目录结构
对于文件来说,读权限影响用户是否可以查看文件内容
写权限:
对文件夹来说,写权限影响用户是否可以在文件夹下“创建/删除/复制到/移动到”文档
对于文件来说,写权限影响用户是否可以编辑文件内容
执行权限:
一般都是对于文件来说,特别脚本文件。
对于文件来说,执行权限影响文件是否可以运行。
对于文件夹来说,执行权限影响对应的用户是否可以在文件夹内
2.身份介绍
(1).Owner身份(文档所有者,默认为文档的创建者)
由于Linux是多用户、多任务的操作系统,因此可能常常有多人同时在某台主机上工作,但每个人均可在主机上设置文件的权限,让其成为个人的“私密文件”,即个人所有者。因为设置了适当的文件权限,。【所有者可以更改文档的权限】
(2).Group身份(与文档所有者同组的用户)
与文件所有者同组最有用的功能就体现在多个团队在同一台主机上开发资源的时候。
例如主机上有A、B两个团体(用户组),A中有a1,a2,a3三个成员,B中有b1,b2两个成员,这两个团体要共同完成一份报告F。由于设置了适当的权限,A、B团体中的成员都能互相修改对方的数据,但是团体C的成员则不能修改F的内容,甚至连查看的权限都没有。同时,团体的成员也能设置自己的私密文件,让团队的其它成员也读取不了文件数据。在Linux中,每个账户支持多个用户组。如用户a1、b1即可属于A用户组,也能属于B用户组【主组和附加组】。
(3).Others身份(其他人,相对于所有者与同组用户)
这个是个相对概念。打个比方,大明、二明、小明一家三兄弟住在一间房,房产证上的登记者是大明(owner所有者),那么,大明一家就是一个用户组,这个组有大明、二明、小明三个成员;另外有个人叫张三,和他们三没有关系,那么这个张三就是其他人(others)了。
同时,大明、二明、小明有各自的房间,三者虽然能自由进出各自的房间,但是小明不能让大明看到自己的情书、日记等,这就是文件所有者(用户)的意义。
(4).Root用户(超级用户)
在Linux中,还有一个神一样存在的用户,这就是root用户,因为在所有用户中它拥有最大的权限 ,所以管理着普通用户。因此以后在设置文档的权限的时候不必考虑root用户。
3.Linux的权限查看
ls -l 路径 / ll 路径
具体结构解释
dr-xr-xr-x
分成4部分来理解( d ) (r-x ) ( r-x) ( r-x)
一 二 三 四
第一部分表示文档类型
常见取值
d表示文件夹
-表示文件
l表示软连接(快捷方式)
s表示套接字
c表示字符设备
b表示块状设备
第二部分表示文件所有者权限
第二部分的第一位,表示读权限的情况,取值r、-,r:可读 -不可读
第二部分的第二位,表示写权限的情况,取值w、-,w:可写 -不可写
第二部分的第三位,表示执行权限的情况,取值x、-,x:可执行 -不可执行
第三部分表示文件所属用户组权限
第三部分的第一位,表示读权限的情况,取值r、-,r:可读 -不可读
第三部分的第二位,表示写权限的情况,取值w、-,w:可写 -不可写
第三部分的第三位,表示执行权限的情况,取值x、-,x:可执行 -不可执行
第四部分表示其他人拥有的权限
第四部分的第一位,表示读权限的情况,取值r、-,r:可读 -不可读
第四部分的第二位,表示写权限的情况,取值w、-,w:可写 -不可写
第四部分的第三位,表示执行权限的情况,取值x、-,x:可执行 -不可执行
注意:
除了权限位上的rwx
以及-
之外,还有一些特殊的权限代码s、t
,这些不在本次考虑范围内,了解一下即可。(黏贴位,特殊权限位)
4.Linux的权限设置
权限设置语法:
chmod [选项] 权限模式 文档路径
(1).字母形式
选项 | 字母 | 介绍 |
---|---|---|
谁 | u | 所有者用户 |
谁 | g | 所属组 |
谁 | o | 其它人 |
谁 | a | 所有人 |
作用 | + | 增加权限 |
作用 | - | 减少权限 |
作用 | = | 赋予权限 |
权限 | r | 可读 |
权限 | w | 可写 |
权限 | x | 可执行 |
根据以上表格,自己给自己准备小案例:在根目录新建一个php.txt文件,要求所有者全部权限,同组用户拥有读权限、写权限,其他人拥有读权限
touch /php.txt
chmod u=rwx,g=rw,o=r /php.txt
更改要求:所有者全部权限,同组用户拥有读权限、写权限,其他人拥有读权限、写权限
chmod o+w /php.txt
(2).数字形式
数值 | 权限 | 目录列表 |
---|---|---|
0 | 不能读 不能写 不能执行 | — |
1 | 不能读 不能写 可执行 | –x |
2 | 不能读 可写 不能执行 | -w- |
3 | 不能 可写 可执行 | -wx |
4 | 可读 不能写 不能执行 | r– |
5 | 可读 不能写 可执行 | r-x |
6 | 可读 可写 不能执行 | rw- |
7 | 可读 可写 可执行 | rwx |
理解案例:需要给xxx.php 设置权限,权限要求所有者拥有全部权限,同组用户拥有读执行权限,其他用户只读。
分析:
所有者(第1位):全部权限 = 4 + 2 + 1 = 7
同组用户(第2位):读执行 = 4 + 1 =5
其他用户(第3位):读 = 4
组合:754
注意点:用超级管理员设置文档的权限命令是 chmod 731 aaa.php
,请问这个命令有没有什么不合理的地方?
分析:
所有者 = 7 = 4 + 2 + 1 = 读 + 写 + 执行
同组用户 = 3 = 2 + 1 = 写 + 执行
其他用户 = 1 = 执行
问题在于 731中的3
写必须需要能打开之后才可以写,因此必须需要具备读权限,因此权限不合理。
总结:
单独出现2、3的权限数字一般都是有问题的权限
5.权限注意事项
(1).在Linux系统中,创建文档的权限有一个默认值
其创建文件夹之后的默认权限是755
创建文件之后的权限是644
原因
之所以会这样是受到了系统中umask(掩码)的值的影响,其是用于指定文档创建好之后的权限,umask默认为022
计算方式:
对于文件:文件的权限 = 666 – umask掩码
对于文件夹:文件夹的权限 = 777 - umask掩码
(2).删除文件注意
在Linux中,如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限、执行权限,如果有才可以删除
6.属主和属组
(1).chown
作用:更改文档的所属用户(change owner),既可以改属主,也可以改属组也可以单独改属组
语法:
chown [-R] username:groupname 文档路径
演示案例:
(2).chgrp
作用:更改文档的所属用户组(change group),只能改所属用户组
语法:
chgrp [-R] groupname 文档的路径
演示案例:
chgrp root /php.txt
7.sudo
Sudo配置文件:/etc/sudoers
,超级用户都只有只读权限,不能直接修改
要修改需要直接输入这条指令
visudo
直接跳转到100行,使用方式和vim
一样
100+G
结构解释
Root表示用户名,如果是用户组,则可以写成“%组名”
ALL:表示允许登录的主机(地址白名单)
(ALL):表示以谁的身份执行,ALL表示root身份
ALL:表示当前用户可以执行的命令,多个命令可以使用“,”分割
注意:
在写sudo规则的时候不建议写直接形式的命令,而是写命令的完整路径
用指令查看命令的完整路径
#which或者whereis
which useradd
案例:配置普通用户lisi
一个添加用户的权限
切换到普通用户lisi
后验证是否具有该权限(sudo -l)
,然后要你输入当前用户的密码
使用该权限,需要在前面加上sudo
,成功添加上