LINUX 用户和组操作

目录

一、用户和组的分类

1、用户分类

2、组的分类

3、用户和组的配置文件

二、用户管理

1、添加用户

2、修改用户信息

3、修改用户密码

4、用户间切换

5、删除用户账号

6、sudo命令提高普通用户权限

三、用户组管理

1、创建用户组

2、修改用户组的属性

3、添加/删除组成员

4、删除组账号

四、查询用户和用户组信息

1、查看用户信息

2、查看用户组信息

五、文件系统权限

1、文件一般权限

2、文件和目录的特殊权限

1)、SUID

2)、SGID

3)、STICKY

3、ACL权限

1)设置ACL权限

2)查看ACL权限

六、权限掩码umask

1、设置新建文件或目录的默认权限

2、查看、修改用户当前默认的umask值


一、用户和组的分类

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中生效
相关推荐
vvw&14 分钟前
如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台
linux·运维·服务器·ubuntu·开源·github·graylog
大哥_ZH18 分钟前
Linux umami在国产麒麟系统安装网站统计工具(只能上国内网站的系统)
linux·服务器
o(╥﹏╥)34 分钟前
在 Ubuntu 上安装 VS Code
linux·运维·vscode·ubuntu·vs
AI慧聚堂1 小时前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化
不爱学英文的码字机器1 小时前
[Linux] Shell 命令及运行原理
linux·运维·服务器
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
qq_433618441 小时前
shell 编程(三)
linux·运维·服务器
苹果醋31 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
两张不够花1 小时前
Jenkins 持续集成部署
运维·jenkins
Tlzns2 小时前
Linux网络——UDP的运用
linux·网络·udp