当前位置: 首页 > news >正文

Linux学习笔记-Ubuntu系统用户、群组、权限管理

一、概述

本文记录Ubuntu系统下通过命令操作用户账户进行管理。

Ubuntu系统版本:

Linux ubuntu 5.15.0-1034-raspi

#37-Ubuntu SMP PREEMPT Mon Jul 17 10:02:14 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux

注:查看系统版本号的指令如下

uname -a

用户管理主要包括:新建用户,查看用户,权限管理,删除用户

修改Root账户默认密码:

刚装完的ubuntu系统,root账户的密码是随机生成,每次开机都会随机生成一个密码,我们客户根据自己的需要设置root账户密码,毕竟管理Ubuntu系统,大部分需要用到root权限。

zero@ubuntu:/home$ sudo passwd    # 设置root账户密码
New password:
Retype new password:
passwd: password updated successfully

二、查看用户

2.1 使用Cat指令查找所有用户

cat /etc/passwd

查询结果如下:

会将所有用户列出,并显示出具体的分组信息,ID,主目录。

ubuntu@ubuntu:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:102:105::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:103:106:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
syslog:x:104:111::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:112:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:114::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:115::/nonexistent:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
landscape:x:111:118::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:112:119:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
lxd:x:999:100::/var/snap/lxd/common/lxd:/bin/false

2.2 使用getent查看所有用户信息

getent passwd
ubuntu@ubuntu:~$ getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:102:105::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:103:106:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
syslog:x:104:111::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:112:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:114::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:115::/nonexistent:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
landscape:x:111:118::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:112:119:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
lxd:x:999:100::/var/snap/lxd/common/lxd:/bin/false

2.3 使用id查找指定用户

id userid

查找指定用户的详细信息内容,如ID,分组。

ubuntu@ubuntu:~$ id root
uid=0(root) gid=0(root) groups=0(root)

2.4 使用who查找当前登录的用户

who
ubuntu@ubuntu:~$ who
ubuntu   pts/0        2023-08-15 08:36 (IP地址)
ubuntu   pts/1        2023-08-15 08:52 (IP地址)

2.5 使用getent group查看用户组,及群组成员

ubuntu@ubuntu:~$ getent group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,ubuntu
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:ubuntu
fax:x:21:
voice:x:22:
cdrom:x:24:ubuntu
floppy:x:25:ubuntu
tape:x:26:
sudo:x:27:ubuntu
audio:x:29:ubuntu
dip:x:30:ubuntu
www-data:x:33:
backup:x:34:# 当后面添加具体的群组名称时,可以查询该群组的所有成员列表
zero@ubuntu:~$ getent group test2
test2:x:1002:test,test4

2.6使用groups查看用户所属群组

zero@ubuntu:~$ groups        # 不带参数,直接查询当前账户的权限
zero adm cdrom sudo dip plugdev lxd# 带名称,可以查询指定用户的所属群组
zero@ubuntu:~$ groups test
test : test2
zero@ubuntu:~$ groups zero
zero : zero adm cdrom sudo dip plugdev lxd

三、用户管理

3.1 创建用户

3.1.1 使用adduser创建用户

adduser可以理解为对useradd封装后的方法,可以比较编辑的添加用户。

zero@ubuntu:~$ sudo adduser test1        # 添加用户
[sudo] password for zero:# 系统会自动添加新的权限信息
Adding user `test1' ...
Adding new group `test1' (1001) ...
Adding new user `test1' (1001) with group `test1' ...
Creating home directory `/home/test1' ...
Copying files from `/etc/skel' ...# 提示设置密码 ,不过有的版本可能没有提示,需要后续再行设置
New password:
Retype new password:
passwd: password updated successfully# 以下内容提示设置用户信息,可根据需要设置
Changing the user information for test1
Enter the new value, or press ENTER for the defaultFull Name []:Room Number []:Work Phone []:Home Phone []:Other []:
Is the information correct? [Y/n] y# 查看用户信息,可以看到已经有响应的权限信息了。
zero@ubuntu:~$ id test1
uid=1001(test1) gid=1001(test1) groups=1001(test1)

3.1.2 使用useradd创建用户

useradd用户是最基础也是最灵活的创建用户的指令,默认情况下会创建一个没有家目录、没有权限组,没有shell版本的用户,需要用户根据需要自行增补。

useradd的基本参数配置

  • -u  :数字,指定一个特定的 UID ;
  • -g  :接群组名称,用于设定账户的初始群组;
  • -G  :可加入的群组名称。会相应修改 /etc/group 內的相关信息!
  • -M  :强制不建立使用者家目录!(系统账户的预设值)
  • -m  :强制建立使用者家目录!(一般账号的预设值)
  • -c  :用户的说明信息。
  • -d  :使用绝对路径指定用户的家目录。
  • -r  :建立系统账号,UID值会有限制。
  • -s  :指定shell ,默认是 /bin/bash。
  • -e  :使用格式为“YYYY-MM-DD”的日期设置账号失效日期。
  • -f  :指定账号的失效天数,0为立刻失效, -1 为永不失效。
  • -D:查看useradd参数的默认值

示例1,使用默认参数创建用户:

# 使用默认参数创建
zero@ubuntu:~$ sudo useradd test2
[sudo] password for zero:# 查询用户
zero@ubuntu:/home$ id test2
uid=1002(test2) gid=1002(test2) groups=1002(test2)# 查看用户信息,有创建用户家目录
zero@ubuntu:/home$ grep test2 /etc/passwd
/etc/passwd:test2:x:1002:1002::/home/test2:/bin/sh

示例2,创建用户时指定默认群组,系统再创建群组:

# 指定uid和群组名称
zero@ubuntu:/home$ useradd -u 1003 -g zero test3
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
zero@ubuntu:/home$ sudo useradd -u 1003 -g zero test3# 查看用户信息,初始群组就是设置的群组
zero@ubuntu:/home$ id test3
uid=1003(test3) gid=1000(zero) groups=1000(zero)
zero@ubuntu:/home$ grep test3 /etc/passwd
test3:x:1003:1000::/home/test3:/bin/sh

示例3,创建系统账户:

zero@ubuntu:/home$ useradd -r test4    # -r 代表系统账户
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
zero@ubuntu:/home$ sudo useradd -r test4
[sudo] password for zero:
zero@ubuntu:/home$ id test4
uid=998(test4) gid=998(test4) groups=998(test4)
zero@ubuntu:/home$ grep test4 /etc/passwd
test4:x:998:998::/home/test4:/bin/sh# 系统账户会修改gshadow文件。
zero@ubuntu:/home$ grep test4 /etc/gshadow
grep: /etc/gshadow: Permission denied
zero@ubuntu:/home$ sudo grep test4 /etc/gshadow
test4:!::

3.2 使用passwd修改用户密码

passwd的参数信息:

  • --stdin :可以透過來自前一個管線的資料,作為密碼輸入,對 shell script 有幫助!
  • -l  :是 Lock 的意思,會將 /etc/shadow 第二欄最前面加上 ! 使密碼失效;
  • -u  :與 -l 相對,是 Unlock 的意思!
  • -S  :列出密碼相關參數,亦即 shadow 檔案內的大部分資訊。
  • -n  :後面接天數,shadow 的第 4 欄位,多久不可修改密碼天數
  • -x  :天数,多久内必须修改密码;
  • -w  :日期天数,密码过期前的警告天数
  • -i  :密码失效天数
zero@ubuntu:/home$ sudo passwd test1        # 使用root权限修改指定用户密码
[sudo] password for zero:
New password:
Retype new password:
passwd: password updated successfullyzero@ubuntu:/home$ passwd        # 不加任何参数,为修改当前自身密码
Changing password for zero.
Current password:
New password:
Retype new password:
The password has not been changed.

3.3 使用chage操作密码

参数列表:

  • -l :列出该账号的详细信息;
  • -d :YYYY-MM-DD格式的日期,修改最近一次更改密碼的日期;
  • -E :YYYY-MM-DD的日期,账号失效日期;
  • -I :天数,密码失效天数;
  • -m :天数,密码最短保留天数;
  • -M :天数,密码需要更改的天数;
  • -W :天数,密码过期前的警告天数;

示例1,-l直接查看详细信息,注意,需要使用root权限:

zero@ubuntu:/home$ chage -l test1
chage: Permission denied.
zero@ubuntu:/home$ sudo chage -l test1
Last password change                                    : Sep 08, 2023
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

3.4 使用usermod修改账户信息

参数信息如下:

  • -c  :账号说明内容;
  • -d  :账号家目录;
  • -e  :账号失效日期,格式是 YYYY-MM-DD ;
  • -f  :,0为立刻失效, -1 为永不失效;
  • -g  :接群组名称,用于设定账户的初始群组;
  • -G  :可加入的群组名称,会相应修改 /etc/group 內的相关信息;
  • -a  :与 -G 合用,增加可加入的群组;
  • -l  :修改账号名称;
  • -s  :指定shell,例如 /bin/bash 或 /bin/csh 等等;
  • -u  :修改uid;
  • -L  :锁定账户,使账户无法登录;
  • -U  :解锁账户,使账户可以正常使用。

示例1,将test2的用户名修改为test:

zero@ubuntu:/home$ sudo usermod -l test test2
[sudo] password for zero:
# ...省略部分不必要的数据
test1:x:1001:1001:,,,:/home/test1:/bin/bash
test3:x:1003:1000::/home/test3:/bin/sh
test4:x:998:998::/home/test4:/bin/sh
test:x:1002:1002::/home/test2:/bin/sh

3.5 使用userdel删除用户

使用userdel会直接删除账户的所有相关数据,使用时需谨慎,一般通常是用禁用账号来替代删除账户。

参数:

  • -r:连使用者家目录也一起删除。

示例1,删除test1账户:

zero@ubuntu:/home$ sudo userdel test1
zero@ubuntu:/home$ cat /etc/passwd
# test1账户已删除
test3:x:1003:1000::/home/test3:/bin/sh
test4:x:998:998::/home/test4:/bin/sh
test:x:1002:1002::/home/test2:/bin/sh

四、群组管理

4.1 使用groupadd添加群组

参数如下:

  • -g:指定GID号;
  • -r:建立系统群组;
zero@ubuntu:/$ sudo groupadd test
[sudo] password for zero:
zero@ubuntu:/$ getent group
# 此处省略多余数据
test2:x:1002:
test4:x:998:
test:x:1003:
zero@ubuntu:/$

4.2 使用groupmod修改群组权限

参数如下:

  • -g:修改GID数字;
  • -n:修改群组名称;
# 将群组test更名为Test
zero@ubuntu:/$ sudo groupmod -n Test test
zero@ubuntu:/$ grep Test /etc/group
Test:x:1003:

4.3 使用groupdel删除群组

直接删除群组,会删除响应资料,所以删除需谨慎,需要先修改用户的群组之后再删除。

# 删除Test群组
zero@ubuntu:/$ sudo groupdel Test

4.4 使用gpasswd管理群组管理员

通过gpasswd可以设置某个群组的管理员,然后管理员就可以进行相关的群组管理操作,包括加入,移除等。

4.4.1 设置群组密码

不带任何参数是表示设置群组密码。

# 先创建一个群组
zero@ubuntu:/$ sudo groupdel Test
zero@ubuntu:/$ sudo groupadd test# 然后设置群组的密码,需要使用root权限。
zero@ubuntu:/$ gpasswd test
gpasswd: Permission denied.
zero@ubuntu:/$ sudo gpasswd test
Changing the password for group test
New Password:
Re-enter new password:

4.4.2 通过参数管理群组信息

gpasswd [-A user1,user2,...] [-M user3,user4,....] [-rR] groupname
  • -A:表示将goupname群组的主控权交由后面的使用者管理;
  • -M:表示将某些账户添加到当前群组;
  • -r:移除群组groupname的密码;
  • -R:使群组groupname的密码失效;

4.4.3 通过ad参数添加或删除群组成员

gpasswd [-ad] user groupname
  • -a:将某位使用者加入到群组groupname;
  • -d:将某位成员从群组中移除;

五、使用ACL管理权限

ACL是Access Control List的缩写,主要用来进行权限管理,可以对单一档案或目录进行rwx的权限设置。

5.1 安装ACL

目前大部分linux的CentOS系统都有内置acl,可以先查看下ACL状态。

zero@ubuntu:~$ dpkg -l | grep acl
ii  acl                                   2.3.1-1                                 amd64        access control list - utilities
ii  libacl1:amd64                         2.3.1-1                                 amd64        access control list - shared library

没有安装时会提示错误,可以自行再安装下acl工具。

zero@ubuntu:~$ sudo apt-get install acl
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:acl
0 upgraded, 1 newly installed, 0 to remove and 12 not upgraded.
Need to get 38.5 kB of archives.
After this operation, 205 kB of additional disk space will be used.
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 acl amd64 2.3.1-1 [38.5 kB]
Fetched 38.5 kB in 3s (12.1 kB/s)
Selecting previously unselected package acl.
(Reading database ... 109692 files and directories currently installed.)
Preparing to unpack .../archives/acl_2.3.1-1_amd64.deb ...
Unpacking acl (2.3.1-1) ...
Setting up acl (2.3.1-1) ...
Processing triggers for man-db (2.10.2-1) ...
Scanning processes...
Scanning linux images...Running kernel seems to be up-to-date.No services need to be restarted.No containers need to be restarted.No user sessions are running outdated binaries.No VM guests are running outdated hypervisor (qemu) binaries on this host.

5.2 权限说明含义:

1.文档类型:

  • d:目录
  • -:档案
  • l:连接档
  • b:可供存储的周边设备
  • c:硬件设备,如键盘,鼠标

2.拥有者(owner)权限

3.所属群体(group)权限

4.其他人(other)权限

5.3 使用setfacl设置权限

5.3.1 指令

setfacl [-bkRd] [{-m|-x}] acl参数  目标档案、资料名
  • -m :设定后续acl参数,不可与 -x 合用;
  • -x :刪除后续的 acl 参数,不可与 -m 合用;
  • -b :移除所有的ACL 参数;
  • -k :移除预设的 ACL 参数;
  • -R :巡回设定acl ,亦即包括子目录;
  • -d :设定预设的acl参数!只對目录有效,在该目录新建的档案会引用该参数。
  • 以u:用户:权限组:权限的形式修改档案权限,k

5.3.2 acl参数说明

  • u:用户(user)权限,格式“u:用户名:权限”;
  • g:群组(group)权限,格式“g:群组名:权限”;
  • m:最大权限,即为可设置的最大权限,设定后,超出设定的权限设置会无效,格式“m:权限”;
  • o:其他(other)权限,格式“o:用户名:权限”;

示例,创建一个文件,然后修改权限:

# 首先创建一个账号
zero@ubuntu:~$ touch acl_test# 查询测试文件状态
zero@ubuntu:~$ ll acl_test
-rw-rw-r-- 1 zero zero 0 Sep  9 05:39 acl_test# 修改用户的权限,使用acl修改后,权限会多一个+号,可以使用getfacl识别
zero@ubuntu:~$ setfacl -m u:test:rwx acl_test
zero@ubuntu:~$ ll acl_test
-rw-rwxr--+ 1 zero zero 0 Sep  9 05:39 acl_test*# 修改用拥有者的权限,用户名防空
zero@ubuntu:~$ setfacl -m u::rwx acl_test
zero@ubuntu:~$ ll acl_test
-rwxrwxr--+ 1 zero zero 0 Sep  9 05:39 acl_test*# 修改其他用户权限
zero@ubuntu:~$ setfacl -m o::rwx acl_test
zero@ubuntu:~$ ll acl_test
-rwxrwxrwx+ 1 zero zero 0 Sep  9 05:39 acl_test*

5.4 使用getfacl获取权限

getfacl 档案名

直接获取档案的权限信息。

zero@ubuntu:~$ getfacl acl_test
# file: acl_test         # 文件名
# owner: zero            # 拥有者
# group: zero            # 群组
user::rwx                # 拥有者的权限
user:test:rwx            # test的权限
group::rw-               # 群组的权限
mask::rwx                # 最大权限
other::rwx               # 其他用户的权限

http://www.lryc.cn/news/160510.html

相关文章:

  • 文章预览 安防监控/视频存储/视频汇聚平台EasyCVR播放优化小tips
  • Nand Flash的特性及烧录问题
  • 【React 】useLayoutEffect 和 useEffect的区别
  • oracle数据库常见的优化步骤与脚本
  • 并发内存池(C++)
  • 本地起一个VUE 前端项目
  • Python爬虫:Selenium的介绍及简单示例
  • 每日刷题|回溯法解决全排列问题第二弹之解决字符串、字母大小排列问题
  • python循环遍历字典: title_content_list.append([key, value])print(ti
  • Redis List类型命令 - Set类型命令 - SortedSet类型命令
  • 等级保护 —— 安全控制点,安全要求
  • nginx-缓存
  • layui使用富文本已经使用第三方插件Kz.layedit来优化layui的富文本
  • 某公司二面面试题总结
  • Ubuntu编译运行socket.io
  • h5开发网站-页面内容不够高时,如何定位footer始终位于页面的最底部
  • 手机也可以搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站【cpolar实现公网访问】
  • Support for password authentication was removed on August 13, 2021 解决方案
  • MPP 与 SMP 的区别,终于有人讲明白了【文末送书】
  • 华为OD机试真题【寻找最大价值的矿堆】
  • Java Maven 项目读取项目版本号
  • Lesson4-1:OpenCV图像特征提取与描述---角点特征
  • C++ 基础(一)题目练习
  • Webpack5入门到原理
  • 地形有通挂支隘险远六种情况
  • C++多态案例-设计计算器类
  • 复制tr的一行数据或者复制数据使用,使用jq和php
  • 软件测试的基础(1)
  • 基于Java+SpringBoot+Vue前后端分离库存管理系统设计和实现
  • Secrets in Kubernetes (K8s)