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

相关推荐
Tak1Na13 分钟前
2024.9.18
linux·运维·服务器
A^mber17 分钟前
828华为云征文|云服务器Flexus X实例|Ubunt部署Vue项目
运维·服务器·华为云
安得权22 分钟前
Ubuntu 20.04 部署 NET8 Web - Systemd 的方式 达到外网访问的目的
linux·前端·ubuntu
chnyi6_ya23 分钟前
深度学习的笔记
服务器·人工智能·pytorch
让学习成为一种生活方式27 分钟前
解析药用植物重楼甾体皂苷生物合成中的连续糖基化及其抗真菌作用-文献精读49
linux·数据库·算法·天然产物化学
凯哥是个大帅比1 小时前
ubuntu20.04 GLIBC从2.35降级到2.31
linux
iHero1 小时前
【Ubuntu】在 Ubuntu 22.04.3 LTS 安装 davfs2 通过 Nextcloud WebDAV 挂载到 Ubuntu 的目录上
linux·ubuntu·nextcloud
心勤则明1 小时前
Netty配置SSL证书加密
服务器·https·ssl
清园暖歌1 小时前
Ubuntu 不重装系统增加交换空间大小
linux·运维·ubuntu·交换空间
黎相思1 小时前
操作系统迁移(CentOs -> Ubuntu)
linux·ubuntu·gitee·centos