本文记录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
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
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
id userid
查找指定用户的详细信息内容,如ID,分组。
ubuntu@ubuntu:~$ id root
uid=0(root) gid=0(root) groups=0(root)
who
ubuntu@ubuntu:~$ who
ubuntu pts/0 2023-08-15 08:36 (IP地址)
ubuntu pts/1 2023-08-15 08:52 (IP地址)
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
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
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 default
Full 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)
useradd用户是最基础也是最灵活的创建用户的指令,默认情况下会创建一个没有家目录、没有权限组,没有shell版本的用户,需要用户根据需要自行增补。
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:!::
passwd的参数信息:
zero@ubuntu:/home$ sudo passwd test1 # 使用root权限修改指定用户密码
[sudo] password for zero:
New password:
Retype new password:
passwd: password updated successfully
zero@ubuntu:/home$ passwd # 不加任何参数,为修改当前自身密码
Changing password for zero.
Current password:
New password:
Retype new password:
The password has not been changed.
参数列表:
示例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
参数信息如下:
示例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
使用userdel会直接删除账户的所有相关数据,使用时需谨慎,一般通常是用禁用账号来替代删除账户。
参数:
示例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
参数如下:
zero@ubuntu:/$ sudo groupadd test
[sudo] password for zero:
zero@ubuntu:/$ getent group
# 此处省略多余数据
test2:x:1002:
test4:x:998:
test:x:1003:
zero@ubuntu:/$
参数如下:
# 将群组test更名为Test
zero@ubuntu:/$ sudo groupmod -n Test test
zero@ubuntu:/$ grep Test /etc/group
Test:x:1003:
直接删除群组,会删除响应资料,所以删除需谨慎,需要先修改用户的群组之后再删除。
# 删除Test群组
zero@ubuntu:/$ sudo groupdel Test
通过gpasswd可以设置某个群组的管理员,然后管理员就可以进行相关的群组管理操作,包括加入,移除等。
不带任何参数是表示设置群组密码。
# 先创建一个群组
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:
gpasswd [-A user1,user2,...] [-M user3,user4,....] [-rR] groupname
gpasswd [-ad] user groupname
ACL是Access Control List的缩写,主要用来进行权限管理,可以对单一档案或目录进行rwx的权限设置。
目前大部分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.
1.文档类型:
2.拥有者(owner)权限
3.所属群体(group)权限
4.其他人(other)权限
setfacl [-bkRd] [{-m|-x}] acl参数 目标档案、资料名
示例,创建一个文件,然后修改权限:
# 首先创建一个账号
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*
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 # 其他用户的权限
sudo chown -R 目标用户 目标文件、文件夹路径
# 修改git_user的家目录拥有着为git_user,-R表示递归修改子目录
zero@ubuntu:/$ sudo chown -R git_user /home/git_user
[sudo] password for zero:
zero@ubuntu:/$ getfacl /home/git_user
getfacl: Removing leading '/' from absolute path names
# file: home/git_user
# owner: git_user
# group: root
user::rwx
group::r-x
other::r-x
sudo chgrp 目标群组 目标路径
# 修改/home/git_user的拥有群组为git
zero@ubuntu:/$ sudo chgrp git /home/git_user
zero@ubuntu:/$ getfacl /home/git_user
getfacl: Removing leading '/' from absolute path names
# file: home/git_user
# owner: git_user
# group: git
user::rwx
group::r-x
other::r-x