二十五、账号管理(四)

king's blog本节我们来聊一聊如何查看当前的在线用户,在线用户间相互发信息,账号检查等,主要内容如下:
一、查询系统的在线用户
二、在线用户间相互通信
三、账号检查

一、查询系统的在线用户

linux是一个多用户系统,可同时容纳多个用户在线使用,那如何查看现在系统有多少用户在线,可使用w、who、last、lastlog等命令

1.w

可通过命令w来查看当前的在线用户,比如:

1
2
3
4
5
6
7
8
9
10
11
oracle@ETS157:~> w
 17:02:33 up 109 days,  8:21, 11 users,  load average: 0.00, 0.01, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0     16:08    0.00s  0.33s  0.00s w
weblogic pts/1     27Feb17 22days  1:17m  0.00s /bin/sh /weblogic/Desktop/start_script/1_startSecurityServer.sh
weblogic pts/2     27Feb17 22days 43:51   0.00s /bin/sh /weblogic/Desktop/start_script/2_startWebLogic.sh
weblogic pts/3     27Feb17 22days  1:14m  0.00s /bin/sh /weblogic/Desktop/start_script/3_startManagedWebLogic.sh
weblogic pts/4     27Feb17 22days  1:10m  0.00s /bin/sh /weblogic/Desktop/start_script/4_startREServer.sh
weblogic pts/5     27Feb17 22days 52:16   0.00s /bin/sh /weblogic/Desktop/start_script/5_startAMLServer.sh
weblogic pts/6     27Feb17 22days 22:36   0.00s /bin/sh /weblogic/Desktop/start_script/6_startSimulator.sh
weblogic :0        21Dec16 ?xdm?  11days  3:50  /usr/lib/gdm/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1
2.who

也可通过who命令来查看,只是显示结果与w有所不同

1
2
3
4
5
6
7
8
root     pts/0        2017-03-21 16:08 (10.80.13.195)
weblogic pts/1        2017-02-27 09:23 (:0.0)
weblogic pts/2        2017-02-27 09:23 (:0.0)
weblogic pts/3        2017-02-27 09:23 (:0.0)
weblogic pts/4        2017-02-27 09:23 (:0.0)
weblogic pts/5        2017-02-27 09:23 (:0.0)
weblogic pts/6        2017-02-27 09:23 (:0.0)
weblogic :0           2016-12-21 13:25
3.last

如果想查看最近的登陆用户,可使用last命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
oracle@ETS157:~> last
root     pts/0        10.80.13.195     Tue Mar 21 16:08   still logged in
king     pts/0        10.80.13.195     Tue Mar 21 15:37 - 15:38  (00:01)
weblogic pts/0        10.80.13.195     Tue Mar 21 09:26 - 15:35  (06:09)
weblogic pts/0        10.80.13.195     Mon Mar 20 14:17 - 15:46  (01:29)
weblogic pts/0        10.80.13.195     Mon Mar 20 13:23 - 14:16  (00:52)
weblogic pts/0        10.80.13.195     Mon Mar 20 09:36 - 13:17  (03:41)
weblogic pts/0        10.80.13.195     Fri Mar 17 10:13 - 10:51  (00:37)
weblogic pts/0        10.80.13.195     Fri Mar 17 08:40 - 09:36  (00:55)
weblogic pts/0        10.80.13.195     Thu Mar 16 09:16 - 17:35  (08:18)
weblogic pts/0        10.80.13.195     Wed Mar 15 17:07 - 17:41  (00:34)
weblogic pts/0        10.80.13.195     Wed Mar 15 09:01 - 11:13  (02:11)
weblogic pts/0        10.80.13.195     Tue Mar 14 17:18 - 17:41  (00:23)
weblogic pts/7        10.80.13.195     Fri Mar 10 16:26 - 17:47  (01:21)
weblogic pts/0        10.80.13.195     Fri Mar 10 14:17 - 16:31  (02:13)
weblogic pts/7        10.80.13.195     Thu Mar  9 08:54 - 17:40  (08:46)
oracle   pts/0        10.80.13.101     Wed Mar  8 09:39 - 09:50 (1+00:11)
weblogic pts/0        10.80.13.195     Tue Mar  7 13:50 - 17:45  (03:54)
weblogic pts/0        10.80.13.195     Mon Mar  6 13:31 - 17:16  (03:44)
weblogic pts/0        10.80.13.101     Mon Feb 27 15:32 - 16:31 (2+00:58)
weblogic pts/6        :0.0             Mon Feb 27 09:23   still logged in
weblogic pts/5        :0.0             Mon Feb 27 09:23   still logged in
weblogic pts/4        :0.0             Mon Feb 27 09:23   still logged in
weblogic pts/3        :0.0             Mon Feb 27 09:23   still logged in
weblogic pts/2        :0.0             Mon Feb 27 09:23   still logged in
weblogic pts/1        :0.0             Mon Feb 27 09:23   still logged in
weblogic pts/0        10.80.13.101     Mon Feb 27 09:21 - 11:25  (02:03)
weblogic pts/6        :0.0             Fri Feb 24 16:02 - 09:22 (2+17:19)
weblogic pts/5        :0.0             Fri Feb 24 16:02 - 09:22 (2+17:19)
weblogic pts/4        :0.0             Fri Feb 24 16:02 - 09:22 (2+17:19)
weblogic pts/3        :0.0             Fri Feb 24 16:02 - 09:22 (2+17:19)
weblogic pts/2        :0.0             Fri Feb 24 16:02 - 09:22 (2+17:19)
weblogic pts/1        :0.0             Fri Feb 24 16:02 - 09:22 (2+17:19)
weblogic pts/6        :0.0             Fri Feb 24 14:39 - 16:02  (01:23)
weblogic pts/5        :0.0             Fri Feb 24 14:38 - 16:02  (01:23)
weblogic pts/4        :0.0             Fri Feb 24 14:38 - 16:02  (01:23)
weblogic pts/3        :0.0             Fri Feb 24 14:38 - 16:02  (01:23)
4.lastlog

如果想查看系统所有用户最近一次的登陆时间,可使用lastlog命令(执行该命令,读取的是/var/log/lastlog文件内容)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
oracle@ETS157:~> lastlog
Username                Port     Latest
at                               **Never logged in**
bin                              **Never logged in**
daemon                           **Never logged in**
ftp                              **Never logged in**
games                            **Never logged in**
gdm                              **Never logged in**
haldaemon                        **Never logged in**
lp                               **Never logged in**
mail                             **Never logged in**
man                              **Never logged in**
messagebus                       **Never logged in**
mysql                            **Never logged in**
news                             **Never logged in**
ntp                              **Never logged in**
polkituser                       **Never logged in**
postfix                          **Never logged in**
pulse                            **Never logged in**
puppet                           **Never logged in**
root                    pts/0    Tue Mar 21 16:08:16 +0800 2017
sshd                             **Never logged in**
suse-ncc                         **Never logged in**
uucp                             **Never logged in**
uuidd                            **Never logged in**
wwwrun                           **Never logged in**
king                    pts/0    Tue Mar 21 15:37:37 +0800 2017
weblogic                pts/0    Tue Mar 21 09:26:18 +0800 2017
oracle                  pts/0    Wed Mar  8 09:39:13 +0800 2017
tester                           **Never logged in**
abc                              **Never logged in**

二、在线用户间相互通信

比如现在系统要重启,如果通知所有的在线用户logout呢,此时可使用通信命令,比如:write、wall、mail,下面看看具体的例子

1.write

给在线的linux指定用户发送消息,发送方的mesg=y,要不然无法用write发送信息。接收方则有如下两种场景:
1.root无论给谁发,对方都是被动接收(必须),按 ctrl +D 结束发送
2.普通用户给root发,则需要根据root的mesg状态来判断(输入mesg可查看状态;输入mesg y/n分别代表开启、关闭),如果是y,则root能接收到该信息,按 ctrl +D 结束发送/接收

命令格式: write username TTY

例子1:root给其他用户发送消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#1.要给oracle用户发送消息,先通过who命令查看oracle登陆用户的TTY
ETS157:/opt/project # who
root     pts/0        Mar 21 16:08 (10.80.13.195)
weblogic pts/1        Feb 27 09:23 (:0.0)
weblogic pts/2        Feb 27 09:23 (:0.0)
weblogic pts/3        Feb 27 09:23 (:0.0)
weblogic pts/4        Feb 27 09:23 (:0.0)
weblogic pts/5        Feb 27 09:23 (:0.0)
weblogic pts/6        Feb 27 09:23 (:0.0)
oracle   pts/7        Mar 21 17:14 (10.80.13.195)-------------> 找到TTY为pts/7
weblogic :0           Dec 21 13:25

#2.给oracle用户发送消息,按Ctrl+D结束
ETS157:/opt/project # write oracle pts/7
Hello, please logout,thanks
Ctrl+D

#3.此时oracle的窗口会自动接收消息
racle@ETS157:~>
Message from root@ETS157 on pts/0 at 17:14 ...
Hello, please logout,thanks
EOF

oracle@ETS157:~>

例子2:普通用户给root发送消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#1.oracle用户的窗口,输入如下内容
oracle@ETS157:~> who
root     pts/0        2017-03-21 16:08 (10.80.13.195)
weblogic pts/1        2017-02-27 09:23 (:0.0)
weblogic pts/2        2017-02-27 09:23 (:0.0)
weblogic pts/3        2017-02-27 09:23 (:0.0)
weblogic pts/4        2017-02-27 09:23 (:0.0)
weblogic pts/5        2017-02-27 09:23 (:0.0)
weblogic pts/6        2017-02-27 09:23 (:0.0)
oracle   pts/7        2017-03-21 17:14 (10.80.13.195)
weblogic :0           2016-12-21 13:25
oracle@ETS157:~> mesg
is n

oracle@ETS157:~> write root pts/0------------->mesg=n时,发送失败
write: you have write permission turned off.
oracle@ETS157:~> mesg y
oracle@ETS157:~> mesg
is y

oracle@ETS157:~> write root pts/0------------->mesg=y时,发送成功
Hello,I am oracle,thanks!
oracle@ETS157:~>


#2.root用户的窗口,自动接收如下内容(前提是root窗口mesg也是开启的,否则也无法接收到)
ETS157:/opt/project # mesg
is y
Message from oracle@ETS157 on pts/7 at 17:22 ...
Hello,I am oracle,thanks!
EOF
2.wall

上面的write是给指定的单个用户发送广播信息,wall则是给所有在线用户发送广播信息,所有用户均可使用wall,有两种用法
1.wall后跟发送信息
2.将文件中的内容广播出去(root用户)

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#1.方式1,直接广播内容
weblogic@ETS157:~> wall
will shutdown,thanks
wall: /dev/10.80.13.101:0: No such file or directory

Broadcast Message from weblogic@ETS157
        (/dev/pts/7) at 9:20 ...

will shutdown,thanks
weblogic@ETS157:~>

#2.方式2,将文件中的内容广播出去
ETS157:/opt/project/test # wall -n d.txt

abcd
1234
1111
9999
3.mail

mail,顾名思义,发邮件的意思。write/wall都是给在线用户发消息。mail则不要求用户一定在线,linux下每个用户都有一个专门的邮件保存目录,比如root用户的邮件目录为:/var/spool/mail/root ; oracle用户的邮件目录为:/var/spool/mail/oracle。具体格式如下:

1
2
3
4
5
mail: illegal option -- -
Usage: mail [-BDFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr]
             [-r from-addr] [-h hops] [-A account] [-R reply-addr] [-S option] to-addr ...
       mail [-BDeHiInNRv~] [-T name] [-A account] -f [name] [-S option]
       mail [-BDeinNRv~] [-A account] [-u user] [-S option]

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#1.root用户给本机的weblogic用户发送邮件(发送方,方式一)
ETS157:~ # mail weblogic@localhost -s "Hello"   #----->本机的话,localhost可省略,-s:表示标题
please run first.sh at 17:00, thanks            #----->正文
.                                               #----->表示结束
EOT
ETS157:~ #

#2.可将发送的内容想保存到文件中(发送方,方式二)
ETS157:~ # mail weblogic@localhost -s "Hello" < mail_contents.txt
ETS157:~ #

#3.weblogic端查看邮件(接收方)
#方式1:直接查看文件
weblogic@ETS157:/opt/project/test> cat /var/mail/weblogic

From root@ETS157.site  Wed Mar 22 09:42:24 2017
Return-Path: <root@ETS157.site>
X-Original-To: weblogic@localhost
Delivered-To: weblogic@localhost.site
Received: by ETS157.site (Postfix, from userid 0)
        id 57F181E3E3D1; Wed, 22 Mar 2017 09:42:24 +0800 (CST)
Date: Wed, 22 Mar 2017 09:42:24 +0800
To: weblogic@localhost.site
Subject: Hello
User-Agent: Heirloom mailx 12.2 01/07/07
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20170322014224.57F181E3E3D1@ETS157.site>
From: root@ETS157.site (root)

please run first.sh at 17:00, thanks


#方式2:通过mail去查看
weblogic@ETS157:/var/mail> mail
Heirloom mailx version 12.2 01/07/07.  Type ? for help.
"/var/mail/weblogic": 1 message 1 new
>N  1 root@ETS157.site   Wed Mar 22 09:42   18/596   Hello
?
Message  1:
From root@ETS157.site  Wed Mar 22 09:42:24 2017
X-Original-To: weblogic@localhost
Delivered-To: weblogic@localhost.site
Date: Wed, 22 Mar 2017 09:42:24 +0800
To: weblogic@localhost.site
Subject: Hello
User-Agent: Heirloom mailx 12.2 01/07/07
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
From: root@ETS157.site (root)

please run first.sh at 17:00, thanks

? ?                                                    #---------->表示查看帮忙
               mail commands
type <message list>             type messages
next                            goto and type next message
from <message list>             give head lines of messages
headers                         print out active message headers
delete <message list>           delete messages
undelete <message list>         undelete messages
save <message list> folder      append messages to folder and mark as saved
copy <message list> folder      append messages to folder without marking them
write <message list> file       append message texts to file, save attachments
preserve <message list>         keep incoming messages in mailbox even if saved
Reply <message list>            reply to message senders
reply <message list>            reply to message senders and all recipients
mail addresses                  mail to specific recipients
file folder                     change to another folder
quit                            quit and apply changes to folder
xit                             quit and discard changes made to folder
!                               shell escape
cd <directory>                  chdir to directory or home if none given
list                            list names of all available commands

A <message list> consists of integers, ranges of same, or other criteria
separated by spaces.  If omitted, mail uses the last message typed.
?

三、账号检查

这几个命令属于管理员命令,所以只有root用户才能使用

1.pwck

pwck,主要用于比较/etc/passwd , /etc/shadow两个文件,比如用户目录是否存在,用户数量是否匹配等,如下面的例子

1
2
3
4
5
6
#从下面的输出来看,告诉我们pulse和suse-ncc两个用户的用户目录不存在,由于这个两个用户是系统用户,该提示信息属于正常提示
ETS157:~ # pwck
Checking `/etc/passwd'
User `pulse'
: directory `/var/lib/pulseaudio' does not exist.
User `suse-ncc'
: directory `/var/lib/YaST2/suse-ncc-fakehome' does not exist.
Checking `/etc/shadow'
.
2.pwconv

pwconv,主要将/etc/passwd中的用户名和密码移到/etc/shadow中,该命令主要做下面两项工作
1.比对/etc/passwd及/etc/shadow,如果/etc/passwd内存在账号并没有对应的/etc/shadow密码时,则pwconv会去 /etc/login.defs 取用相关癿密码数据,并建立/etc/shadow数据
2.如果/etc/passwd 内存在加密后的密码数据时,则pwconv 会将该密码栏移动到/etc/shadow内,并将原来/etc/passwd内相对应的密码栏变成X,一般来说,如果正常使用useradd添加用户时,使用pwconv后并不会有任何其他的动作,因为/etc/passwd 和/etc/shadow并不会出现上面的问题。但如果是手动设定账号(比如手动修改/etc/passwd文件),pwconv就非常重要。

3.chpasswd

chpasswd,该命令用于读取加密前的密码,并加密后写入到/etc/shadow中,通常用于批量创建账号的时候设置密码,格式如下:echo “username:password” | chpasswd,该命令用得较少,了解即可

Tags:
文 / 甲乙丙丁
LEAVE A REPLY

loading