Bonky
Neither believe nor reject anything, because any other person has rejected or believed it. Heaven has given you a mind for judging truth and error, Use it.
By Thomas Jefferson

Linux 之账号管理 – 基本管理

账号和群组

UID 和 GID

注意!注意!注意!UID 不能乱改~ 如果你修改了自己的 UID,但是文件的权限仍然记录的是你以前的 UID,所以你无法访问你拥有的文件。但不过,我们也可以明白修改自己的用户名是完全OK的~

系统的登录流程

  1. 先找寻 /etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的 UID 与 GID (在 /etc/group 中) 读出来,另外,该账号的家目录与 shell 设定也一并读出;
  2. 再来则是核对密码表啦!这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的密码与里头的密码是否相符?
  3. 如果一切都 OK 的话,就成功进入 Shell

账号

/etc/passwd 文件

我们可以发现,每个属性项由分号隔开,第一个是账号的名称,第二个是密码,但是因为这个文件所有的程序都能够读取,这样一来很容易造成密码被窃取, 因此后来就将这个字段的密码数据给他改放到 /etc/shadow 中了。所以这里只有一个 x 。

第三个是 UID,一般来说 UID 有以下限制:

image-20200119122139247

第四个是 GID,群组的更多信息可以在 /etc/group 找到。第五个是用户信息说明栏,用来解释当前用户的作用。可以通过 chfn 修改,主要是表示当前用户的一些个人信息:

然后我们可以利用 finger 指令查询一些其他用户的一些信息:

然后第六个是家目录,第七个是指定的用户的 shell,然后有个东西我们需要注意,那就是 /sbin/nologin

/sbin/nologin 文件

一般来说系统账号的shell使用 /sbin/nologin,此时无法登陆系统,即使给了密码也不行。

无法登陆指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。比如 www 服务器有 apache 这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。

另外,如果我想要让某个具有 /sbin/nologin 的用户知道,他们不能登陆主机时,可以新建 /etc/nologin.txt 这个文件,在文件内面写上不能登陆的原因,当用户登录时,屏幕上就会出现这个文件里面的内容。

/etc/shadow 文件

以前其实所有的密码账号也都是保存在/etc/passwd 中的,但是因为 /etc/passwd 的权限是 644 所以说任何程序都可以读取(为什么不把他权限设置为 000 是因为整个系统的文件的权限控制都要用到 /etc/passwd 所以必须要给读),所以把密码分开到 /etc/shadow 中,/etc/shadow 的权限是000。文件内容是下面这样子的:

第一栏是账号名称,需要与 /etc/passwd 相同。第二个显然是密码,一般是通过 SHA 加密。第三个是最近修改密码的日期,16559 代表从 1970.1.1 来的累计日期。

第四个字段是密码不可改动的天数。第五个字段是密码需要重新变更的天数。第六个是变更前的警告天数。(剩下的自行查表)

群组

/etc/group 文件

第一个记录的是组名。第二个记录的是群组管理员的密码(好像没什么用)。第三个是GID。第四个是组的成员,如果需要加入组的话,直接在后面加入账号名称即可(如:root,bonky ),注意不能有空格,然后逗号隔开。可以让用户加入多个群组。

有效群组和初始群组

每个用户在 /etc/passwd 里面的第四栏的 GID 就是所谓的初始群组 (initial group)。(在刚开始登录的时候初始组就是有效群组)。创建文件或者目录取决于有效群组,我们可以通过 newgrp 临时修改有效群组(登录出失效):

image-20200119133403092

查看有效群组的一个方法是利用 groups 指令,它会列出用户所有的群组,第一个就是有效群组。

管理工具

用户管理

这里基本上都是系统管理员才可使用的指令:

添加用户 useradd

默认值可以通过 -D 选项查看:

我们可以注意到,上面有一个目录 /etc/skel,这个是 home 目录的模板文件,当创建一个新的用户时候,默认会拷贝下面 /etc/skel 下的文件到用户的 home 下:

其中更多的信息我们可以查看 /etc/login.defs

注意,创建完成后我们一定要使用 passwd 添加密码~

修改密码 passwd

注意 passwd 是改变自己的密码,passwd 用户名是改变别人的密码。有个好用的选项是 –stdin,可以不要再重新手动输入了(方便与写脚本)。

修改密码信息 chage

输入 chage 指令会进入一个交互界面,然后你可以根据提示进行密码信息的修改:

然后利用 chage -l 用户名,我们可以查看设置的密码信息。我们还可以利用 chage 让用户在第一次登录时, 强制修改密码。

修改用户信息 usermod

基本上和 useradd 参数的含义差不多,唯一要注意两个参数:

  • -L:暂时冻结用户,让其无法登录(Lock)
  • -U:解冻用户。(Unlock)

删除用户 userdel

用户功能

这些功能普通用户也可以使用

pwck 检查创建的账号是否有错误

主要检查 /etc/passwd 的信息,然后与 /etc/shadow 比对

根据用户名查看信息 id

其他有用的指令

  • chsh:改变默认终端
  • fingerchfn :查询和修改用户详细信息

群组管理

添加群组 groupadd

修改群组 groupmod

删除群组 groupdel

群组管理员功能 gpasswd

系统管理员 (root) 可以做的操作如下:

组管理员可以进行的操作如下:

一个简单的例子

有三个用户 pro1, pro2, pro3,我想要让这三个用户在同一个目录底下工作, 但这三个用户还是拥有自己的家目录与基本的私有群组。思路如下

  1. 先建立三个公共的群组
  2. 创建用户(如果已创建可以利用 gpasswd -a 或者 usermod -G 加入到某个群组)
  3. 设置目录的所拥有的群组和权限(一般770)

下面是具体代码:

外部身份认证

就是不同主机能够使用同一套账号密码(有点类似于第三方账号登录),一般来说会使用到 LDAP, NIS 等服务器提供的身份验证。

CentOS 提供了 authconfig-tui 指令进行配置:

image-20200119145816650

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注