Linux(2):用户(2)
Linux ben-u 5.13.0-35-generic #40~20.04.1-Ubuntu SMP
--
序章
前文提到,用户关心信息位于以下文件中:
- /etc/passwd
- /etc/shadow
- /etc/group
- /etc/gshadow
接下来对用户的操作会影响到这些文件的内容。
命令合集
useradd adduser
usermod
passwd
userdel deluser
groupadd
groupmod
groupdel
用户(user)操作
添加用户:useradd、adduser
useradd命令
useradd 是一个 底层的添加用户的命令,而 adduser 是 Debian系统特有的。
$ man useradd
useradd is a low level utility for adding users. On Debian, administrators should usually use adduser(8) instead.
使用 useradd 添加 用户 user12:
$ useradd -s /bin/bash -d /home/user12 user12
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
# 没有权限,添加 sudo 后执行
$ sudo useradd -s /bin/bash -d /home/user12 user12
[sudo] password for ben:
ben@ben-u:~$
ben@ben-u:~$ ls /home/
ben git stservice
# 指定了 home目录为 /home/user12 ,但 没有这个目录
# 可以使用 -m 选项在创建时添加:
-m, --create-home create the user's home directory
useradd --help:
更多详情 还得查看 man页面。
上面的 user12 添加后,用户相关文件的变化:本发布于博客园
# 多了 user12行
ben@ben-u:~$ cat /etc/passwd | grep user12
user12:x:1002:1002::/home/user12:/bin/bash
# 创建时 没有设置密码,此时,第二个字段为 感叹号(!)
ben@ben-u:~$ sudo cat /etc/shadow | grep user12
[sudo] password for ben:
user12:!:19354:0:99999:7:::
# 创建时没有指定用户组,这里多了一个 名为 user12 的组
ben@ben-u:~$ cat /etc/group | grep user12
user12:x:1002:
由于user12 没有密码,此时,无法使用改账号登录。
注意,也没有自动创建 home目录。
测试使用 useradd 给已存在用户添加 密码、创建 home目录:失败
注意,这里的 -p 设置的密码 需要密文,不同的加密方式有不同的密文。像上面的明文 222 是不可以成功的。
adduser命令
使用 adduser --help 查看命令的使用信息。本发布于博客园
下面添加一个 普通用户 user14:
交互式创建用户;
创建了用户、组;
创建了 home目录;
拷贝了 /etc/skel ;
交互过程中,需要输入密码、用户full name等信息;
ben@ben-u:~$ sudo adduser user14
[sudo] password for ben:
Adding user `user14' ...
Adding new group `user14' (1003) ...
Adding new user `user14' (1003) with group `user14' ...
Creating home directory `/home/user14' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
No password supplied
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for user14
Enter the new value, or press ENTER for the default
Full Name []: ben 123
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
ben@ben-u:~$
ben@ben-u:~$ cat /etc/passwd | grep user14
user14:x:1003:1003:ben 123,,,:/home/user14:/bin/bash
ben@ben-u:~$
ben@ben-u:~$ cat /etc/shadow | grep user14
cat: /etc/shadow: Permission denied
ben@ben-u:~$ sudo cat /etc/shadow | grep user14
user14:$6$vZB5YSmWe16ckKyp$PrCsFf8tNGNOaFtR1NhqkcTJ7DjJuoXHXEuCtiFEMo1X/gPCwljnecEAyrsH4ry52Uut5AtW8K37Wn5qQDNNt1:19354:0:99999:7:::
ben@ben-u:~$
ben@ben-u:~$ sudo cat /etc/shadow | grep user1
user12:$6$uR/enewcZhL1opO.$9B/YHvMYzc74ZiOMW2oZUYypBE/fvR6smkpFhyPPioQ/ItzYwAn5vU76xqzjdMIkg6Rf1te6OWwfK/tLMQMdh0:19354:7:14:2:::
user14:$6$vZB5YSmWe16ckKyp$PrCsFf8tNGNOaFtR1NhqkcTJ7DjJuoXHXEuCtiFEMo1X/gPCwljnecEAyrsH4ry52Uut5AtW8K37Wn5qQDNNt1:19354:0:99999:7:::
ben@ben-u:~$
ben@ben-u:~$ sudo cat /etc/group | grep user14
user14:x:1003:
ben@ben-u:~$
ben@ben-u:~$ sudo cat /etc/group | grep user1
user12:x:1002:
user14:x:1003:
ben@ben-u:~$
/etc/skel 是什么?
原来,home目录 的初始文件在 这里。本发布于博客园
修改用户:usermod、passwd
修改密码:usermod
可以修改密码,但是,密码需要加密后输入。
usermod --help:
疑问:本发布于博客园
Linux支持哪些加密算法呢?密文怎么造呢?TODO
修改密码:passwd
passwd 位于 /usr/bin 目录。
passwd --help:
man passwd:本发布于博客园
PASSWD(1)
NAME
passwd - change user password
SYNOPSIS
passwd [options] [LOGIN]
DESCRIPTION
The passwd command changes passwords for user accounts.
A normal user may only change the password for their own account,
while the superuser may change the password for any account.
passwd also changes the account or associated password validity period.
省略更多
执行修改密码:用户 ben 修改用户 user12 的密码
需要使用sudo,输入两次新密码(明文)即可。
现在,user12 拥有密码了,使用它来登录:
ben@ben-u:~$ su user12
Password:
user12@ben-u:/home/ben$ pwd
/home/ben
登录成功。
给用户建立home目录
非常规方式:使用 mkdir、chown 创建 /home/user12 目录(空白目录),并 更改拥有者为 user12(用户和组)。
# ben 用户
cd /home/
sudo mkdir user12
sudo chown user12:user12 user12/
不过,此时的 home目录 user12 里面没有任何内容。本发布于博客园
登录后,连 ll 命令等都无法执行。
查看 PATH 并和 ben用户 的进行对比:
ben@ben-u:/home/user13$ echo $PATH
/home/ben/bin:/usr/lib/scala/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ben@ben-u:/home/user13$ su user12
Password:
user12@ben-u:/home/user13$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ben用户多了 开头的两个 “/home/ben/bin:/usr/lib/scala/bin” 路径——都是后来添加的。本发布于博客园
使用 useradd 命令创建:-m参数
账号 user13:
此时建立的 home目录 多了 3个文件:.bash_logout、.bashrc、.profile。
此时,切换到 user13 执行 ll命令 没有问题。
拷贝上面3个文件到 user12 的 home目录,再看看效果:可以执行 ll 命令了
用户的其它修改项
除了 密码,用户的其它项也可以修改(usermod、passwd)。
过期日期、密码过期后无效。
主group、附属groups。
锁定、解锁。
MIN_DAYS、WARN_DAYS、MAX_DAYS 等设置(passwd,参考资料#1)。本发布于博客园
MIN_DAYS、WARN_DAYS、MAX_DAYS 示例:
删除用户:userdel
userdel --help:
操作比较简单。
删除上面创建的 user13:包括其 home目录 和 spool邮件(-r)本发布于博客园
/home/user13 也已经被删除,用户组(user13)也被删除。
userdel 的 -f 选项会导致一些异常,尽量不使用它。下面的 man页的信息:
-f, --force
This option forces the removal of the user account, even if the user is still logged in.
It also forces userdel to remove the user's home directory and mail spool, even if another
user uses the same home directory or if the mail spool is not owned by the specified user.
If USERGROUPS_ENAB is defined to yes in /etc/login.defs and if a group exists with the same
name as the deleted user, then this group will be removed, even if it is still the primary
group of another user.
Note: This option is dangerous and may leave your system in an inconsistent state.
注,userdel 是底层的命令,在 Debian 系统中,提供了一个 deluser 的命令。
小结(1)
以上命令,除了 passwd外,都在 /usr/sbin 目录下:本发布于博客园
而 passwd 位于 /usr/bin 目录下:
用户组(group)操作
添加用户组:groupadd
groupadd --help:
Usage: groupadd [options] GROUP
Options:
-f, --force exit successfully if the group already exists,
and cancel -g if the GID is already used
-g, --gid GID use GID for the new group
-h, --help display this help message and exit
-K, --key KEY=VALUE override /etc/login.defs defaults
-o, --non-unique allow to create groups with duplicate
(non-unique) GID
-p, --password PASSWORD use this encrypted password for the new group
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
-P, --prefix PREFIX_DIR directory prefix
--extrausers Use the extra users database
添加时可以:设置gid,设置 /etc/login.defs 中的 键的值,设置密码,建立系统账号等。本发布于博客园
示例:新建组 g1
$ sudo groupadd g1
[sudo] password for ben:
# 创建成功
ben@ben-u:~$ cat /etc/group | grep g1
g1:x:1004:
修改用户组:groupmod
groupmod - -help:本发布于博客园
Usage: groupmod [options] GROUP
Options:
-g, --gid GID change the group ID to GID
-h, --help display this help message and exit
-n, --new-name NEW_GROUP change the name to NEW_GROUP
-o, --non-unique allow to use a duplicate (non-unique) GID
-p, --password PASSWORD change the password to this (encrypted)
PASSWORD
-R, --root CHROOT_DIR directory to chroot into
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
修改组名:g1 改为 g1x
ben@ben-u:~$ sudo groupmod -n g1x g1
ben@ben-u:~$
ben@ben-u:~$ cat /etc/group | grep g1
g1x:x:1004:
删除用户组:groupdel
groupdel --help:
Usage: groupdel [options] GROUP
Options:
-h, --help display this help message and exit
-R, --root CHROOT_DIR directory to chroot into
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-f, --force delete group even if it is the primary group of a user
--extrausers Use the extra users database
示例:删除上面的 组 g1x
ben@ben-u:~$ sudo groupdel g1x
ben@ben-u:~$ cat /etc/group | grep g1
ben@ben-u:~$
示例:删除 存在用户 的 作为 主用户组的 user12。删除失败。本发布于博客园
$ sudo groupdel user12
groupdel: cannot remove the primary group of user 'user12'
当然,加了 -f 参数 是可以删除的,但会造成系统混乱。
小结(2)
疑问:
用户组也可以有密码?密码用来做什么呢?newgrp(log in to a new group)有什么用呢?(参考资料#3 此功能因为 sudo等工具的开发,已过时)
用户的 主组、附件组 分别有什么用呢?
Linux中的资源(文件)是怎么和用户组建立关系的呢?本发布
于博客园
除了group开头的3个命令,还可以使用 addgroup、delgroup 操作用户组,两者是符号链接,分别指向 adduser、deluser。
本文链接:
https://www.cnblogs.com/luo630/p/16997577.html
参考资料
1、passwd (用于更改用户帐户的密码)
https://www.uc23.net/command/363.html
2、Linux 用户和用户组管理
https://www.runoob.com/linux/linux-user-manage.html
3、linux中什么是组密码
https://www.php.cn/linux-493486.html
4、
本发布于博客园