Linux–账号和权限管理
前言:
Linux登陆需要用户名、密码。/etc/passwd 文件保存用户名。登录Linux时,Linux 先查找 /etc/passwd 文件中是否有这个用户名,没有则跳出,有则读取用户名的user ID 、 group ID 、用户名对应的根目录路径以及所使用的 shell ,最后在 /etc/shadow 中核对该 UID 对应的 PWD 是否正确,正确则登录到该用户的 shell。
一:用户账号和组账号概述
1.1:用户账号和组账号
1.1.2用户账号
超级用户(root,不可被替代)
普通用户(自己创建,取用户名)
程序用户(人无法登录,是给程序使用的,以使程序可以正常运转)
匿名用户(windows的guest,linux的nobody,普通用户中的最低权限用户)
1.1.2组账号
组账号(用户权限的集合)
基本组(私有组,伴随着用户的创建而创建,与用户同名)
附加组(公有组,直接创建一个空组,可以添加已有用户,给组设置相关权限,该组中的所有用户都具备此权限)
1.2:UID号和GID号
Linux系统中的每一个用户账号和组账号都有一个数字形式的身份标记,称为UID(User IDentity,用户标识号)和GID(Group IDentify,组标识号)。对于系统核心来说,UID是作为区分用户的基本依据,原则上每个用户的UID号应该是唯一的。
用户 | UID号 |
---|---|
root用户 | 固定值UID=0 |
程序用户 | UID 1—999 |
普通用户 | UID 1000–6万 |
1.3:用户账号文件/etc/passwd
系统中所有用户的账号信息都保存在“/etc/passwd”文件中,该文件是文本文件,任何用户都可以读取文件中的内容。
系统中新增加的用户账号信息会保存到passwd文件的末尾。
基于系统运行和管理的需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。在早期的UNIX操作系统中,用户账号的密码信息也是保存在passwd文件中的,但是可以被不法用户暴力破解,因此后来将信息转存入专门的shadow文件中,而passwd文件中仅保留密码占位符“x”。
[root@localhost ~]# head -8 /etc/passwd 查看前8行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
passwd文件的每一行内容中,包含了七个用冒号“:”分隔的配置字段,我们需要了解其含义。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZbj8VPK-1593948247738)(C:\Users\LIU\AppData\Roaming\Typora\typora-user-images\image-20200705161506299.png)]
字段 | 解释 |
---|---|
用户账号 | 用户账号的名称,也是登录系统时使用的识别名称 |
密码占位符 | 表示自己有密码 |
用户账号ID(UID | 用户账号的UID号 |
组账号ID(GID | 所属基本组账号的GID号 |
用户说明 | 用户全名,可以填写与用户相关的说明信息 |
宿主目录(家目录) | 该用户登录后所在的默认工作目录 |
登录Shell | 登录shell等信息,用户完成登录后使用的shell |
1.4:组账号文件
1.4.1:/etc/group 和 /etc/gshadow
组账号文件也有两个,分别是/etc/group, /etc/gshadow。与用户账号文件非常类似。前者用于保存组账号名称,GID号,组成员等基本信息,后者用于保存组账号的加密密码字符串等信息(但是很少使用到)。
某一个组账号包含哪些用户成员,将会在group文件内最后一个字段中体现出来(基本组对应的用户账号默认可能不会列出),多个组成员之间使用逗号“,”分隔。
例如:查看root组包括哪些用户成员,哪些组中包含root用户。
检索root组包括哪些用户
[root@localhost ~]# grep "^root" /etc/group
root:x:0:
检索哪些组包括root用户
[root@localhost ~]# grep "root" /etc/group
root:x:0:
二:用户账号和组帐号管理
2.1:用户账号管理
切换用户:su 用户,保持路径不变
su - 用户,切换到当前用户的家目录
grep “bash$” /etc/passwd 查看当前可用用户
用户被锁定后,可以从高权限用户切换到普通用户,但是不可以用普通用户登录
2.1.1:useradd命令–添加用户账号
基本命令格式如下
useradd [选项] 用户名
常用选项有:
-u 指定用户的UID号,要求UID号码未被其他用户使用
-d 指定用户的宿主目录位置(当与 -M 一起使用时,不生效)
-e 指定用户的账户失效时间,可以使用YYYY-MM-DD的日期格式
-g 指示基本组
-G 指示附加组
-M 不建立宿主目录,即使/etc/login.defs系统配置中已设置要建立宿主目录
-s 指定用户的登录shell
例如:创建一个名为wangwu的账号(禁止终端登录),该账号将于2020.9.31失效。
[root@localhost ~]# useradd -e 2020-9-31 -s /sbin/nologin wangwu
用户无法直接登录和被切换登录
2.1.2:passwd命令–设置/更改用户口令
创建一个用户,并设置密码且只输入一次,此功能在脚本中常用
useradd test01
echo “密码” | passwd --stdin test01 ‘免交互方式创建密码(stdin:输入)’
通过useradd创建一个账户后还需要设置密码才能够正常使用,使用passwd命令可以设置或修改密码。
passwd命令除了可以修改账号的密码外,还能对用户账号进行锁定,解锁,也可以将用户的密码设置为空(无需密码即可登录)。
使用命令基本格式
passwd [选项] 用户名
常用选项
-d 清空指定用户的密码,仅使用用户名即可登录系统
-l 锁定用户账户
-S(大S) 查看用户账户是否被锁定
-u 解锁用户账户
通过passwd命令锁定的用户账号,将无法再登录系统(shadow文件中的对应密码子串前将添加“!!”字符),只能由管理员来解除锁定。(还可以从root用户切换登录)
root用户有权限管理其他账号的密码(指定账号名称作为参数即可),不指定用户名时,修改当前账号的密码。普通用户只能执行单独的“passwd”命令修改自己的密码。
例如:执行“passwd wangwu“命令可以为wangwu账号设置登录密码
[root@localhost ~]# passwd wangwu
对于普通用户自行设置的密码,要求具有一定的复杂性(如不要直接使用英文单词,长度保持在六位以上)否则系统可能拒绝进行设置。普通用户设置自身的登录密码时,需要先输入旧的密码进行验证。
例如,普通用户设置自身的密码
[wangwu@localhost~]$passwd
2.1.3:usermod命令–修改用户账号的属性
对于系统中已经存在的用户账号,可以使用usermod命令重新设置各种属性。usermod命令同样需要指定账号名称作为参数。
命令使用基本格式
usermod [选项] 用户名
常用选项
-l 更改用户账号的登录名称(Login Name)
-L 锁定用户账户
-U 解锁用户账户
-u 修改用户的UID号
-d 修改用户的宿主目录位置
-e 修改用户的账户失效时间,可以使用YYYY-MM-DD的日期格式
-s 指定用户的登录shell
我们发现,usermod命令大部分和useradd命令的选项时相对应的,作用也相似。
usermod两个选项“-L”’-U’分别用于锁定,解锁用户账户
passwd两个选项’-l’ '-u’也分别用于锁定,解锁用户账户 两者存在大小写区别
2.1.4userdel命令–删除用户账号
命令使用基本格式
userdel [-r] 用户名
添加-r选项时,表示连用户的宿主目录删除
2.1.5:用户账号的初始配置文件
添加一个新的用户账号后,useradd会在该用户的宿主目录中建立一些初始配置文件。这些文件来自账号模板目录’/etc/skel’,基本上都是隐藏文件。
主要的用户初始配置文件 | 解释 |
---|---|
~/.bash_profile | 文件中的命令将在每次用户登录时执行 |
~/.bashrc | 文件中的命令会在每一次加载’/bin/Bash’程序时(当然也包括登录系统)执行 |
~/.bash_logout | 文件中的命令将在每一次用户退出登录的时候执行 |
上三个都是针对用户的,用户一旦切换,就不会生效 | |
~/etc/profile | 针对系统的,不管切换到哪个用户都会生效 |
因此,在’.bashrc’等文件中,我们可以添加自定义的可执行语句(Linux命令行,脚本控制语句等)来自动完成相应的任务。
2.2:组帐号管理
2.2.1:groupadd命令 --添加组账号
需要指定GID号时,可以使用’-g’选项。
命令执行基本格式
groupadd [-g GID] 组账号名
[root@localhost ~]# groupadd -g 1000 caiwu
2.2.2:gpasswd命令–添加删除组成员
设置组账号密码(极少用),添加/删除组成员
命令使用基本格式
gpasswd [选项] 组账号名
常用选项
-a 向组内添加一个用户
-d 从组中删除一个用户成员
-M 定义组成员列表,以逗号分隔
一定注意:如果用了-M,就是对组列表的覆盖。
-M需要首次使用,后面不能再次使用。
首次使用了-M后,再次添加用户需要使用-a
2.2.3:groupdel命令–删除组账号
使用命令基本格式
groupdel 组账号名
例如
[root@localhost ~]# groupdel caiwu
2.2.4:查询账号信息
在用户管理工作中,虽然直接查看用户账号,组账号的配置文件也可以查询相关信息,但不是很乐观。在Linux系统中,还可以使用几个常用的命令查询工具。
id命令:查询用户账号的身份标识
使用id命令可以快速查看指定用户账号的UID,GID等表示信息。
id命令基本格式
id [用户名] 查询用户身份标识
[root@localhost ~]# id zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) 组=1001(zhangsan)
groups命令:查询用户账号所属的组
groups命令可以查看指定的用户账号属于哪些组
[root@localhost ~]# groups zhangsan 查看zhangsan用户所属组
zhangsan : zhangsan
[root@localhost ~]# groups 查看当前用户所属组
root
groups命令使用格式
groups [用户名] 查询用户所属的组
finger命令:查询用户账号的详细信息
finger命令可以查询指定的账号的登录属性等详细信息,包括登录名称,完整名称,宿主目录,登录shell等。
finger命令使用格式
finger [用户名] 查询用户账号的详细信息
[root@localhost ~]# finger zhangsan
Login: zhangsan Name:
Directory: /home/zhangsan Shell: /bin/bash
Last login 日 7月 5 15:40 (CST) on pts/2
No mail.
No Plan.
w,who,users命令:查询已经登录到主机的用户信息
[root@localhost ~]# w
18:11:36 up 5:33, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 20.0.0.1 17:09 0.00s 0.10s 0.03s w
root pts/2 20.0.0.1 15:12 1:57m 0.26s 0.03s -bash
[root@localhost ~]# who
root pts/1 2020-07-05 17:09 (20.0.0.1)
root pts/2 2020-07-05 15:12 (20.0.0.1)
[root@localhost ~]# users
root root
使用w命令可以查询当前主机中用户登录的情况,列出登录账号名称,所在终端,登录时间,来源地点等信息。
lastb 命令 查看最近登录的历史记录
[root@localhost ~]# lastb
btmp begins Sun Jul 5 11:20:01 2020
三:文件、目录的权限和归属
3.1:查看文件、目录的权限和归属
3.1.1:访问权限
读取r | 允许查看文件内容,显示目录列表 |
---|---|
写入w | 允许修改文件内容,允许在目录中新建,移动,删除文件或子目录 |
可执行x | 允许运行程序,切换目录 |
3.1.2:归属
类型 | 解释 |
---|---|
属主 | 拥有该文件或目录的用户账号 |
属组 | 拥有该文件或目录的组账号 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zb2VQjUi-1593948247741)(C:\Users\LIU\AppData\Roaming\Typora\typora-user-images\image-20200705182122961.png)]
- 我们可以使用-rwxrwxrwx来表示权限也可以用777来表示权限。
- rwx采用累加数字形式表示成 7 , r-x 表示成 5 , rwxr-xr-x 表示成755,rw-r–r–表示成644
- 数字固定不会变,一个普通的数据文件没有执行权限。
3.2:设置文件、目录的权限和归属
3.2.1:chmod命令–设置文件权限
chmod命令使用基本格式
chmod [ugoa] [+-=] [rwx] 文件或目录 (不常用) (u,g,o,a分别表示属主,属组,其他用户,所有用户)(+-=分别表示增加,去除,设置权限)
或
chmod nnn 文件或目录 (最常用) (nnn表示三位八进制数字,如刚刚提到的 777,755,644等)
常用选项
-R 递归修改指定目录下所有子项的权限
6.2 文件权限目录权限小结:
文件权限:(更多关注一定要有read权限)
read 读文件内容的能力 (有了读文件block能力)
write 写文件内容的能力(有了读文件block能力) 重命名文件???
execute 执行文件的能力(脚本文件)
补充: 文件是否可以编辑查看,和上一级或上n级目录有关
读取文件数据原理 / oldboy/ oldboy01/ oldboy.txt
目录权限:(更多关注一定要有x执行权限)
read 读取目录下文件属性信息
write 可以在目录中创建或删除数据
execute 可以切换进入到目录中
3.3.4:权限掩码 umask
umask作用 |
---|
控制新建的文件或目录的权限 |
默认权限去除umask的权限就为新建的文件或者目录的权限 |
umask设置命令格式
umask 000(000指数字)
umask查看
umask
umask的分数指的是“该默认值需要减掉的权限,”因此,如果执行“umask 022”,代表group和other被拿掉了权限“2”,也就是被拿掉了写的权限。
如果执行命令“umask 000”,代表文件的默认权限是“777”
-R 递归修改指定目录下所有文件,子目录的归属
如何修改Umask值呢?
1、临时修改 umask 066 (这个066根据的根据的需求定,可以理解成反子网掩码,这个是临时的)
2、永久修改 vi /etc/bashrc 最后一样插入umask 066 (这个是永久生效的)
[root@localhost tmp]# vim /etc/profile
两个文件的内容是一样的
搜索umask,找到如下代码,不算第一位的特殊权限
[root@localhost ~]# vim /etc/profile
You could check uidgid reservation validity in
/usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002 ###表示uid大于等于199的默认umask值,表示普通用户
else
55,23 76%
umask 022 ####表示uid小于199的默认umask值,表示root
修改后需要重新读取一下
/etc/bashrc或/etc/profile
常用的是700 755 最大权限是777
默认文件夹 755
默认文件 644
[root@localhost ~]# cd /opt
[root@localhost opt]# umask 066
[root@localhost opt]# touch a.txt
[root@localhost opt]# ls -l
总用量 40960
-rw-------. 1 root root 0 7月 5 19:00 a.txt 644 -066=600
-rw-rw-r–. 1 zhangsan zhangsan 41943040 7月 5 15:38 test01.txt
[root@localhost opt]# mkdir a
[root@localhost opt]# ls -l
总用量 40960
drwx–x--x. 2 root root 6 7月 5 19:01 a #由默认的755改成711
-rw-------. 1 root root 0 7月 5 19:00 a.txt
-rw-rw-r–. 1 zhangsan zhangsan 41943040 7月 5 15:38 test01.txt
[root@lewis ~]# source /etc/profile
[root@lewis ~]# source /etc/bashrc
常用的是700 755 最大权限是777
默认文件夹 755
默认文件 644
6=600
-rw-rw-r–. 1 zhangsan zhangsan 41943040 7月 5 15:38 test01.txt
[root@localhost opt]# mkdir a
[root@localhost opt]# ls -l
总用量 40960
drwx–x--x. 2 root root 6 7月 5 19:01 a #由默认的755改成711
-rw-------. 1 root root 0 7月 5 19:00 a.txt
-rw-rw-r–. 1 zhangsan zhangsan 41943040 7月 5 15:38 test01.txt
[root@lewis ~]# source /etc/profile
[root@lewis ~]# source /etc/bashrc
常用的是700 755 最大权限是777
默认文件夹 755
默认文件 644