新增与移除使用者: useradd, 相关配置文件, passwd, usermod, userdel

我们登入系统时会输入 (1)账号与 (2)密码,所以建立一个可用的账号同样的也需要这两个数据。那账号可以使用 useradd 来新建用户, 密码的给予则使用 passwd 这个指令!这两个指令下达方法如下:


  • useradd
[root@study ~]# 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@study ~]# useradd vbird1
[root@study ~]# ll -d /home/vbird1
drwx------. 3 vbird1 vbird1 74 Jul 20 21:50 /home/vbird1
# 默认会建立用户家目录,且权限为 700 !这是重点! [root@study ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird1:x:1003:1004::/home/vbird1:/bin/bash /etc/shadow:vbird1:!!:16636:0:99999:7:::
/etc/group:vbird1:x:1004: <==预设会建立一个与账号一模一样的群组名

简单的使用『 useradd 账号 』来建立 使用者即可。 CentOS 这些默认值主要会帮我们处理几个项目:

  • 在 /etc/passwd 里面建立一行与账号相关的数据,包括建立 UID/GID/家目录等;
  • 在 /etc/shadow 里面将此账号的密码相关参数填入,但是尚未有密码;
  • 在 /etc/group 里面加入一个与账号名称一模一样的组名;
  • 在 /home 底下建立一个与账号同名的目录作为用户家目录,且权限为 700

由于在 /etc/shadow 内仅会有密码参数而不会有加密过的密码数据,因此我们在建立使用者账号时, 还需要使用『 passwd 账号 』来给予密码才算是完成了用户建立的流程。如果由于特殊需求而需要 改变使用者相关参数时, 就得要透过上述表格中的选项来进行建立了,参考底下的案例:

范例二:假设我已知道我的系统当中有个组名为 users ,且 UID 1500 并不存在, 请用 users 为初始群组,以及 uid 为 1500 来建立一个名为 vbird2 的账号
[root@study ~]# useradd -u 1500 -g users vbird2
[root@study ~]# ll -d /home/vbird2
drwx------. 3 vbird2 users 74 Jul 20 21:52 /home/vbird2
[root@study ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird2:x:1500:100::/home/vbird2:/bin/bash
/etc/shadow:vbird2:!!:16636:0:99999:7:::

在这个范例中,我们建立的是指定一个已经存在的群组作为使用者的初始群组,因为群组已经存在,所以在 /etc/group 里面就不会主动的建立与账号同名的群组了!此外,我们也指定了特殊的 UID 来作为使用者的专属 UID。了解了一般账号后,我们来瞧瞧那啥是系统账号(system acount)。

范例三:建立一个系统账号,名称为 vbird3
[root@study ~]# useradd -r vbird3
[root@study ~]# ll -d /home/vbird3
ls: cannot access /home/vbird3: No such file or directorya <==不会主动建立家目录 [root@study ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird3:x:699:699::/home/vbird3:/bin/bash /etc/shadow:vbird3:!!:16636::::::
/etc/group:vbird3:x:699:

一般账号应该是 1000 号以后,那用户自己建立的系统账号则一般 是小于 1000 号以下的。 所以在这里我们加上 -r 这个选项以后,系统就会主动将账号与账号同名 群组的 UID/GID 都指定小于 1000 以下,此外,由于系统账号主要是用来进行运作系统所需服务的权限设定, 所以系统账号默认都不会主动建立家目录的!

使用 useradd 建立使用者账号时,其实会更改不少地方,至少我们就 知道底下几个文件:

  • 用户账号与密码参数方面的文件:/etc/passwd, /etc/shadow
  • 使用者群组相关方面的文件:/etc/group, /etc/gshadow
  • 用户的家目录:/home/账号名称

  • useradd参考文档

useradd 的默认值可以使用底下的方法呼叫出来:

[root@study ~]# useradd -D
GROUP=100 <==预设的群组
HOME=/home <==默认的家目录所在目录
INACTIVE=-1 <==密码失效日,在 shadow 内的第 7 栏
EXPIRE= <==账号失效日,在 shadow 内的第 8 栏
SHELL=/bin/bash <==预设的 shell
SKEL=/etc/skel <==用户家目录的内容数据参考目录
CREATE_MAIL_SPOOL=yes <==是否主动帮使用者建立邮件信箱(mailbox)

这个数据其实是由 /etc/default/useradd 呼叫出来的!你可以自行用 vim 去观察该文件的内容。搭配上头刚刚谈过的范例一的运作结果,上面这些设定项目所造成的行为分别是:

  • GROUP=100:新建账号的初始群组使用 GID 为 100 者

系统上面 GID 为 100 者即是 users 这个群组,此设定项目指的就是让新设使用者账号的初始群 组为 users 这一个的意思。 但是我们知道 CentOS 上面并不是这样的,在 CentOS 上面预设的 群组为与账号名相同的群组。怎么会这样啊?这是因 为针对群组的角度有两种不同的机制所致, 这两种机制分别是:

  • 私有群组机制:

系统会建立一个与账号一样的群组给使用者作为初始群组。 这种群组的设定机制会比较有保密性, 这是因为使用者都有自己的群组,而且家目录权限将会设定为 700 (仅有自己可进入自己的家目录) 之故。使用这种机制将不会参考 GROUP=100 这个设定值。代表性的 distributions 有 RHEL, Fedora, CentOS 等;

  • 公共群组机制:

就是以 GROUP=100 这个设定值作为新建账号的初始群组,因此每个账号都属于 users 这个群组, 且默认家目录通常的权限会是『 drwxr-xr-x ... username users ... 』,由于每个账号都属于 users 群组,因此大家都可以互相分享家目录内的数据之故。代表 distributions 如 SuSE 等。

  • HOME=/home:用户家目录的基准目录(basedir)

用户的家目录通常是与账号同名的目录,这个目录将会摆放在此设定值的目录后。

  • INACTIVE=-1:密码过期后是否会失效的设定值

我们在 shadow 文件结构当中谈过,第七个字段的设定值将会影响到密码过期后, 在多久时间内 还可使用旧密码登入。这个项目就是在指定该日数啦!如果是 0 代表密码过期立刻失效, 如果 是 -1 则是代表密码永远不会失效,如果是数字,如 30 ,则代表过期 30 天后才失效

  • EXPIRE=:账号失效的日期

就是 shadow 内的第八字段,你可以直接设定账号在哪个日期后就直接失效,而不理会密码的问题。通常不会设定此项目。

  • SHELL=/bin/bash:默认使用的 shell 程序文件名

系统默认的 shell 就写在这里。假如你的系统为 mail server ,你希望每个账号都只能使用 email 的收发信件功能, 而不许用户登入系统取得 shell ,那么可以将这里设定为 /sbin/nologin ,如此 一来,新建的使用者预设就无法登入! 也免去后续使用 usermod 进行修改的手续!

  • SKEL=/etc/skel:用户家目录参考基准目录

这个咚咚就是指定用户家目录的参考基准目录啰~举我们的范例一为例, vbird1 家目录 /home/vbird1 内的各项数据,都是由 /etc/skel 所复制过去的~所以呢,未来如果我想要让新增使 用者时,该用户的环境变量 ~/.bashrc 就设定妥当的话,您可以到 /etc/skel/.bashrc 去编辑一下, 也可以建立 /etc/skel/www 这个目录,那么未来新增使用者后,在他的家目录下就会有 www 那

个目录了!

  • CREATE_MAIL_SPOOL=yes:建立使用者的 mailbox

你可以使用『 ll /var/spool/mail/vbird1 』看一下,会发现有这个文件的存在喔!这就是使用者的邮件信箱!

除了这些基本的账号设定值之外, UID/GID 还有密码参数又是在哪里参考的呢?那就得要看一下 /etc/login.defs 啦!

MAIL_DIR /var/spool/mail <==用户默认邮件信箱放置目录

PASS_MAX_DAYS 99999 <==/etc/shadow 内的第 5 栏,多久需变更密码日数
PASS_MIN_DAYS 0 <==/etc/shadow 内的第 4 栏,多久不可重新设定密码日数
PASS_MIN_LEN 5 <==密码最短的字符长度,已被 pam 模块取代,失去效用!
PASS_WARN_AGE 7 <==/etc/shadow 内的第 6 栏,过期前会警告的日数 UID_MIN 1000 <==使用者最小的 UID,意即小于 1000 的 UID 为系统保留
UID_MAX 60000 <==使用者能够用的最大 UID
SYS_UID_MIN 201 <==保留给用户自行设定的系统账号最小值 UID
SYS_UID_MAX 999 <==保留给用户自行设定的系统账号最大值 UID
GID_MIN 1000 <==使用者自定义组的最小 GID,小于 1000 为系统保留
GID_MAX 60000 <==使用者自定义组的最大 GID
SYS_GID_MIN 201 <==保留给用户自行设定的系统账号最小值 GID
SYS_GID_MAX 999 <==保留给用户自行设定的系统账号最大值 GID CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动建立用户家目录?
UMASK 077 <==用户家目录建立的 umask ,因此权限会是 700
USERGROUPS_ENAB yes <==使用 userdel 删除时,是否会删除初始群组
ENCRYPT_METHOD SHA512 <==密码加密的机制使用的是 sha512 这一个机制!

这个文件规范的数据则是如下所示:

  • mailbox 所在目录:

用户的默认 mailbox 文件放置的目录在 /var/spool/mail,所以 vbird1 的 mailbox 就是在 /var/spool/mail/vbird1。

  • shadow 密码第 4, 5, 6 字段内容:

透过 PASS_MAX_DAYS 等等设定值来指定的!所以你知道为何预设的 /etc/shadow 内每一行都会有『 0:99999:7 』的存在了吗?不过要注意的是,由于目前我们登入时改用 PAM 模块来进行密码检验, 所以那个 PASS_MIN_LEN 是失效的!

  • UID/GID 指定数值:

虽然 Linux 核心支持的账号可高达 232 这么多个,不过一部主机要作出这么多账号在管理上也是很麻烦的! 所以在这里就针对 UID/GID 的范围进行规范就是了。上表中的 UID_MIN 指的就是可登入系统的一般账 号的最小 UID ,至于 UID_MAX 则是最大 UID 之意。

要注意的是,系统给予一个账号 UID 时,他是 (1)先参考 UID_MIN 设定值取得最小数值; (2)由 /etc/passwd 搜寻最大的 UID 数值, 将 (1) 与 (2) 相比,找出最大的那个再加一就是新账号的 UID 了。

而如果我是想要建立系统用的账号,所以使用 useradd -r sysaccount 这个 -r 的选项时,就会找『比 201 大 但比 1000 小的最大的 UID 』

  • 用户家目录设定值:

为何我们系统默认会帮用户建立家目录?就是这个『CREATE_HOME = yes』的设定值啦!这个设定值会让 你在使用 useradd 时, 主动加入『 -m 』这个产生家目录的选项啊!如果不想要建立用户家目录,就只能强制加上『 -M 』的选项在 useradd 指令执行时啦!至于建立家目录的权限设定呢?就透过 umask 这个设 定值啊!因为是 077 的预设设定,因此用户家目录默认权限才会是『 drwx------ 』。

  • 用户删除与密码设定值:

使用『USERGROUPS_ENAB yes』这个设定值的功能是: 如果使用 userdel 去删除一个账号时,且该账号 所属的初始群组已经没有人隶属于该群组了, 那么就删除掉该群组,至于『ENCRYPT_METHOD SHA512』则表示使用 SHA512 来加密密码明文,而不使用旧式的 MD5。

使用 useradd 这支程序在建立 Linux 上的账号时,至少会参考:

  • /etc/default/useradd
  • /etc/login.defs
  • /etc/skel/*

  • passwd

设定密码就使用 passwd

[root@study ~]# passwd [--stdin] [账号名称] <==所有人均可使用来改自己的密码
[root@study ~]# passwd [-l] [-u] [--stdin] [-S] \
> [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 <==root 功能
选项与参数:
--stdin :可以透过来自前一个管线的数据,作为密码输入,对 shell script 有帮助! -l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效;
-u :与 -l 相对,是 Unlock 的意思!
-S :列出密码相关参数,亦即 shadow 文件内的大部分信息。
-n :后面接天数,shadow 的第 4 字段,多久不可修改密码天数
-x :后面接天数,shadow 的第 5 字段,多久内必须要更动密码
-w :后面接天数,shadow 的第 6 字段,密码过期前的警告天数
-i :后面接『日期』,shadow 的第 7 字段,密码失效日期 范例一:请 root 给予 vbird2 密码
[root@study ~]# passwd vbird2
Changing password for user vbird2.
New UNIX password: <==这里直接输入新的密码,屏幕不会有任何反应
BAD PASSWORD: The password is shorter than 8 characters <==密码太简单或过短的错误!
Retype new UNIX password: <==再输入一次同样的密码
passwd: all authentication tokens updated successfully. <==竟然还是成功修改了!

这个是 root 帮忙设定的结果,那如果是用户自己要改密码呢? 包括 root 也是这样修改的喔!

范例二:用 vbird2 登入后,修改 vbird2 自己的密码
[vbird2@study ~]$ passwd <==后面没有加账号,就是改自己的密码!
Changing password for user vbird2.
Changing password for vbird2
(current) UNIX password: <==这里输入『原有的旧密码』
New UNIX password: <==这里输入新密码
BAD PASSWORD: The password is shorter than 8 characters <==密码太短!不可以设定!重新想
New password: <==这里输入新想的密码
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
# 同样的,密码设定在字典里面找的到该字符串,所以也是不建议!无法通过,再想新的!
New UNIX password: <==这里再想个新的密码来输入吧
Retype new UNIX password: <==通过密码验证!所以重复这个密码的输入
passwd: all authentication tokens updated successfully. <==有无成功看关键词

要帮一般账号建立密码需要使用『 passwd 账号 』的格式,使 用『 passwd 』表示修改自己的密码!

你想要帮 vbird2 变更密码成为 abc543CC ,可以这样下达指令

范例三:使用 standard input 建立用户的密码
[root@study ~]# echo "abc543CC" | passwd --stdin vbird2
Changing password for user vbird2.
passwd: all authentication tokens updated successfully.

这个动作通常仅 用在 shell script 的大量建立使用者账号当中!要注意的是,这个选项并不存在所有 distributions 版本中。


  • chage

除了使用 passwd -S 之外,有没有更详细的密码参数显示功能呢?有的!那就是 chage 了!他的用 法如下:

[root@study ~]# chage [-ldEImMW] 账号名
选项与参数:
-l :列出该账号的详细密码参数;
-d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD
-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
-I :后面接天数,修改 shadow 第七字段(密码失效日期)
-m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
-M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
-W :后面接天数,修改 shadow 第六字段(密码过期前警告日期) 范例一:列出 vbird2 的详细密码参数
[root@study ~]# chage -l vbird2
Last password change : Jul 20, 2015
Password expires : Sep 18, 2015
Password inactive : Sep 28, 2015
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 60
Number of days of warning before password expires : 7

chage 有一个功能很不错喔!如果你想要让『使用者在第一次登入时, 强制她们一定要更改密码后 才能够使用系统资源』,可以利用如下的方法来处理的!

范例二:建立一个名为 agetest 的账号,该账号第一次登入后使用默认密码,但必须要更改过密码后,使用新密码才能够登入系统使用 bash 环境
[root@study ~]# useradd agetest
[root@study ~]# echo "agetest" | passwd --stdin agetest
[root@study ~]# chage -d 0 agetest
[root@study ~]# chage -l agetest | head -n 3
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
# 此时此账号的密码建立时间会被改为 1970/1/1 ,所以会有问题! 范例三:尝试以 agetest 登入的情况
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user agetest.
Changing password for agetest
(current) UNIX password: <==这个账号被强制要求必须要改密码!

  • usermod

在使用 useradd 后,发现某些地方还可以进行细部修改。此 时,当然我们可以直接到 /etc/passwd 或 /etc/shadow 去修改相对应字段的数据, 不过,Linux 也有 提供相关的指令让大家来进行账号相关数据的微调呢~那就是 usermod

[root@study ~]# usermod [-cdegGlsuLU] username
选项与参数:
-c :后面接账号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些账号的说明。
-d :后面接账号的家目录,即修改 /etc/passwd 的第六栏;
-e :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据啦!
-f :后面接天数,为 shadow 的第七字段。
-g :后面接初始群组,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段!
-G :后面接次要群组,修改这个使用者能够支持的群组,修改的是 /etc/group 啰~
-a :与 -G 合用,可『增加次要群组的支持』而非『设定』喔!
-l :后面接账号名称。亦即是修改账号名称, /etc/passwd 的第一栏!
-s :后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等等。
-u :后面接 UID 数字啦!即 /etc/passwd 第三栏的资料;
-L :暂时将用户的密码冻结,让他无法登入。其实仅改 /etc/shadow 的密码栏。
-U :将 /etc/shadow 密码栏的 ! 拿掉,解冻啦!

不过 usermod 还是有新增的选项, 那就是 -L 与 -U ,不过这两个 选项其实与 passwd 的 -l, -u 是相同的!而且也不见得会存在所有的 distribution 当中!接下来,让 我们谈谈一些变更参数的实例吧!

范例一:修改使用者 vbird2 的说明栏,加上『VBird's test』的说明。
[root@study ~]# usermod -c "VBird's test" vbird2
[root@study ~]# grep vbird2 /etc/passwd
vbird2:x:1500:100:VBird's test:/home/vbird2:/bin/bash 范例二:使用者 vbird2 这个账号在 2015/12/31 失效。
[root@study ~]#usermod -e "2015-12-31" vbird2
[root@study ~]#chage -l vbird2 | grep 'Account expires'
Account expires : Dec 31, 2015 范例三:我们建立 vbird3 这个系统账号时并没有给予家目录,请建立他的家目录
[root@study ~]# ll -d ~vbird3
ls: cannot access /home/vbird3: No such file or directory <==确认一下,确实没有家目录的存在!
[root@study ~]# cp -a /etc/skel /home/vbird3
[root@study ~]# chown -R vbird3:vbird3 /home/vbird3
[root@study ~]# chmod 700 /home/vbird3
[root@study ~]# ll -a ~vbird3
drwx------. 3 vbird3 vbird3 74 May 4 17:51 . <==用户家目录权限
drwxr-xr-x. 10 root root 4096 Jul 20 22:51 ..
-rw-r--r--. 1 vbird3 vbird3 18 Mar 6 06:06 .bash_logout
-rw-r--r--. 1 vbird3 vbird3 193 Mar 6 06:06 .bash_profile
-rw-r--r--. 1 vbird3 vbird3 231 Mar 6 06:06 .bashrc
drwxr-xr-x. 4 vbird3 vbird3 37 May 4 17:51 .mozilla
# 使用 chown -R 是为了连同家目录底下的用户/群组属性都一起变更的意思;
# 使用 chmod 没有 -R ,是因为我们仅要修改目录的权限而非内部文件的权限!

  • userdel

这个功能就太简单了,目的在删除用户的相关数据,而用户的数据有:

  • 用户账号/密码相关参数:/etc/passwd, /etc/shadow
  • 使用者群组相关参数:/etc/group, /etc/gshadow
  • 用户个人文件数据: /home/username, /var/spool/mail/username..

整个指令的语法非常简单:

[root@study ~]# userdel [-r] username
选项与参数:
-r :连同用户的家目录也一起删除 范例一:删除 vbird2 ,连同家目录一起删除
[root@study ~]# userdel -r vbird2

用户功能


  • id

id 这个指令则可以查询某人或自己的相关 UID/GID 等等的信息,他的参数也不少,不过,都不需 要记~反正使用 id 就全部都列出啰!

[root@study ~]# id [username]    

范例一:查阅 root 自己的相关 ID 信息!
[root@study ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t: s0-s0:c0.c1023
# 上面信息其实是同一行的数据!包括会显示 UID/GID 以及支持的所有群组!
# 至于后面那个 context=... 则是 SELinux 的内容,先不要理会他! 范例二:查阅一下 vbird1 吧~
[root@study ~]# id vbird1
uid=1003(vbird1) gid=1004(vbird1) groups=1004(vbird1) [root@study ~]# id vbird100
id: vbird100: No such user <== id 这个指令也可以用来判断系统上面有无某账号!

  • finger

finger 的中文字面意义是:『手指』或者是『指纹』的意思。这个 finger 可以查阅很多用户相关的 信息喔! 大部分都是在 /etc/passwd 这个文件里面的信息!不过,这个指令有点危险,所以新的 版本中已经默认不安装这个软件!

[root@study ~]# df -hT /mnt
Filesystem Type Size Used Avail Use% Mounted on
/dev/sr0 iso9660 7.1G 7.1G 0 100% /mnt # 先确定是有挂载光盘的啦! [root@study ~]# rpm -ivh /mnt/Packages/finger-[0-9]*

我们就先来检查检查用户信息吧!

[root@study ~]# finger [-s] username
选项与参数:
-s :仅列出用户的账号、全名、终端机代号与登入时间等等;
-m :列出与后面接的账号相同者,而不是利用部分比对 (包括全名部分) 范例一:观察 vbird1 的用户相关账号属性
[root@study ~]# finger vbird1
Login: vbird1
Directory: /home/vbird1
Never logged in.
No mail.
No Plan.

列出的信息说明如下:

  • Login:为使用者账号,亦即 /etc/passwd 内的第一字段;
  • Name:为全名,亦即 /etc/passwd 内的第五字段(或称为批注);
  • Directory:就是家目录了;
  • Shell:就是使用的 Shell 文件所在;
  • Never logged in.:figner 还会调查用户登入主机的情况喔!
  • No mail.:调查 /var/spool/mail 当中的信箱资料;
  • No Plan.:调查 ~vbird1/.plan 文件,并将该文件取出来说明!

此外,我们可以建立自己想要执行的预定计划,当然,最多是给自己看的!可以这样做:

范例二:利用 vbird1 建立自己的计划档
[vbird1@study ~]$ echo "I will study Linux during this year." > ~/.plan
[vbird1@study ~]$ finger vbird1
Login: vbird1 Name:
Directory: /home/vbird1 Shell: /bin/bash
Last login Mon Jul 20 23:06 (CST) on pts/0
No mail.
Plan:
I will study Linux during this year. 范例三:找出目前在系统上面登入的用户与登入时间
[vbird1@study ~]$ finger
Login Name Tty Idle Login Time Office Office Phone Host
dmtsai dmtsai tty2 11d Jul 7 23:07
dmtsai dmtsai pts/0 Jul 20 17:59

  • chfn

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

[root@study ~]# chfn [-foph] [账号名] 选项与参数:
-f :后面接完整的大名;
-o :您办公室的房间号码;
-p :办公室的电话号码;
-h :家里的电话号码! 范例一:vbird1 自己更改一下自己的相关信息!
[vbird1@study ~]$ chfn
Changing finger information for vbird1.
Name []: VBird Tsai test <==输入你想要呈现的全名
Office []: DIC in KSU <==办公室号码
Office Phone []: 06-2727175#356 <==办公室电话
Home Phone []: 06-1234567 <==家里电话号码 Password: <==确认身份,所以输入自己的密码
Finger information changed.

  • chsh

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

[vbird1@study ~]$ chsh [-ls]
选项与参数:
-l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
-s :设定修改自己的 Shell 啰 范例一:用 vbird1 的身份列出系统上所有合法的 shell,并且指定 csh 为自己的 shell
[vbird1@study ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin <==所谓:合法不可登入的 Shell 就是这玩意! /usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh <==这就是 C shell 啦!
# 其实上面的信息就是我们在 bash 中谈到的 /etc/shells 啦! [vbird1@study ~]$ chsh -s /bin/csh; grep vbird1 /etc/passwd
Changing shell for vbird1.
Password: <==确认身份,请输入 vbird1 的密码
Shell changed.

新增与移除群组

群组的内容都与这两个文件有关:/etc/group, /etc/gshadow。 群组的内容其实很简单,都是上面两个 文件的新增、修改与移除而已。


  • groupadd
[root@study ~]# groupadd [-g gid] [-r] 组名
选项与参数:
-g :后面接某个特定的 GID ,用来直接给予某个 GID ~
-r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。 范例一:新建一个群组,名称为 group1
[root@study ~]# groupadd group1
[root@study ~]# grep group1 /etc/group /etc/gshadow /etc/group:group1:x:1503:
/etc/gshadow:group1:!::
# 群组的 GID 也是会由 1000 以上最大 GID+1 来决定!

  • groupmod
[root@study ~]# groupmod [-g gid] [-n group_name] 群组名
选项与参数:
-g :修改既有的 GID 数字;
-n :修改既有的组名 范例一:将刚刚上个指令建立的 group1 名称改为 mygroup , GID 为 201
[root@study ~]# groupmod -g 201 -n mygroup group1
[root@study ~]# grep mygroup /etc/group /etc/gshadow
/etc/group:mygroup:x:201:
/etc/gshadow:mygroup:!::

  • grouped

groupdel 自然就是在删除群组的啰~用法很简单:

[root@study ~]# groupdel [groupname] 

范例一:将刚刚的 mygroup 删除!
[root@study ~]# groupdel mygroup 范例二:若要删除 vbird1 这个群组的话?
[root@study ~]# groupdel vbird1
groupdel: cannot remove the primary group of user 'vbird1'

  • gpasswd:群组管理员功能

某个群组具有一个管理员,这个群组管理员可以管理 哪些账号可以加入/移出该群组! 那要如何『建立一个群组管理员』呢?就得要透过 gpasswd !

# 关于系统管理员(root)做的动作:
[root@study ~]# gpasswd groupname
[root@study ~]# gpasswd [-A user1,...] [-M user3,...] groupname
[root@study ~]# gpasswd [-rR] groupname # 关于群组管理员(Group administrator)做的动作:
[someone@study ~]$ gpasswd [-ad] user groupname
选项与参数:
-a :将某位使用者加入到 groupname 这个群组当中!
-d :将某位使用者移除出 groupname 这个群组当中。 范例一:建立一个新群组,名称为 testgroup 且群组交由 vbird1 管理:
[root@study ~]# groupadd testgroup <==先建立群组
[root@study ~]# gpasswd testgroup <==给这个群组一个密码吧!
Changing the password for group testgroup
New Password:
Re-enter new password:
# 输入两次密码就对了!
[root@study ~]# gpasswd -A vbird1 testgroup <==加入群组管理员为 vbird1
[root@study ~]# grep testgroup /etc/group /etc/gshadow
/etc/group:testgroup:x:1503: /etc/gshadow:testgroup:$6$MnmChP3D$mrUn.Vo.buDjObMm8F2emTkvGSeuWikhRzaKHxpJ...:vbird1:
# 很有趣吧!此时 vbird1 则拥有 testgroup 的主控权喔!身份有点像板主啦! 范例二:以 vbird1 登入系统,并且让他加入 vbird1, vbird3 成为 testgroup 成员
[vbird1@study ~]$ id
uid=1003(vbird1) gid=1004(vbird1) groups=1004(vbird1) ...
# 看得出来,vbird1 尚未加入 testgroup 群组喔! [vbird1@study ~]$ gpasswd -a vbird1 testgroup
[vbird1@study ~]$ gpasswd -a vbird3 testgroup
[vbird1@study ~]$ grep testgroup /etc/group
testgroup:x:1503:vbird1,vbird3

最新文章

  1. C# http请求数据
  2. 通过重构VO实现校验功能
  3. iphone H5视频行内播放(禁止全屏播放)
  4. 课堂Beta发布140字评论
  5. jquery的offset与position的区别
  6. MongoDB数据库的简介及安装
  7. something about english
  8. Constructing Roads (MST)
  9. WebBrowser的内存释放
  10. javascript之值传递与引用传递
  11. Windows Azure 微软公有云体验(三) IIS中文编码解决方案
  12. 动态可视化库Vis.js:社交关系谱
  13. json字符串中key值下划线命名转换为驼峰命名
  14. velocity 是如何实现内省 屏蔽反射的
  15. FORM打开网页链接
  16. python爬虫 - python requests网络请求简洁之道
  17. Python——pyqt5——智能提示(lineEdit/conmbobox)
  18. [Leetcode 72]编辑距离 Edit Distance
  19. PHP isset 和 array_key_exists 对比
  20. FragmentPagerAdapter 与 FragmentStatePagerAdapter 的区别

热门文章

  1. spring项目后台中打印sql语句
  2. Spring中统一相同版本的api请求路径的一些思考
  3. [PCL]对‘pcl::visualization::CloudViewer::CloudViewer(std::string const&amp;)’未定义的引用
  4. python中__file__
  5. iOS-浅谈runtime运行时机制02-runtime简单使用
  6. jsp页面file标签上传图片以及blob类型数据库存取。
  7. basic ,fundamental ,extreme ,utmost和radical.区别
  8. 问题驱动的Git学习
  9. Oracle RAC/Clusterware 多种心跳heartbeat机制介绍 RAC超时机制分析
  10. JS中作用域和变量提升(hoisting)的深入理解