Linux基础--用户和组管理

1、账号管理相关文件 
1)/etc/passwd 
   每一行都代表一个账号,有几行就代表有几个账号在你的系统中,不过需要特别留意的是,里头很多账号本来就是系统中必须要的,我们可以简称他为系统账号, 例如bin,daemon,adm,nobody等等,这些账号是系统正常运作时所需要的,请不要随意的杀掉他。 
如: 
root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin:/sbin/nologin 
daemon:x:2:2:daemon:/sbin:/sbin/nologin 
adm:x:3:4:adm:/var/adm:/sbin/nologin 
第1列:账号名称 
第2列:密码 
第3列:UID(0:这个账号是系统管理;1~499:保留给系统使用的ID;500~65535:给一般使用者用的) 
第4列:GID(与/etc/group有关) 
第5列:使用者信息说明栏 
第6列:家目录 
第7列:Shell(/sbin/nologin 账号无法登入)

 

2)/etc/shadow 
如: 
root:$1$i9Ejldjfjio389u9sjl$jljsoi45QE/:12959:0:99999:7::: 
bin:*:12959:0:99999:7::: 
daemon:*:12959:0:99999:7::: 
adm:*:12959:0:99999:7::: 
第1列:账号名称(与/etc/passwd 相同) 
第2列:密码(这个才是真正的密码,而且是经过编码过的密码,如果是在密码栏的第一个字符为『 * 』或者是『 ! 』,表示这个账号并不会被用来登入的意思) 
第3列:最近更动密码的日期 
第4列:密码不可被更动的天数 
第5列:密码需要重新变更的天数 
第6列:密码需要变更期限前的警告期限 
第7列:密码过期的恕限时间 
第8列:账号失效日期 
第9列:保留

 

3)/etc/group 
   这个档案就是在记录GID与群组名称的对应了 
如: 
root:x:0:root 
bin:x:1:root,bin,daemon 
daemon:x:2:root,bin,daemon 
sys:x:3:root,bin,adm 
第1列:群组名称 
第2列:群组密码(通常不需要设定,因为很少使用到群组登入, 不过,同样的,密码也是被纪录在/etc/gshadow当中) 
第3列:GID 
第4列:支持的账号名称(一个使用者是可以加入多个群组的。举例来说,如果我想要让dmtsai也加入root这个群组,那么在第一行的最后面加『,dmtsai』,注意不要有空格,使成为『 root:x:0:root,dmtsai』就可以)

 

4)/etc/gshadow 
如: 
root:::root 
bin:::root,bin,daemon 
daemon:::root,bin,daemon 
sys:::root,bin,adm 
第1列:群组名称 
第2列:密码栏,同样的,开头为!表示无法登入; 
第3列:群组管理员的账号 
第4列:该群组的所属账号(与/etc/group内容相同)


2、新增与移除使用者  
1)useradd 
[root@linux ~]# useradd [-u UID] [-g initial_group] [-G other_group] -[Mm] [-c 说明栏] [-d home] [-s shell] username 
参数: 
-u:后面接的是UID是一组数字。直接指定一个特定的UID给这个账号; 
-g:后面接的那个群组名称就是我们上面提到的 initial group, 该group ID(GID)会被放置到/etc/passwd的第四个字段内。 
-G:后面接的群组名称则是这个账号还可以支持的群组。这个参数会修改/etc/group内的相关资料。 
-M:强制!不要建立使用者家目录。 
-m:强制!要建立使用者家目录! 
-c:这个就是/etc/passwd 的第五栏的说明内容啦~可以随便我们设定的。 
-d:指定某个目录成为家目录,而不要使用默认值。 
-r:建立一个系统的账号,这个账号的UID会有限制(/etc/login.defs)。 
-s:后面接一个shell ,预设是/bin/bash的。

范例一:完全参考默认值建立一个使用者,名称为vbird1 
[root@linux ~]# useradd vbird1 
[root@linux ~]# ls -l /home 
drwxr-xr-x 3 vbird1 vbird1 4096 Aug 30 17:33 vbird1 
[root@linux ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group 
/etc/passwd:vbird1:x:502:502::/home/vbird1:/bin/bash 
/etc/shadow:vbird1:!!:13025:0:99999:7::: 
/etc/group:vbird1:x:502: 
   做这个范例只是想要让您了解,其实系统已经规范好了一些新增使用者时的参数了,因此,当我们使用 useradd 时,系统会主动的去修改/etc/passwd与/etc/shadow,而这两个档案内的相关字段参考值,则会以一些设定档的内容来规范。同时也要注意到,使用useradd新增使用者时,这个使用者的/etc/shadow密码栏会是不可登入的 (以 !! 为开头),因此还需要使用passwd来给予vbird1密码后,才算新增完毕!

范例二:系统当中有个群组名称为users,且UID700并不存在,请用这两个参数给予vbird2建立一个账号 
[root@linux ~]# useradd -u 700 -g users vbird2 
[root@linux ~]# ls -l /home 
drwxr-xr-x 3 vbird2 users 4096 Aug 30 17:43 vbird2 
[root@linux ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group 
/etc/passwd:vbird2:x:700:100::/home/vbird2:/bin/bash 
/etc/shadow:vbird2:!!:13025:0:99999:7:::

范例三:建立一个系统账号名称为vbird3 
[root@linux ~]# usradd -r vbird3 
[root@linux ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group 
/etc/passwd:vbird3:x:101:102::/home/vbird3:/bin/bash 
/etc/shadow:vbird3:!!:13025:::::: 
/etc/group:vbird3:x:102:

  useradd这支程序在建立Linux上的账号时,至少会参考:/etc/default/useradd;/etc/login.defs;/etc/skel/* 。至少可能会更动到的地方有:/etc/passwd; /etc/shadow;/etc/group;/etc/gshadow;/home/username


2)passwd 
[root@linux ~]# passwd [useraccount] 
范例一:如果root要帮dmtsai修改密码 
[root@linux ~]# passwd dmtsai 
Changing password for user dmtsai. 
New UNIX password:    <==这里直接输入新的密码,屏幕不会有任何反应 
BAD PASSWORD: it is based on a dictionary word    <==密码太简单时的错误 
Retype new UNIX password:    <==再输入一次同样的密码 
passwd: all authentication tokens updated successfully.   <==竟然还是成功修改了

范例二: dmtsai这个使用者想要修改自己的密码时 
[dmtsai@linux ~]$ passwd 
Changing password for user dmtsai. 
Changing password for dmtsai 
(current) UNIX password:    <==这里输入『原有的旧密码』 
New password:    <==这里输入新密码 
BAD PASSWORD: it is based on your username    <==密码的规范是很严格的 
New password: 
BAD PASSWORD: it is based on your username 
New password: 
BAD PASSWORD: it is based on a dictionary word 
passwd: Authentication token manipulation error

 

3)usermod 
[root@linux ~]# usermod [-cdegGlsuLU] username 
参数: 
-c:后面接账号的说明,即/etc/passwd第五栏的说明栏,可以加入一些账号的说明 
-d:后面接账号的家目录,即修改/etc/passwd的第六栏 
-e:后面接日期,格式是YYYY-MM-DD也就是在/etc/shadow内的第八个字段数据 
-g:后面接group name,修改/etc/passwd的第四个字段,亦即是GID的字段 
-G:后面接group name,修改这个使用者能够支持的群组,修改的是/etc/group 
-l:后面接账号名称。亦即是修改账号名称,/etc/passwd的第一栏 
-s:后面接Shell 的实际档案,例如/bin/bash或/bin/csh等等 
-u:后面接UID数字即/etc/passwd第三栏的资料 
-L:暂时将使用者的密码冻结,让他无法登入。其实仅改/etc/shadow的密码栏 
-U:将/etc/shadow密码栏的!拿掉,解冻

范例一:修改使用者dmtsai的说明栏,加上『VBird‘s test』的说明 
[root@linux ~]# usermod -c "VBird‘s test" dmtsai 
[root@linux ~]# grep dmtsai /etc/passwd 
dmtsai:x:501:501:VBird‘s test:/home/dmtsai:/bin/bash

范例二:使用者dmtsai密码在2006/01/01失效 
[root@linux ~]# usermod -e "2006-01-01" dmtsai 
[root@linux ~]# grep dmtsai /etc/shadow 
dmtsai:$1$24ISJM4K$bbdijdreoieaVaBMAHsm6.:13026:0:99999:7::13149:

范例三:暂时冻结dmtsai的密码 
[root@linux ~]# usermod -L dmtsai 
[root@linux ~]# grep dmtsai /etc/shadow 
dmtsai:!$1$24ISJM4K$bbdijdreoieaVaBMAHsm6.:13026:0:99999:7::13149: 
[root@linux ~]# usermod -U dmtsai    <==这样就解开了

范例四:万一dmtsai这个家伙被建立时忘记建立家目录,该如何是好? 
[root@linux ~]# usermod -d /home/dmtsai2 -m dmtsai 
   如果仅是-d /home/dmtsai2表示仅修改/etc/passwd第六栏的内容而已,如果加上-m参数,则表示新建一个家目录的意思。另外,如果原本的家目录是/home/dmtsai ,那-d /home/dmtsai2 -m会将原本的/home/dmtsai更名为/home/dmtsai2。

 

4)userdel 
   删除使用者~与他相关的档案有:/etc/passwd;/etc/shadow;/home/username 
整个指令的语法是: 
[root@linux ~]# userdel [-r] username 
参数: 
-r:连同使用者的家目录也一起删除 
范例一:删除vbird2,连同家目录一起删除 
[root@linux ~]# userdel -r vbird2


3、一般身份使用者常用的账号变更命令 
1)chsh 
[dmtsai@linux ~]$ chsh [-ls] 
参数: 
-l:列出目前系统上面可用的shell,其实就是/etc/shells的内容 
-s:设定修改自己的Shell 
范例一:列出目前系统上面所以的shell,并且指定csh为自己的shell 
[dmtsai@linux ~]$ chsh -l 
/bin/sh 
/bin/bash 
/sbin/nologin 
/bin/ksh 
/bin/tcsh 
/bin/csh 
/bin/zsh 
[dmtsai@linux ~]$ chsh -s /bin/csh; grep dmtsai /etc/passwd 
Password: <==为了防止账号被乱搞~所以需要输入 dmtsai 的密码确认! 
Shell changed. 
dmtsai:x:501:501::/home/dmtsai:/bin/csh

 

2)chfn 
[root@linux ~]# chfn [-foph] 
参数: 
-f:后面接完整的大名; 
-o:您办公室的房间号码; 
-p:办公室的电话号码; 
-h:家里的电话号码。 
范例一:用dmtsai这个使用者来更改一下自己的相关信息 
[dmtsai@linux ~]$ chfn 
Changing finger information for dmtsai. 
Password: <==为了防止账号被乱搞~所以需要输入 dmtsai 的密码确认! 
Name []: VBird‘ Test account 
Office []: Tainan office 1 
Office Phone []: 06-1234567 
Home Phone []: 06-7654321 
Finger information changed. 
[dmtsai@linux ~]$ grep dmtsai /etc/passwd 
dmtsai:x:501:501:VBird‘ Test account,Tainan office 1,06-1234567,06-7654321: 
/home/dmtsai:/bin/bash

 

3)finger 
[root@linux ~]# finger [-s] username 
参数: 
-s:使用长串数据输出格式。  
范例一:将刚刚dmtsai建立的一些使用者信息呼叫出来视察 
[root@linux ~]# finger dmtsai 
Login: dmtsai Name: VBird‘s Test account 
Directory: /home/dmtsai Shell: /bin/bash 
Office: Tainan office 1, 06-1234567 Home Phone: 06-7654321 
Last login Tue Aug 30 15:01 (CST) on tty1 from localhost 
No mail. 
No Plan.

 

4)id 
  id这个指令则可以查询某人或自己的相关UID/GID等等的信息,他的参数也不少,不过,都不需要记~反正使用id就全部都列出 
[root@linux ~]# id [username] 
范例一:查阅自己的相关信息 
[root@linux ~]# id 
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),10(wheel)

范例二:查阅一下dmtsai 
[root@linux ~]# id dmtsai 
uid=501(dmtsai) gid=501(dmtsai) groups=501(dmtsai),100(users)


4、新增与移除群组 
基本上,群组的内容都与这两个档案有关:/etc/group;/etc/gshadow 
1)groupadd 
[root@linux ~]# groupadd [-g gid] [-r] 
参数: 
-g:后面接某个特定的GID,用来直接给予某个GID 
-r:建立系统群组,与/etc/login.defs内的GID_MIN有关 
范例一:新建一个群组,名称为group1 
[root@linux ~]# groupadd group1 
[root@linux ~]# grep group1 /etc/group /etc/gshadow 
/etc/group:group1:x:502: 
/etc/gshadow:group1:!::

范例二:新建一个系统群组,名称为group2 
[root@linux ~]# groupadd -r group2 
[root@linux ~]# grep group2 /etc/group /etc/gshadow 
/etc/group:group2:x:101: 
/etc/gshadow:group2:!::

 

2)groupmod 
   跟usermod类似的,这个指令仅是在进行group相关参数的修改而已。 
[root@linux ~]# groupmod [-g gid] [-n group_name] 
参数: 
-g:修改既有的 GID 数字; 
-n:修改既有的群组名称  
范例一:将刚刚上个指令建立的group2名称改为groupname,GID为103 
[root@linux ~]# groupmod -g 103 -n groupname group2 
[root@linux ~]# grep groupname /etc/group /etc/gshadow 
/etc/group:groupname:x:103: 
/etc/gshadow:groupname:!::

 

3)groupdel 
    groupdel自然就是在删除群组。 
[root@linux ~]# groupdel [groupname] 
范例一:将刚刚的groupname删除 
[root@linux ~]# groupdel groupname

范例二:若要删除dmtsai这个群组 
[root@linux ~]# groupdel dmtsai 
groupdel: cannot remove user‘s primary group.


4)gpasswd 
   如果系统管理员太忙了,无法针对每个群组来管理,那么系统管理员还可以将某位使用者设定成为该群组的团长。 
关于系统管理员(root)做的动作: 
[root@linux ~]# gpasswd groupname 
[root@linux ~]# gpasswd [-A user1,...] [-M user3,user4...] groupname 
[root@linux ~]# gpasswd [-rR] groupname 
参数: 
:若没有任何参数时,表示给予groupname一个密码(/etc/gshadow) 
-A:将groupname的主控权交由后面的使用者管理(该群组的管理员) 
-M:将某些账号加入这个群组当中 
-r:将groupname的密码移除 
-R:让groupname的密码栏失效,所以newgrp就不能使用了

关于群组管理员(Group administrator)做的动作: 
[someone@linux ~]$ gpasswd [-ad] user groupname 
参数: 
-a:将某位使用者加入到 groupname 这个群组当中! 
-d:将某位使用者移除出 groupname 这个群组当中。 
范例一:建立一个新群组,名称为testgroup且群组交由dmtsai管理 
[root@linux ~]# groupadd testgroup 
[root@linux ~]# gpasswd testgroup 
Changing the password for group testgroup 
New Password: 
Re-enter new password: 
[root@linux ~]# gpasswd -A dmtsai -M dmtsai,vbird testgroup 
[root@linux ~]# grep testgroup /etc/group /etc/gshadow 
/etc/group:testgroup:x:502:dmtsai,vbird 
/etc/gshadow:testgroup:1CEVbrcjxO6Ps:dmtsai:dmtsai,vbird

范例二:以dmtsai登入系统,并且让他加入vbird1成为testgroup成员之一 
[dmtsai@linux ~]$ gpasswd -a vbird1 testgroup 
Adding user vbird1 to group testgroup


5、密码管理 
[root@linux ~]# passwd [-lunxwS] username 
参数: 
-l:将username 这个账号的密码锁住(lock),在/etc/shadow内的密码栏修订~ 
-u:将-l的lock解开! 
-n:后面接天数(数字),最短天数;亦即是/etc/shadow内的第四栏; 
-x:后面接天数(数字),最长天数;亦即是/etc/shadow内的第五栏; 
-w:后面接天数(数字),警告天数;亦即是/etc/shadow内的第六栏; 
-S:显示目前这个username 的相关信息。  
范例一:将dmtsai这个使用者的密码冻结,并观察他 
[root@linux ~]# passwd -l dmtsai 
Locking password for user dmtsai. 
passwd: Success 
[root@linux ~]# passwd -S dmtsai 
Password locked. 
[root@linux ~]# grep dmtsai /etc/shadow 
dmtsai:!!$1$TDy6D7eg$jVJV/FMaQn14v5Kl7sqw6/:13026:0:99999:7::13149:

范例二:将上述密码冻结解开 
[root@linux ~]# passwd -u dmtsai


6、使用者身份切换 
1)su 
[root@linux ~]# su [-lcm] [username] 
参数: 
-:如果执行su -时,表示该使用者想要变换身份成为root,且使用root的环境设定参数档,如/root/.bash_profile等等。 
-l:后面可以接使用者,例如su -l dmtsai,这个-l好处是可使用欲变换身份者他的所有相关环境设定档。 
-m:-m与-p是一样的,表示使用目前的环境设定,而不重新读取新使用者的设定档。 
-c:仅进行一次指令,所以-c后面可以加上指令 
范例一:由原本的dmtsai这个使用者,变换身份成为root 。 
[dmtsai@linux ~]$ su 
Password: <==这里输入 root 的密码喔! 
[root@linux ~]# env 
USER=dmtsai 
USERNAME=root 
MAIL=/var/spool/mail/dmtsai 
LOGNAME=dmtsai 
   如果使用su没有加上-的话,那么很多原本使用者的相关设定会继续存在,这也会造成后来的root身份在执行时的困扰。最常见的就是PATH这个变量的问题。 
[root@linux ~]# exit    <==这样可以离开 su 的环境! 
[dmtsai@linux ~]$ su - 
Password:    <==这里输入 root 的密码喔! 
[root@linux ~]# env 
USER=root 
MAIL=/var/spool/mail/root 
LOGNAME=root

范例二:使用root的身份,执行head -n 3 /etc/shadow 
[dmtsai@linux ~]$ su - -c "head -n 3 /etc/shadow" 
Password:    <==这里输入 root 的密码喔! 
root:$1$jaldj9843u29jlj9u839jljlcghjlE/:12959:0:99999:7::: 
bin:*:12959:0:99999:7::: 
daemon:*:12959:0:99999:7:::

范例三:原本是dmtsai这个使用者,想要变换身份成为vbird时? 
[dmtsai@linux ~]$ su -l vbird 
Password:     <==这里输入 vbird 的密码喔!

 

2)sudo 
   当使用者执行sudo时,系统会主动的去寻找/etc/sudoers档案,判断该使用者是否有执行sudo的权限;若使用者具有可执行sudo的权限后,便让使用者输入使用者自己的密码来确认;若密码输入成功,便开始进行sudo后续接的指令;不过,root执行sudo时,不需要输入密码;若欲切换的身份与执行者身份相同,也不需要输入密码。 
[root@linux ~]# sudo [-u [username|#uid]] command 
参数: 
-u:后面可以接使用者账号名称或者是UID。例如UID是500的身份,可以:-u #500来作为切换到UID为500的那位使用者。  
范例一:一般身份使用者使用sudo在/root底下建立目录 
[dmtsai@linux ~]$ sudo mkdir /root/testing 
We trust you have received the usual lecture from the local System 
Administrator. It usually boils down to these three things: 
#1) Respect the privacy of others. 
#2) Think before you type. 
#3) With great power comes great responsibility. 
Password: <==这里输入 dmtsai 自己的密码 
dmtsai is not in the sudoers file. This incident will be reported. 
    因为dmtsai不在/etc/sudoers,所以他就无法执行sudo。 
  
范例二:假设dmtsai已经具有sudo的执行权限,如何在/root底下建立目录? 
[dmtsai@linux ~]$ sudo mkdir /root/testing 
Password: <==这里输入 dmtsai 自己的密码

范例三:如何将sudo与su搭配使用? 
[dmtsai@linux ~]$ sudo su -

范例四:dmtsai想要切换身份成为vbird来进行touch时? 
[dmtsai@linux ~]$ sudo -u vbird touch /home/vbird/test

 

3)visudo 
sudo的执行权限与/etc/sudoers这的档案有关,因为/etc/sudoers需要一些比较特别的语法,因此,如果你直接以vi去编辑他时,如果输入的字句错误,可能会造成无法启用sudo的困扰,因此建议使用visudo 去编辑/etc/sudoers(必须要使用root的身份来执行) 
[root@linux ~]# visudo 
# sudoers file. 
# This file MUST be edited with the ‘visudo‘ command as root. 
# See the sudoers man page for the details on how to write a sudoers file. 

# Host alias specification 
# User alias specification 
# Cmnd alias specification 
# Defaults specification 
# Runas alias specification 
# User privilege specification 
root ALL=(ALL) ALL 
dmtsai ALL=(ALL) ALL <==这里将 dmtsai 制作成完全可用! 
# Uncomment to allow people in group wheel to run all commands 
# %wheel ALL=(ALL) ALL 
# Same thing without a password 
# %wheel ALL=(ALL) NOPASSWD: ALL 
# Samples 
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom 
# %users localhost=/sbin/shutdown -h now


7、特殊的 shell, /sbin/nologin 
   这个shell通常是给系统账号使用的,因为这个/sbin/nologin事实上并无法给予账号实际登入,如果你利用usermod修改了dmtsai这个使用者的shell成为/sbin/nologin之后,再次想要以dmtsai重新登入系统时,他在屏幕上会出现这样的讯息:This account is currently not available. 
   这个账号并不能被允许登入,不过,这个账号却可以进行其它的工作,举例来说,各个系统账号,打印工作由lp这个账号在管理,WWW由apache这个账号在管理, 他们都可以进行系统程序的工作,但是就是无法登入主机。


8、PAM模块简介 
    当一个使用者想要登入Linux主机时,他受到什么限制呢?我们说,他除了必须要通过/etc/passwd及/etc/shadow的验证并取得相关的权限数据,最后获得一个shell 之外,事实上,他在登入系统之前,就得要通过PAM (Pluggable Authentication Modules, 嵌入式模块)的验证才行。 
    PAM模块的用途非常的多,除了可以在使用者登入时进行身份的验证之外,也可以辅助一些应用程序的验证之用,举例来说,我们前面提到的密码修改程序passwd,当我们执行密码修订的时候,这个程序不是会告诉我们您输入的密码是否合于规范吗? 如果是记录在字典当中的密码,或者是与账号相同的密码,那么就会被PAM模块打回票,也就无法通过验证了, 那么PAM怎么运作呢?我们同样以/usr/bin/passwd这支程序来作为简单的说明好了: 
1)使用者开始执行/usr/bin/passwd这支程序,并输入密码; 
2)passwd开始呼叫PAM模块,PAM模块会搜寻passwd程序的PAM相关设定档案,这个设定档一般是在/etc/pam.d/里面的与程序同名的档案,所以在本例中,PAM会去搜寻 
/etc/pam.d/passwd这个设定档; 
3)经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证; 
4)将验证结果回传给passwd这支程序,而passwd这支程序会根据PAM回传的结果决定下一个动作。 

这个过程提供我们几个重要的信息: 
1)PAM 的设定档放置在/etc/pam.d/这个目录中; 
2)至于更多的环境相关设定则放置在/etc/security/* 内; 
3)PAM是透过自己提供的相关模块来进行验证,模块放置在/lib/security/*内。

 

Linux基础--用户和组管理,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。