Linux 用户

用户

假设你已经安装好了虚拟机,并且在上面装上了 ubuntu server 18.04 ,那么开机之后,我们面临的第一个问题就是用户登陆。Linux 有一套非常优秀的用户权限管理系统,这些所有的用户信息,记录在 /etc/passwd/etc/shadow/etc/group 三个文件。


/etc/passwd

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 的所有一切,都可以通过修改一个文件改变,这就正是我们开篇提到的 一切皆文件 的概念。

在每一行信息中又通过 : 号分割成七个部分,每个部分又代表了不同的含义。

  • 1. 用户名。
  • 2. 密码,上面都是用 x 字符表示,其实它的真身保存在另外一个文件 /etc/shadow,是加密的状态。
  • 3. uid (用户编号),500 以内的 ID 已经被系统保留了,我们注册的普通用户一般都大于 500 或者 1000。
  • 4. gid (用户组编号),存放在单独管理用户组表 /etc/group
  • 5. 注释。
  • 6. 用户目录。
  • 7. shell 默认是 bash。

sudo

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 // 激活用户,给用户设置一个密码

su

用户之间的切换。

$ 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 // 清空历史记录,有些发行版需要重启后才会生效
更多教程 HTML5 教程 CSS3 教程 JavaScript 教程 JQuery 教程 React.js 教程 Node.js 教程 Koa2 教程 Python 教程 Linux 教程