账号管理
用户ID与群组ID
Linux并不认识账号名称,它认识的其实是账号ID。即Linux只认识代表身份的号码,而对应的号码与账号则是记录在/etc/passwd中。
登入Linux主机
在输入账号与密码之后,Linux会:
①先查找/etc/passwd中是否有这个账号,如果没有则跳出,如果有则将该账号对应的UID(User ID)与GID(Group ID)读出来。另外,该账号的根目录与shell设定也一并读出。
②然后核对密码表。这时Linux会进入/etc/shadow中找出对应的账号与UID,然后核对您刚刚输入的密码与其密码是否相符。
③一切妥当之后,进入Shell。
UID、GID、SUID 与SGID
每个文件都会有所谓的拥有者ID与拥有群组ID,亦即UID与GID,然后系统依据/etc/passwd的内容,将该文件的拥有者与群组名称、使用账号的形式显示出来; UID为0时,就是root。
/etc/passwd 文件:在这个文件中,每一行代表一个账号,有几行就代表在您的系统中有几个账号。
/etc/shadow 文件:存放账号对应的密码。
/etc/group:这个文件可以让您直接将账号所要支持的群组加进来。
/etc/gshadow:存放群组密码。
增加用户的一般步骤
添加群组:groupadd
[root @test /root ]# groupadd [-g GID]groupname
-g GID:自行设定GID的大小
[root @test /root]# groupadd -g 55testing <==设定一个群组,GID为55
也可以直接修改/etc/group与/etc/gshadow这两个文件,根本不需要使用这个指令,使用vi修改上面两个文件更简单。如果要新增的用户所在群组并不存在于系统中,那么在增加用户账号之前,必须先新增群组。
删除群组:groupdel
[root @test /root ]# groupdel groupname
[root @test /root]# groupdel testing
在删除群组之前,请先将该群组的Primary用户删除。Primary就是/etc/passwd中其GID设定为这个群组的GID
的用户。
添加用户:useradd
[root @test /root ]# useradd [-u UID] [-gGID] [-d HOME] [-mM] [-s shell] username
-u :直接给出一个UID
-g :直接给出一个GID(此GID必须已经存在于/etc/group中)
-d :直接将其根目录指向已经存在的目录(系统不会再建立)
-M :不建立根目录
-s :定义其使用的shell
[root @test /root]# useradd testing
直接以默认数据建立一个名为testing的账号
[root @test /root]# useradd -u 720 -g 100-M -s /bin/bash testing
以自己的设定建立账号
删除用户:userdel
[root @test /root ]# userdel [-r] username
-r :将该账号的[home directory]与[/var/spool/mail/username]一并删除
[root @test /root]# userdel testing
只删除/etc/passwd与/etc/shadow中该账号的内容
[root @test /root]# userdel -r testing
连同该账号的/home/testing与/var/spool/mail/testing一起删除
chsh
[root @test /root ]# chsh [-l] [-sshellname]
-l :列出当前机器上能用的shell名称
-s :将当前的shell变为shellname
[test @test /root]# chsh -l <==列出本机上所有能用的shell名称
/bin/sh
/bin/bash
/bin/ash
/bin/bsh
/bin/csh
[test @test /root]# chsh -s /bin/csh <==test用户自行改变自己的默认shell
密码管理与设定:passwd
root可以设定任何样式的密码,而且,root可以帮助user设定他们的密码,而user仅能修改自己的密码。修改密码使用passwd这个命令。passwd必须具有SUID才能让一般用户修改其密码。
[root @test /root]# passwd [username]
[test @test /root]# passwd <==一般用户自行修改密码
[root @test /root]# passwd test <==root帮助修改密码
Changing password for user test
New password: <==输入密码
BAD PASSWORD: it is based on a dictionaryword
Retype new password: <==再次输入
passwd: all authentication tokens updated successfully
用户身份切换
将一般用户变成root:
①以su直接将身份变成root。这个指令需要root的密码,也就是说,如果您要以su变成root,您的一般用户必须有root的密码。
[root@test /root ]# su
[test@testtest]$ su
Password:<==输入root的密码
[root@testtest]# <==身份变成root
虽然您已经是root,但是您的环境还是属于当初登入的那个用户。例如,我以test登入Linux,再以su切换身份成为root,但是我的mail,PATH及其他相关的环境变量,都还是test这个身份的。单纯使用su变换成root身份,最大的好处是可以直接输入我们惯用的指令
②如果多人同时管理一台主机,那么,root的密码就有很多人知道了,这样不好。所以,不想将root的密码透露出去,可以使用sudo。
[root@test /root ]# sudo[-u username] [command]
-u :将身份变成username的身份
[test@test test]$ sudo mkdir /root/testing
Password:<==输入test的密码
[root@testtest]# sudo -u test touch test
root可以执行test用户的指令,建立test的文件
不需要root的密码仍可以执行root的工具,这时就可以使用sudo。由于执行root身份的工作时,输入的密码是用户的密码,而不是root的密码,所以可以减少root密码外泄的可能性。
用户查询
可以直接到/etc/passwd及/etc/group中查看,但还有更简单的方法,就是使用简单的指令工具:
①id 查询用户的UID,GID及所拥有的群组;
[root@test root]# id [username]
[root @test root]# id
uid=0(root)gid=0(root) groups=0(root)
[root@test root]# id test
uid=501(test)gid=501(test) groups=501(test)
②groups 查询用户能够支持的群组:直接输入groups就可以显示当前用户所属的群组,Primary与其他相关群组都会显示出来。
③finger 查询用户的一些相关信息,如电话号码等。
[root@test root]# finger [-s] username
-s :完整列出