假设你已经安装好了虚拟机,并且在上面装上了 ubuntu server 18.04
,那么开机之后,我们面临的第一个问题就是用户登陆。Linux 有一套非常优秀的用户权限管理系统,这些所有的用户信息,记录在 /etc/passwd
、/etc/shadow
、/etc/group
三个文件。
1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
3 bin:x:2:2:bin:/bin:/usr/sbin/nologin
4 sys:x:3:3:sys:/dev:/usr/sbin/nologin
5 sync:x:4:65534:sync:/bin:/bin/sync
6 games:x:5:60:games:/usr/games:/usr/sbin/nologin
7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
8 lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
9 mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
...
/etc/passwd 文件的每一行信息,代表一个用户,我们自己也能在这个文件按照上面的格式,写入这样的一行信息,也就相当于新增了一个用户。Linux 的所有一切,都可以通过修改一个文件改变,这就正是我们开篇提到的 一切皆文件
的概念。
在每一行信息中又通过 :
号分割成七个部分,每个部分又代表了不同的含义。
x
字符表示,其实它的真身保存在另外一个文件 /etc/shadow
,是加密的状态。/etc/group
。root
用户是 Linux 中的超级管理员,它的权重大到可以操作一切,甚至毁灭操作系统。所以本着小心谨慎的态度,我们一般不之间在生产环境中之间使用 root 用户,那么当普通用户需要访问一些比较高级的权限咋办,这时就可以用上 sudo
命令,它可以 借权
。
$ sudo apt-get update // 借权
但是每一个 sudo
,都要输入一次密码,长期下来,这实在是一件麻烦的事情,所以我们可以通过 /etc/sudoers
文件配置,让 某个用户使用 sudo 不用密码
。
# user privilege specification
jmjc ALL=(ALL:ALL) ALl (免 jmjc 用户的密码)
虽然通过 /etc/passwd
文件能直接操作用户,但是这种方式有点原始古老,也容易出错,更常见的是通过 命令操作
。
创建用户的第一步需要先创建用户组,针对不同的组我们后面可以设定不同的 权限管理
。
// 创建组
$ groupadd gname
// 删除组
$ groupdel gname
// 查看组ID
$ egrep 'gname' /etc/group
// 创建用户
$ useradd -g gid uname
// 删除用户
$ userdel uname
刚刚创建好的用户还不能使用,需要为其添加一个密码。
$ passwd uname // 激活用户,给用户设置一个密码
用户之间的切换。
$ sudo su // 切换到 root
$ su jmjc // 普通用户切换
有时候我们发现了服务器有异常,想要查看用户的登陆信息、历史的操作记录,看看有没有被留下哪些可疑的记录。可以通过下面这些操作。
// 当前 用户登陆信息,对应 /var/run/utmp 文件
$ w
$ who
// 历史 用户登陆信息,对应 /var/log/lastlog 文件
$ lastlog
// 当前 & 历史 用户登陆信息,对应 /var/log/wtmp 文件
$ last
// 登陆失败用户信息,对应 /var/log/btmp 文件
$ lastb
既然这些登陆的信息是保存在一个个的文件中,那么有可能被修改,但是这些信息都是二进制格式,如果要修改,需要通过 utmpdump
这个工具。
utmpdump /var/log/utmp > tmp_output.txt // 导出信息
utmpdump -r tmp_output.txt > /var/log/utmp // 可以修改后导入
用户的历史命令记录。
history // 查看历史记录,对应 ~/.bash_history 文件
history -c // 清空历史记录,有些发行版需要重启后才会生效