目录
一、用户和组的分类
1、用户分类
1)超级用户:用户名为root,它具备一切权限,只有进行系统维护情形下才会使用超级用户登录,以避免系统出现安全问题。
2)系统用户(伪用户):是LINUX系统正常工作所必须的用户。主要是为了满足相应的系统进程对文件属主的要求而建立,如:bin、adm等,系统用户不能用来登录。
3)普通用户:是为了让用户能够使用LINUX系统资源而建立的,我们大多数用户都属于此类。
2、组的分类
1)基本组(私有组):建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个就是基本组。
2)附加组(公有组):可以容纳很多用户,组中的用户都具有所拥有的权力。
3、用户和组的配置文件
|--------------|---------|
| 文件名称 | 文件功能 |
| /etc/passwd | 用户账号文件 |
| /etc/shadow | 用户密码文件 |
| /etc/group | 用户组账号文件 |
| /etc/gshadow | 用户组密码文件 |
1)用户账号文件--/etc/passwd是一个文本文件,用于定义系统的用户账号,由于所有用户都对passwd有读的权限,所以该文件只定义用户账号,而不保存密码。
root:x:0:0:root:/root:/bin/bash--该字段由七个部分组成,之间用" : "分隔格,格式如下
账号名称:密码:UID:GID:个人资料:主目录:Shell
2)用户密码文件--/etc/shadow
root:yj9T$LWZDwBAhVGg23pv037HHT.$7olHQP6h/q3Oendv1MZW9MrbGkZYUrboA9j0vkMF/j6:19608:0:99999:7::: ---该字段也是用" : "分隔,格式如下
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
3)用户组账号文件---/etc/group
root:x:0:---该字段用" : "分隔,格式如下
组名:组的加密口令:GID:Userlist
二、用户管理
1、添加用户
基本语法
php
useradd [选项] 用户名
常用选项:
-c :注释信息
-d :设定用户的家目录
-e :设置用户的失效时间,格式YYYY-MM-DD
-f :指定密码到期后多少天账号被禁用,若为0,指定账号到期立即禁用,若为-1,指账号过期后永不禁用。
-g :指定组名,该组名是存在的
-G :为用户指定所属的附加组,若指定多个附加组,可以用逗号分隔
-M :不创建用户家目录
-N :不创建与用户同名的基本组
-p :只等用户的登录密码
-u :设置用户的UID,若不指定默认在最大用户的UID+1,如果同时有-o选项可以重复使用其他用户的标识
-s :指定用户登陆后使用的SHELL,若不指定,默认为bash
如:创建一个用户为zhangsan,密码为123456,账号永不过期,其他默认。
php
[root@node1 ~]# useradd zhangsan -p 123456 -e -1
[root@node1 ~]# tail -1 /etc/shadow
zhangsan:123456:19611:0:99999:7:::
2、修改用户信息
基本语法
php
usermod [选项] 用户名
常用选项
可以用创建用户的选项,功能一样
-L :锁定(暂停)用户账户,使其不能登录使用。
-U :解锁用户账户
-l :修改原账户名的名字,必须在该用户未登录的情况下使用
例如:修改用户zhangsan的UID为1010,用户名修改为lisi。
php
#修改前先进行查看
[root@node1 ~]# tail -1 /etc/passwd
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
#进行修改
[root@node1 ~]# usermod zhangsan -u 1010 -l lisi
#修改后进行查看
[root@node1 ~]# tail -1 /etc/passwd
lisi:x:1010:1002::/home/zhangsan:/bin/bash
3、修改用户密码
基本语法
php
passwd [选项] 用户名
常用选项:
-e、-i、-l和上面的一样使用
-d :清空指定用户的密码
-x :指定用户密码的最长使用期限
例如:修改lisi用户的密码为654321
php
#修改前进行查看
[root@node1 ~]# tail -1 /etc/shadow
lisi:123456:19611:0:99999:7:::
#进行修改
[root@node1 ~]# passwd lisi
Changing password for user lisi.
New password: #LINUX系统是密文输入,看不见,正常输入即可
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: #LINUX系统是密文输入,看不见,正常输入即可
passwd: all authentication tokens updated successfully.
#修改后,进行查看你
[root@node1 ~]# tail -1 /etc/shadow
lisi:$y$j9T$3LAdu8d8IoA8bMXdHm11P/$9cRRCnV8M66KYvQqiY1wGEQNsOVvfTMqy0JAjWqpQbC:19611:0:99999:7:::
注:另一种脚本修改密码的方法
php
echo 密码 | passwd --stdin 用户名
4、用户间切换
基本语法
php
su 用户名
从root用户切换到任何用户不需要密码验证,而普通用户道root或者到其他用户需要输入密码进行验证后才可以切换。
su和su -命令的区别----加载配置文件不一样
su切换方式加载的文件:~/.bashrc 、/etc/bashrc
su -切换方式加载文件:/etc/bashrc、/etc/profile、~/.bashrc、~/.bash_profile
例如:
php
[root@node1 ~]# su lisi ---root用户到普通用户lisi
[lisi@node1 root]$ su root ---从普通用户到root
Password: ---需要输入密码才能切换
[root@node1 ~]#
#在使用过程中,不要用户套用户,登录一个用户应该退出再切换到其他用户
[root@node1 ~]# exit
exit
[lisi@node1 root]$ exit
exit
[root@node1 ~]#
5、删除用户账号
基本语法
php
userdel [-r] 账户名
选项 -r 在删除该用户的同时,一并删除该用户对应的主目录。
例如:删除lisi用户
php
#删除前进行查看该文件最后一条用户是lisi
[root@node1 ~]# tail -1 /etc/passwd
lisi:x:1010:1002::/home/zhangsan:/bin/bash
#执行删除lisi用户的命令
[root@node1 ~]# userdel -r lisi
#删除后进行查看该文件的最后一条用户不是lisi了,说明已经删除
[root@node1 ~]# tail -1 /etc/passwd
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
6、sudo命令提高普通用户权限
使用该命令,需要通过root用户在用户配置文件/etc/sudoers文件配置才可以使用
sodo的执行流程:
默认只有root才有该权限,当用户执行sudo时,便会让用户输入自己的密码进行确认,root用户不需要输入密码。若想要切换的身份执行相同的权限,也需要输入密码,若密码输入不成功,系统会去系统/etc/sudoers文件中查找该用户是否执行sudo的权限。若用户具有执行sudo的权限,便会开始执行sudo后续接的命令。格式:sudo + 其他要执行的命令。
配置/etc/sudoers文件
vim /etc/sudoers 找到文件第100行这个位置,都修改为ALL。
root ALL=(ALL) ALL
参数含义:root用户账号,第一个ALL登录者的来源主机,第二个ALL可以切换的身份,第三个ALL可执行的命令。
ALL关键字,代表任何身份、主机、命令。
三、用户组管理
1、创建用户组
基本命令
php
groupadd [选项] 用户组名
常用选项:
-g :指定用户组名的GID(组ID)
-r :建立一个系统组账号,与-g不能同时使用,则分配一个1~999的GID
例如:创建一个group1组名的新组
php
[root@node1 ~]# tail -1 /etc/group
group1:x:977:
2、修改用户组的属性
基本语法
php
groupmod [选项] 用户组名
常用选项:
-g :指定用户组的新GID
-n :将组的名字修改为新名字
3、添加/删除组成员
基本语法
php
gpasswd [选项] [用户] [组]
只有root用户和组管理员才能使用该命令。
常用选项:
-r :删除组密码
-a :把用户加入组
-d :把用户从组中删除
-M :可以添加多个用户
-A :给组指派管理员
例如:将zhangsan用户添加至group1。
php
#先创建一个用户zhangsan
[root@node1 ~]# useradd zhangsan -p 123456
#将用户zhangsan添加至group1用户组
[root@node1 ~]# gpasswd -a zhangsan group1
Adding user zhangsan to group group1
#添加后进行查看
[root@node1 ~]# tail -2 /etc/group | head -1
group1:x:977:zhangsan
4、删除组账号
基本语法
php
groupdel 用户组名
四、查询用户和用户组信息
1、查看用户信息
php
id 用户名
2、查看用户组信息
php
groups 用户组名
例如:
php
#查看zhangsan用户信息
[root@node1 ~]# id zhangsan
uid=1002(zhangsan) gid=1002(zhangsan) groups=1002(zhangsan),977(group1)
#查看zhangsan用户组信息
[root@node1 ~]# groups zhangsan
zhangsan : zhangsan group1
3、查看用户登录情况
1)users---查看当前登录系统的用户
php
[root@node1 ~]# users
root root
2)last -n---查看你最近登录用户情况
php
[root@node1 ~]# last -10
root pts/1 192.168.78.1 Mon Sep 11 18:09 still logged in
root pts/0 192.168.78.1 Mon Sep 11 16:10 still logged in
reboot system boot 5.14.0-162.6.1.e Mon Sep 11 15:58 still running
root pts/1 192.168.78.1 Sun Sep 10 15:50 - crash (1+00:08)
root pts/0 192.168.78.1 Sun Sep 10 15:42 - 18:17 (02:35)
reboot system boot 5.14.0-162.6.1.e Sun Sep 10 15:40 still running
root pts/0 192.168.78.1 Sat Sep 9 16:19 - crash (23:21)
reboot system boot 5.14.0-162.6.1.e Sat Sep 9 16:17 still running
root pts/0 192.168.78.1 Fri Sep 8 09:56 - crash (1+06:21)
3)lastlog---查看每个账户最近登录时间
php
[root@node1 ~]# lastlog
Username Port From Latest
root pts/1 192.168.78.1 Mon Sep 11 18:09:02 +0800 2023
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
operator **Never logged in**
4)w---显示登录到系统的用户信息
php
[root@node1 ~]# w
18:31:55 up 2:33, 2 users, load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 16:10 1.00s 3.15s 0.02s w
root pts/1 18:09 22:53 0.02s 0.02s -bash
五、文件系统权限
1、文件一般权限
1)文件权限三类对象:owner所属主,简写u;group所属组,简写g;other其他,简写o。
2)文件的三种主要权限:r----read读;w----writh写;x----execute执行。
注:root用户不受文件权限的的读写限制,执行权限受限制。
3)一般权限说明
4)修改文件或目录权限
基本语法
php
chmod [选项] [ugoa] [+|-|=] [rwx] 文件或目录名 ---字符型修改方式
chmod [选项] [ugoa] nnn 文件或目录名 ---数值型修改n代表数字
常用选项:-R --- 递归修改该目录下所有的文件或者子目录的权限。
ugoa:针对不同用户的级别选择 a代表所有用户即 a=u+g+o。
=或-或=:表示设置权限的动作,+增加某个权限,-取消某个权限,=赋予某个权限,并覆原来的权限。
rwx:用字符组合设置权限。
nnn:用三个八进制数字来表示的权限。
注:字符和数字不能混合使用添加或取消权限
5)对于文件和目录 rwx有着不同的作用
6)文件和目录可能出现的权限
例如,修改a.txt文件所属主为可读、可写、可执行,所属者为可读、可写、不可执行,其他用户可读,不可写、不可执行。
php
#修改前查看权限
[root@node1 test]# ll
total 0
-rw-r--r--. 1 root root 0 Sep 11 19:42 a.txt
#进行修改
[root@node1 test]# chmod 764 a.txt
#修改后进行查看权限
[root@node1 test]# ll
total 0
-rwxrw-r--. 1 root root 0 Sep 11 19:42 a.txt
7)修改文件或目录的属主和属组
修改文件或目录的所属者
基本语法
php
chown [选项] 新属主[:[新属组]] 文件或目录
选项-R ----可以递归设置指定目录下的全部文件(包括子目录和子目录中的文件)的所属关系。
修改文件或者目录的属主
基本语法
php
chown [选项] :新属组 文件或目录
chgrp [选项] 新属组 文件或目录
2、文件和目录的特殊权限
三种特殊权限:SET UID(SUID)、SET GID(SGID)、StickyBit(粘滞位),用于对文件或目录进行灵活方便的控制。
1)、SUID
授予该权限,表示任何用户执行该可执行程序,生成的进程的所有者不是进程的发起者,而是可执行程序的所有者,标识为 s。
基本语法
php
chmod u+s 文件或目录名
2)、SGID
对目录授予该权限,则在目录中创建的所有文件的所属组都为该目录的所属组,而不是用户所属组 标识为 s。
基本语法
php
chmod g+s 文件或目录目录名
3)、STICKY
对目录设置该权限,则该目录中所有的文件只有创建者可以修改删除,标识为 t。
基本语法
php
chomd o+t 文件或目录名
注:授予特殊权限时,该目录或文件需要有x普通权限才会达到对应的效果。
3、ACL权限
给指定的用户指定目录分配指定的权限。
1)设置ACL权限
基本语法
php
setfacl [选项] 文件或目录
常用选项:
-m :设定ACL权限(必选项),例如给一个用户ACL权限,则使用 u:用户名:权限 格式;如果给一个组ACL权限,则使用 g:组名:权限 格式;
-x :删除指定的ACL权限
-b :删除所有的ACL权限
-d :设定默认ACL权限。只对目录生效,指目录中新建的文件拥有此默认权限
-k :删除默认ACL权限
-R :递归设定ACL权限,指设定的ACL权限会对目录下的所有子文件生效
2)查看ACL权限
基本语法
php
getacl 文件名或目录名
例如:所有者root用户在根目录下创建一个文件目录/file,然后创建一个QQ所属组,所属组里面创建两个用户xiaoming和xiaohong。此文件权限770,然后新加入一个用户xiaoqiang,给他设定/file目录的ACL为r-x。
php
[root@node1 test]# mkdir /file
[root@node1 test]# useradd xiaohong
[root@node1 test]# useradd xiaoming
[root@node1 test]# groupadd QQ
[root@node1 test]# gpasswd -M xiaohong,xiaoming QQ
[root@node1 test]# chown root:QQ /file/
[root@node1 test]# chown 770 /file/
[root@node1 test]# ll -d /file/
drwxrwxrwx. 2 770 QQ 6 Sep 11 21:57 /file/
目录/file的所有者和所属组其他人权限设定为770,接下来我们创建旁听用户xiaoqiang,并赋予ACL权限r-x。
php
[root@node1 test]# useradd xiaoqiang
[root@node1 test]# setfacl -m u:xiaoqiang:rx /file/
[root@node1 test]# ll -d /file/
drwxrwxrwx+ 2 770 QQ 6 Sep 11 21:57 /file/
[root@node1 test]# getfacl /file
getfacl: Removing leading '/' from absolute path names
# file: file
# owner: 770
# group: QQ
user::rwx
user:xiaoqiang:r-x
group::rwx
mask::rwx
other::rwx
现在切换到xiaoqiang用户对于/file目录没有写权限,进入/file目录,在此目录创建文件看能否成功。
php
[root@node1 test]# su xiaoqiang
[xiaoqiang@node1 test]$ cd /file/
[xiaoqiang@node1 file]$ touch a.txt
touch: cannot touch 'a.txt': Permission denied
六、权限掩码umask
1、设置新建文件或目录的默认权限
在LINUX系统中,当用户创建一个新的文件或者目录时,系统都会为新建的目录或文件分配默认的权限,该默认的权限与UMASK值有关,具体关系如下
新建文件的默认权限=0666-umask值
新建目录的默认权限=0777-umask值
2、查看、修改用户当前默认的umask值
php
查看当前用户的umask权限
[root@node1 test]# umask
0022
#修改umask值
#1、临时修改
[root@node1 test]# umask 000
[root@node1 test]# umask
0000
[root@node1 test]# touch b.txt
[root@node1 test]# mkdir file
[root@node1 test]# ll
total 0
-rwxrw-r--. 1 root root 0 Sep 11 19:42 a.txt
-rw-rw-rw-. 1 root root 0 Sep 11 21:24 b.txt
drwxrwxrwx. 2 root root 6 Sep 11 21:24 file
#2、永久修改
[root@node1 test]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
[root@node1 test]# source /etc/profile //立即在当前shell中生效