Linux User 管理

关于用户

Linux账号管理需要涉及到两个文件/etc/passwd和/etc/shadow,早期的Unix系统的密码是放在/etc/passwd这个文件上面的,但由于该文件的特性是所有程序都能够读取,这样一来很容易造成密码数据被窃取,所以才把密码放在/etc/shadow这个文件上,所以在/etc/passwd文件里面的密码字段就只有一个X。

与用户管理相关的指令有:useradd、passwd、usermod、userdel

useradd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@www ~]# useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM]\
> [-c 说明栏] [-d 家目录的绝对路径] [-s shell] 使用者账号名

选项不参数:
-u :后面接的是 UID ,是一组数字。直接指定一个特定的UID 给这个账号;
-g :后面接的那个组名就是我们上面提到的 initial group 啦~ 该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的组名则是这个账号还可以加入的群组。 这个选项与参数会修改 /etc/group 内的相关资料喔!
-M :强制!不要建立用户家目录!(系统账号默认值)
-m :强制!要建立用户家目录!(一般账号默认值)
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设定啦~
-d :指定某个目录成为家目录,而不要使用默认值。务必使用绝对路径!
-r :建立一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs) -s :后面接一个 shell ,若没有指定则预设是 /bin/bash的啦~
-e :后面接一个日期,格式为『YYYY-MM-DD』此项目可写入 shadow 第八字段, 亦即账号失效日的设定项目啰;
-f :后面接 shadow 的第七字段项目,指定密码是否会失效。0为立刻失效, -1 为永远不失效(密码只会过期而强制登入时重新设定而已。)

范例一:完全参考默认值建立一个用户,名称为 vbird1
[root@www ~]# useradd vbird1
[root@www ~]# ll -d /home/vbird1
drwx------ 4 vbird1 vbird1 4096 Feb 25 09:38 /home/vbird1
# 默认会建立用户家目录,且权限为 700 !这是重点!
[root@www ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird1:x:504:505::/home/vbird1:/bin/bash
/etc/shadow:vbird1:!!:14300:0:99999:7:::
/etc/group:vbird1:x:505: <==预设会建立一个与账号一模一样的群组名

执行该命令后,系统会帮我们处理几个动作:

  • 在/etc/passwd中建立一行与账号相关的数据

  • 在/etc/shadow文件里面将此账号的密码相关数据写进去,但是此时的密码字段为空

  • 在/etc/group文件里面新建一行与账号名称一样的群组信息

  • 在/home底下建立一个与账号一样的目录为用户的家目录(该动作不一定会执行,如果建立的是系统用户或是参数中限制不创建用户目录的话将不执行),且权限为700。
  • 执行useradd后,一般都会接着执行passwd命令来设置刚创建的用户的密码。

    passwd命令参数:


    在执行passwd的时候,一般用户会要求输入旧的密码,而对于root用户来说,在修改其他用户或是自己用户的密码时,不需要输入旧密码,只需要直接输入新密码就可以了!

    usermod

    我们可以通过usermod来修改用户的相关数据,当然也可以直接修改/etc/passwd、/etc/shadow、/etc/group三个文件。

    userdel

    userdel用来删除用户,与用户相关的数据有:

  • 用户账号密码相关参数:/etc/passwd, /etc/shadow

  • 使用者相关群组数据:/etc/group, /etc/gshadow

  • 用户个人数据:/home/username, /var/spool/mail/username …
  • 整个指令的用法很简单:

    其实用户在系统上用过一阵时间后,会在系统的其他地方留下用户的其他文件,所以,如果想要完整的删除用户的所有数据,在执行userdel -r username之前,最好先执行find / -user username查出系统的属于username的档案,然后再加以删除!

    useradd、usermod、userdel这三个命令只有root才可以执行,那么一般用户要怎样修改自己的个人账号信息呢,可以有以下的命令来执行:

    finger

    finger 的中文字面意义是:『手指』或者是『指纹』的意思。这个 finger 可以查阅很多用户相的信息喔! 大部分都是在 /etc/passwd 这个档案里面的信息啦!我们就先来检查检查用户信息吧!

    由于finger类似于指纹功能,他会将用户的相关属性列出来!如上表所示,其实他列出来的几乎都是 /etc/passwd 档案里面的东西。列出的信息说明如下:

  • Login:为使用者账号,亦即 /etc/passwd 内的第一字段;

  • Name:为全名,亦即 /etc/passwd 内的第五字段(也称为批注);

  • Directory:就是家目录了;

  • Shell:就是使用的 Shell 档案所在;

  • Never logged in.:figner 还会调查用户登入主机的情况喔!

  • No mail.:调查 /var/spool/mail 当中的信箱资料;

  • No Plan.:调查 ~vbird1/.plan 档案,并将该档案取出来说明!
  • chfn

    chfn 有点像是: change finger 的意思!这玩意的使用方法如下:

    这个指令说实在的,除非是你的主机有很多的用户,否则倒真是用不着这个程序!这就有点像是 bbs里头更改你『个人属性』的那一个资料啦!不过还是可以自己玩一玩!尤其是用来提醒自己相关资料啦!

    chsh

    这就是 change shell 的简写!使用方法就更简单了!

    不论是 chfn 与 chsh ,都是能够让一般用户修改 /etc/passwd 这个系统文件的!所以你猜猜,这两个档案的权限是什么? 一定是 SUID 的功能啦!