Linux 用户和组的增删改查,用户切换及权限超详细解读

目录

用户和组及权限简单介绍

用户及组创建和删除

用户创建useradd

-m创建用户john

-g创建用户john

-d创建指定家目录的用户john

[-m -g -d的组合使用](#-m -g -d的组合使用)

[用户删除 userdel](#用户删除 userdel)

用户密码设置

[组创建 groupadd](#组创建 groupadd)

[组删除 groupdel](#组删除 groupdel)

主组和附加组

[修改用户所在主组或附加组 usermod](#修改用户所在主组或附加组 usermod)

更换或添加附加组

更换主组

用户及组的信息查询

[用户信息查询 id/getent passwd](#用户信息查询 id/getent passwd)

id

[getent passwd](#getent passwd)

[组信息查询 getent group](#组信息查询 getent group)

权限详解

[文件或目录权限更改 chmod](#文件或目录权限更改 chmod)

根据用户类别分别更改

完整用法

简要写法

根据3位数字进行权限设置

[更改文件或目录所属用户和组 chown](#更改文件或目录所属用户和组 chown)

更改文件或目录所属用户

更改文件所属用户

更改目录所属用户

更改文件所属组

更改目录所属组


用户和组及权限简单介绍

Linux中为了做到权限的隔离,设置了用户和组,不同的用户和组的权限都是不同的不同的

权限一般分为可读,可写,可执行

其中权限最大的为root,也就是超级管理员用户,家目录位于/root,拥有对所有文件的读,写,执行权限,包括系统文件

普通用户一般只具有自己家目录内文件的读,写,执行权限,其它文件需要视root或其它用户对所有文件的权限开放程度而定,普通用户的家目录一般位于/home/家目录名

用户及组创建和删除

用户创建useradd

用户创建使用useradd命令,可用option选项为-m,-g,-d

-m 表示make a home directory,也就是再创建用户的时候会再/home/目录下生成一个和用户名相同的目录名,若不使用-m则不会自动创建

-g表示 group,就是指定一个已经存在的组让user加入,不会自动创建用户同名组

-d表示directory,表示指定一个user的家目录

不带有任何选项的命令

useradd john

这个命令会创建用户john,并会自动创建名为john的组

-m创建用户john

useradd -m john

这样会再创建用户john的同时创建/home/john作为用户john的家目录

-g创建用户john

若此时有一个已存在的组 developers,那么如果要指定john所属于这个组

useradd -g developers john

-d创建指定家目录的用户john

若此时要设置家目录为自定义路径/data1/deve/john

useradd -d /data1/deve/john john

-m -g -d的组合使用

由于-m和-d都用于创建家目录,所以看似冲突,实际组合使用的时候,我们以以下命令为例

useradd -m -g developers -d /data1/deve/john john

这个命令会同时创建/home/john和/data1/deve/john两个目录,但是john最终的家目录为/data1/deve/john,并且所属组为developers

用户删除 userdel

用户删除使用命令userdel,可选options为-r,若不使用-r则不会自动删除用户的家目录

所以若想要完整地删除用户john及其家目录则需执行

userdel -r john

用户密码设置

若要为用户设置密码则需要在

useradd john

后执行

passwd john

之后系统会让你输入两次密码进行确认

组创建 groupadd

组创建有两种方式,一种是创建用户时使用-m创建同名组,一种是手动创建

手动创建方式为

groupadd 组名称

若要创建developers组

则执行

groupadd developers

组删除 groupdel

组删除只需要执行

groupdel 组名称

若要删除developers组

则执行

groupdel developers

主组和附加组

主组也就是primary group,是用户在创建的时候指定的组,也就是通过自动创建同名的组或者-g指定的组就是主组,主组只能有一个

附加组也就是supplementary group,是指用户后期通过指定附加组进行加入的,可以加入不止一个附加组,方法为usermod

修改用户所在主组或附加组 usermod

usermod,也就是user modify,一般用于修改用户组信息

常用option为 -G,-g,以及使用-aG,a一般配合G一起使用,G指的就是supplementary groups,g指的是primary group,-aG的作用是额外追加附加组,不会消除已经加入的附加组,单独只用-G会消除当前已加入的附加组

-g用于替换主组

更换或添加附加组

若使用

useradd -m john

则用户john属于组john

若还想让john加入额外组developers

则执行

usermod -G developers john

若再加入developers后还要加入组club

则执行

usermod -aG club john

若想要一次性加两个附加组,可以执行

usermod -G developers,club john

更换主组

若本来的主组为john,要想更换主组为developers

则执行

usermod -g developers john

用户及组的信息查询

用户信息查询 id/getent passwd

用户信息查询一般有两种方式

一是使用 id 用户名称

二十使用 getent passwd 用户名称

id

使用id查询用户信息一般使用

id 用户名称

比如id john

返回结果样例如下

uid=UID(username) gid=GID(groupname) groups=GID1(groupname1),GID2(groupname2),...
uid为用户id

gid为主组id

groups里为加入的附加组的id

getent passwd

getent的全称是get entry,目的是获取到/etc/下的数据

getent passwd会返回/etc/passwd中的所有内容

每一条的样例如下

username:password:UID:GID:gecos:home_directory:shell

username为用户名称

password为密码一般用x掩盖

UID为用户id

GID为主组id

gecos为General Electric Comprehensive Operating System的缩写,表示用户用户描述信息,可能为空

home_directory为家目录

shell为执行终端,默认为/bin/bash

由于getent passwd会返回所有用户信息

可以选择getent passwd 用户名称进行执行用户信息输出

如要输出john用户的信息,可以执行

getent passwd john

组信息查询 getent group

getent group会获取/etc/group里的所有组信息

每一条的样例如下

group_name:password:GID:members

group_name为组名

password一般由x掩盖

GID为组号

members为作为附加组属于的用户列表

权限详解

drwxr-xr-x 31 root root 4096 8月 25 04:25 anaconda3

-rw-r--r-- 1 root root 0 9月 9 07:18 tt.txt

lrwxrwxrwx. 1 root root 8 3月 7 2019 sbin -> usr/sbin

上面是三条文件的long listing显示的详细信息,可以看到最左边的字段是一个长度为10的字符串,下面对其进行详细解读

可以看到最左边的字符一共有三种,分别为d,-,l分别代表了三种类型,分别为directory目录,-代表文件,l代表symbolic link也就是软链接

可以看到软链接的目标是sbin -> usr/sbin

那么后9个字符,可以看到是由rwx-四个字符进行排列组合而成

9个字符要从左往右3,3拆分

我们以第一个anaconda3为例

rwxr-xr-x拆分为

rwx r-x r-x

rwx分别代表了read,write,execute,也就是读权限,写权限,可执行权限,注意,rwx的顺序不可变,如不具有某个权限则使用-

那么rwx r-x r-x进行拆分的原因为三个权限所对应的用户不同

从左至右分别对应 文件所属用户的权限,文件所属组的权限,其他用户的权限

权限字符串后的数字为硬链接数

root root代表了文件所属用户为root,所属组为root组

再之后的数字为文件或目录大小(字节数)

再之后8月 25 04:25为文件或目录最后修改时间

最后为文件或目录的名称

文件或目录权限更改 chmod

对于问卷或目录里的权限更改只有文件所属用户或者root用户可以更改,、

chmod的全称是change mode

用法有两种

根据用户类别分别更改
完整用法

完整用法会分别设置u(user),g(group),o(others)的权限,多个设置间用逗号间隔,例如

chmod u=rw,g=w,o=re /root/tt.txt

这里设置tt.txt的权限为所属用户可读可写,同组用户可读,其他用户可读可执行

简要写法

简要写法只要补充对应类别要补充或删除的权限,多个更改设置间用逗号间隔,例如

chmod u+rx,g+w /root/tt.txt

这里的作用为为所属用户添加可读和执行权限,为同组用户添加可写权限

根据3位数字进行权限设置

根据3位数字分别代表文件所属用户权限,所属组权限,其他用户权限

每位数字从0-7分别代表3位2进制数的转化

例如二进制数111,每一位从左到右分别对应r,w,x的权限,1为有,0为无,如rwx权限全具备则为111,转化为十进制就为7

所以不同数字的意义如下

0:无任何权限, 即 ---

1:仅有x权限, 即 --x

2:仅有w权限 即 -w-

3:有w和x权限 即 -wx

4:仅有r权限 即 r--

5:有r和x权限 即 r-x

6:有r和w权限 即 rw-

7:有全部权限 即 rwx

所以这里chmod的使用样例为

chmod 751 /root/tt.txt

这里将tt.txt所属用户具有全部权限,所属组具有可读和执行的权限,其它用户具有执行权限

根据分配权限需要可自行组合数字

更改文件或目录所属用户和组 chown

chown的全称为change owner

只有root用户有权限修改文件或目录所属的用户和组

更改文件或目录所属用户
更改文件所属用户

用法为

chown 要更改为的用户名称 文件路径

例如

chown root /home/john/tt.txt

这里将john家路径下的tt.txt所属用户转换给了root

更改目录所属用户

用法为

chown -R 要更改为的用户名称 目录路径

这里的-R 表示recursion(递归),因为要递归遍历整个目录的文件都转移所属用户

例如

chown -R root /home/john/libra/

这里将john家路径下libra目录所属用户转换给了root

更改文件所属组

用法为

chown :要更改为的用户名称 文件路径

例如

chown :root /home/john/tt.txt

这里将john家路径下的tt.txt所属用户转换给了root组

更改目录所属组

用法为

chown -R 要更改为的用户名称 目录路径

这里的-R 表示recursion(递归),因为要递归遍历整个目录的文件都转移所属组

例如

chown -R :developers /home/john/libra/

这里将john家路径下libra目录所属组转换给了developers

相关推荐
努力学习的小廉几秒前
深入了解Linux —— make和makefile自动化构建工具
linux·服务器·自动化
MZWeiei4 分钟前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper
7yewh19 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
Arenaschi23 分钟前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器
小张认为的测试23 分钟前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试
waicsdn_haha31 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
打鱼又晒网31 分钟前
linux网络套接字 | 深度解析守护进程 | 实现tcp服务守护进程化
linux·网络协议·计算机网络·tcp
良许Linux1 小时前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
蜜獾云1 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小屁不止是运维1 小时前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构