新增和删除用户
我们知道,当登录系统时需要输入帐号与密码,那么创建一个可用的帐号同样的也需要这两个数据。Linux中用useradd 来新建使用者,用passwd创建密码
创建用户:useradd
[root@study ~]
选项与参数 | 含义 |
---|
-u | 指定账号特定的 UID | -g | 指定用户的GID | -G | 后面接的群组名称则是这个帐号还可以加入的群组。会修改 /etc/group 内的相关数据 | -M | 强制,不要创建使用者主文件夹。(系统帐号默认值) | -m | 强制,要创建使用者主文件夹。(一般帐号默认值) | -d | 指定用户的家目录,而不要使用默认值。务必使用绝对路径 | -r | 创建一个系统帐号 | -s | 后面接一个shell。没有指定则默认是 /bin/bash | -e | 后面接一个日期,格式为“YYYY-MM-DD”此项目可写入 shadow 第八字段,帐号失效日期的设置项目 | -f | 后面接 shadow 的第七字段项目,指定密码是否会失效。0为立刻失效, -1 为永远不失效(密码只会过期而强制于登录时重新设置而已。) |
不知道/etc/shadow内容结构的可以看下用户和用户组-UID和GID,里面有对/etc/shadow结构的详细介绍
范例1:参考默认值创建一个使用者 vbird1
[root@study ~]
创建的过程看似只是新增了一个用户,其实对于系统来说,完成这个命令在后台执行很多对用户来说毫无感知的行为
- 首先,系统需要将用户信息记录在 /etc/passwd 和 /etc/shadow 末尾追加一条记录,同时分配给用户一个UID。
- 然后在/home下给用户自动创建一个目录名和用户名一样的家目录。比如上面的例子中,创建的目录将是/home/vbird1
[root@study ~]
/home/vbird1 drwx------. 3 vbird1 vbird1 74 Jul 20 21:50 /home/vbird1
- 接着,复制/etc/ske(含创建用户时默认配置的文件)下所有的文件至/home/vbird1。用
ls -al 可查看全部文件(包括隐藏文件) - 最后新建一个与该用户名一样的用户组。即在创建了用户vbird1的时候,也创建了一个vbird1的用户组,用户vbird1默认属于用户组vbird1
[root@study ~]
/etc/passwd:vbird1:x:1003:1004::/home/vbird1:/bin/bash
/etc/shadow:vbird1:!!:16636:0:99999:7:::
/etc/group:vbird1:x:1004:
范例2:假设我已知道我的系统当中有个群组名称为 users ,且UID1500 并不存在,请用 users 为初始群组,以及 uid 为 1500 来创建一个名为 vbird2 的帐号
[root@study ~]
[root@study ~]
drwx------. 4 vbird2 users 4096 Feb 25 09:59 /home/vbird2
[root@study ~]
/etc/passwd:vbird2:x:1500:100::/home/vbird2:/bin/bash
/etc/shadow:vbird2:!!:14300:0:99999:7:::
看一下,UID 与 initial group 确实改变成我们需要的了。
范例3:创建一个系统帐号,名称为 vbird3
[root@study ~]
[root@study ~]
ls: cannot access /home/vbird3: No such file or directorya
可以看到,不会主动创建主文件夹
[root@study ~]
/etc/passwd:vbird3:x:100:103::/home/vbird3:/bin/bash
/etc/shadow:vbird3:!!:14300::::::
/etc/group:vbird3:x:103:
系统账号默认不会主动建立家目录。
其实 useradd 的默认值可以使用下面的方法调用出来:
[root@study ~]
GROUP=100 <-- 默认的群组
HOME=/home <-- 默认的主文件夹所在目录
INACTIVE=-1 <-- 密码失效日,在shadow 内的第7栏
EXPIRE= <-- 帐号失效日,在shadow 内的第8栏
SHELL=/bin/bash <-- 默认的 shell
SKEL=/etc/skel <-- 使用者主文件夹的内容数据参考目录
CREATE_MAIL_SPOOL=yes <-- 是否主动帮使用者创建邮件信箱(mailbox)
说明:
- INACTIVE=-1:如果是 0 代表密码过期立刻失效, 如果是 -1 则是代表密码永远不会失效,如果是数字,如 30 ,则代表过期 30 天后才失效
修改密码:passwd
选项与参数 | 含义 |
---|
–stdin | 可以通过来自前一个管线的数据,作为密码输入,对 shell script 有帮助 | -l | 是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上,使密码失效 | -u | 与 -l 相对,是 Unlock 的意思 | -S | 列出密码相关参数,亦即 shadow 文件内的大部分信息 | -n | 后面接天数,设置多久不可修改密码天数,shadow 的第 4 字段 | -x | 后面接天数,设置多久内必须要更动密码,shadow 的第 5 字段 | -w | 后面接天数,设置密码过期前的警告天数,shadow 的第 6 字段 | -i | 后面接“日期”,设置密码失效日期,shadow 的第 7 字段 |
如果不知道/etc/shadow内容结构的可以看下用户和用户组-UID和GID,里面有对/etc/shadow内容的详细介绍
范例1: 以root身份给 vbird2设置密码
[root@study ~]
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.
创建用户后实际上该用户还没有登录系统的权限,因为在不设置密码的情况下,在/etc/shadow中该用户记录中以冒号分割的第二列将显示为两个感叹号“!!”,这说明不允许该用户登录系统。因此需要同时设置密码。
普通用户也可以使用passwd来修改自己的密码,但是需要提供当前用户的密码(旧密码),并且密码不能太多简单,因为系统会拒绝普通用户设置过于简单的密码;并且用户在运行这个命令式,后面不能跟参数,哪怕是自己用户名都不行。
范例2:用 vbird2 登陆后,修改 vbird2 自己的密码
[vbird2@study ~]$ passwd
范例3:使用 standard input 创建用户的密码
[root@study ~]
Changing password for user vbird2.
passwd: all authentication tokens updated successfully
如果想要让 vbird2 的密码具有相当的规则,比如说让 vbird2 每 60 天需要变更密码, 密码过期后 10 天未使用就宣告帐号失效,那该如何处理?
范例4:管理 vbird2 的密码使具有 60 天变更、密码过期 10 天后帐号失效的设置
先查看vbirds2的密码信息
[root@study ~]
vbird2 PS 2015-07-20 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@study ~]
[root@study ~]
vbird2 PS 2015-07-20 0 60 7 10 (Password set, SHA512 crypt.)
范例5:让 vbird2 的帐号失效,观察完毕后再让她失效
[root@study ~]
[root@study ~]
vbird2 LK 2015-07-20 0 60 7 10 (Password locked.)
可以看到vbird2账号得状态变成“ LK, Lock ”了,无法登陆了。
[root@study ~]
vbird2:!!$6$iWWO6T46$uYStdkB7QjcUpJaCLB.OOp...:16636:0:60:7:10::
密码字段加上了 !! 。
[root@study ~]
[root@study ~]
vbird2:$6$iWWO6T46$uYStdkB7QjcUpJaCLB.OOp...:16636:0:60:7:10::
密码字段恢复正常
查阅密码参数:chage
除了使用 passwd -S 之外,还可以用chage 显示更详细的密码参数显示功能。 语法:
[root@study ~]
选项与参数 | 含义 |
---|
-l | 列出该帐号的详细密码参数; | -d | 后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD | -E | 后面接日期,修改 shadow 第八字段(帐号失效日),格式 YYYY-MM-DD | -I | 后面接天数,修改 shadow 第七字段(密码失效日期) | -m | 后面接天数,修改 shadow 第四字段(密码最短保留天数) | -M | 后面接天数,修改 shadow 第五字段(密码多久需要进行变更) | -W | 后面接天数,修改 shadow 第六字段(密码过期前警告日期) |
范例1:列出 vbird2 的详细密码参数
[root@study ~]
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
范例2:创建一个名为 agetest 的帐号,该帐号第一次登陆后使用默认密码,但必须要更改过密码后,使用新密码才能够登陆系统使用 bash 环境
[root@study ~]
[root@study ~]
[root@study ~]
[root@study ~]
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
语法:
[root@study ~]
选项与参数 | 含义 |
---|
-c | 后面接帐号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些帐号的说明 | -d | 后面接帐号的主文件夹,即修改 /etc/passwd 的第6字段 | -e | 后面接日期,格式是 YYYY-MM-DD,账号失效日期,/etc/shadow 的第8个字段 | -f | 后面接天数,为密码失效宽限天数,/etc/shadow的第7字段 | -g | 后面接初始群组,修改GID ,/etc/passwd 的第4个字段 | -G | 后面接次要群组,修改这个使用者能够支持的群组,修改的是 /etc/group | -a | 与 -G 合用,可“增加次要群组的支持”而非“设置” | -l | 后面接帐号名称。修改帐号名称, /etc/passwd 的第1字段 | -s | 后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等等 | -u | 后面接 UID 数字啦!即 /etc/passwd 第3个字段 | -L | 暂时将使用者的密码冻结,让他无法登陆。其实仅改 /etc/shadow 的密码栏 | -U | 解冻账号,拿掉/etc/shadow 密码栏的“!!” |
仔细的比对,会发现 usermod 的选项与 useradd 非常类似, 这是因为usermod 也是用来微调 useradd 增加的使用者参数,不过 usermod 还是有新增的选项, 那就是 -L 与 -U ,不过这两个选项其实与 passwd 的 -l, -u 是相同的。
范例1:修改使用者 vbird2 的说明栏,加上“VBird’s test”的说明。
[root@study ~]
[root@study ~]
vbird2:x:1500:100:VBird's test:/home/vbird2:/bin/bash
范例2:使用者 vbird2 这个帐号在 2015/12/31 失效。
[root@study ~]
[root@study ~]
Account expires : Dec 31, 2015
由于系统账号默认是没有家目录的,所以前面我们创建的系统账号 vbird3默认也是没有家目录
范例3:为vbird3创建家目录
[root@study ~]
ls: cannot access /home/vbird3: No such file or directory <==确认一下,确实没有主文件夹的存在。
[root@study ~]
[root@study ~]
[root@study ~]
[root@study ~]
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
[root@study ~]
选项与参数:
范例1:删除 vbird2 ,连同主文件夹一起删除
root@study ~]
新增和删除用户组
群组的内容都与这两个文件有关:/etc/group, /etc/gshadow。
增加用户组:groupadd
[root@study ~]
选项与参数 | 含义 |
---|
-g | 后面接某个特定的 GID,用来直接给予某个 GID | -r | 创建系统群组,与 /etc/login.defs 内的 GID_MIN 有关。 |
范例1:新建一个群组,名称为 group1
[root@study ~]
[root@study ~]
/etc/group:group1:x:1503:
/etc/gshadow:group1:!::
群组的 GID 也是会由 1000 以上最大 GID+1 来决定。
修改群组:groupmod
选项与参数 | 含义 |
---|
-g | 修改既有的 GID 数字 | -n | 修改既有的群组名称 |
范例1:将刚刚上个指令创建的 group1 名称改为 mygroup , GID为201
[root@study ~]
[root@study ~]
/etc/group:mygroup:x:201:
/etc/gshadow:mygroup:!::
删除用户组:groupdel
[root@study ~]
范例1:将刚刚的 mygroup 删除
[root@study ~]
如果有已有用户属于我们想要删除的组,该操作会失败。如范例2
范例2:删除 vbird1 这个群组
[root@study ~]
groupdel: cannot remove the primary group of user 'vbird1'
如果要删除,可以采用一下1种方法 1、修改 vbird1 的 GID; 2、删除 vbird1 这个使用者。
检查用户信息
查看用户:users、who、w
使用命令users可以查看当前系统有哪些用户。如在当前系统中运行users,就会发现有两个root在当前机器上登录。实际上,Linux会把所有来自不同终端的活动定义为一个会话users 命令只能查看当前系统登录用户。要查看更多信息可以通过who 或 w 来查询。
[root@study ~]
root root
[root@study ~]
dmtsai tty2 2015-07-07 23:07
dmtsai pts/0 2015-07-22 00:18 (192.168.1.100)
who命令显示的结果有3列,分别代表登录用户名、用户登录的终端、用户登录的时间。 如果用户从远程网络登录,则显示远程主机名或IP地址。
[root@study ~]
01:49:18 up 25 days, 3:34, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
dmtsai tty2 07Jul15 12days 0.03s 0.03s -bash
dmtsai pts/0 172.16.200.254 00:18 6.00s 0.31s 0.11s sshd: dmtsai [priv]
- 第一行显示当前时间、系统运行时间,已登录的用户数量和系统负载。
- 第二行是各个项目的说明
- 第一列:登录用户的用户名
- 第二列:用户登录的终端
- 第三列:如果用户从网络登录,则显示远程主机名或IP地址
- 第四列:用户登录时间
- 第五列:用户闲置时间
- 第六列:与终端相关的当前所有运行进程消耗的CPU时间总量
- 第七列:当前WHAT列所对应的进程所消耗的CPU时间总量
- 第八列:用户当前运行的进程
- 第三行以后,每行代表一个使用者。如上所示,dmtsai 从终端名为 tty2登录。
调查用户:finger
Linux系统默认未安装finger,先使用yum -y install finger 完成安装
选项与参数 | 含义 |
---|
-s | 仅列出使用者的帐号、全名、终端机代号与登录时间等 | -m | 列出与后面接的帐号相同者,而不是利用部分比对 (包括全名部分) |
范例1:观察 vbird1 的使用者相关帐号属性
[root@study ~]
Login: vbird1 Name:
Directory: /home/vbird1 Shell: /bin/bash
Never logged in.
No mail.
No Plan.
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 文件,并将该文件取出来说明
范例2:找出目前在系统上面登录的使用者与登录时间
[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
《鸟哥Linux私房菜-基础版》.pdf 《Linux系统命令及Shell脚本实践指南》.pdf
|