• 欢迎光临~

Linux(2):用户(2)

开发技术 开发技术 2022-12-29 次浏览

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)操作

Linux(2):用户(2)

添加用户: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:

Linux(2):用户(2)

更多详情 还得查看 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目录:失败

Linux(2):用户(2)

注意,这里的 -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目录 的初始文件在 这里。本发布于博客园

Linux(2):用户(2)

 

修改用户:usermod、passwd

修改密码:usermod

可以修改密码,但是,密码需要加密后输入。

usermod --help:

Linux(2):用户(2)

 

疑问:本发布于博客园

Linux支持哪些加密算法呢?密文怎么造呢?TODO

 

修改密码:passwd

passwd 位于 /usr/bin 目录。

passwd --help:

Linux(2):用户(2)

 

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 的密码

Linux(2):用户(2) 

需要使用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 命令等都无法执行。

Linux(2):用户(2)

查看 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

Linux(2):用户(2)

此时建立的 home目录 多了 3个文件:.bash_logout、.bashrc、.profile

此时,切换到 user13 执行 ll命令 没有问题。

Linux(2):用户(2)

 

拷贝上面3个文件到 user12 的 home目录,再看看效果:可以执行 ll 命令了

Linux(2):用户(2)

 

用户的其它修改项

除了 密码,用户的其它项也可以修改(usermod、passwd)。

过期日期、密码过期后无效。

主group、附属groups。

锁定、解锁。

MIN_DAYS、WARN_DAYS、MAX_DAYS 等设置(passwd,参考资料#1)。本发布于博客园

 

MIN_DAYS、WARN_DAYS、MAX_DAYS 示例:

Linux(2):用户(2)

 

删除用户:userdel

userdel --help:

Linux(2):用户(2)

操作比较简单。

 

删除上面创建的 user13:包括其 home目录 和 spool邮件(-r)本发布于博客园

Linux(2):用户(2)

/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 目录下:本发布于博客园

Linux(2):用户(2)

而 passwd 位于 /usr/bin 目录下:

Linux(2):用户(2)

 

用户组(group)操作

Linux(2):用户(2)

添加用户组: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、

 

本发布于博客园

 

程序员灯塔
转载请注明原文链接:Linux(2):用户(2)
喜欢 (0)