文章目录
1 介绍
内容:
- Linux 中创建、删除用户,及用户组等操作。
- Linux 中的文件权限设置。
知识点:
- Linux 用户管理
- Linux 权限管理
2 Linux 用户管理
Linux 是一个可以实现多用户登录的操作系统,比如“李雷”和“韩梅梅”都可以同时登录同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制,不同用户不可以轻易地查看、修改彼此的文件。
2.1 查看用户
$ who am i
# 或者
$ who mom likes
skx@ubuntu:~$ who am i
skx pts/1 2020-06-06 15:29 (tmux(2864).%0)
skx@ubuntu:~$ who mom likes
skx pts/1 2020-06-06 15:29 (tmux(2864).%0)
skx@ubuntu:~$ whoami
skx
输出的第一列表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可),第二列的 pts/0 中 pts 表示伪终端,伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端,pts/0 后面那个数字就表示打开的伪终端序号,再打开一个终端,然后在里面输入 who am i,第二列就变成 pts/1 了,第三列则表示当前伪终端的启动时间。
在本地的 Ubuntu 系统上输入 who am i 和 who mom likes 命令不会输出任何内容,这是因为当前使用的 SHELL 不是登录时的 SHELL,没有用户与 who 的 stdin 相关联,因此不会输出任何内容。
此时我们只需要打开一个登录 SHELL 的终端例如 Tmux,再在新的终端里执行命令即可。
$ tmux
who 命令其它常用参数
参数 | 说明 |
---|---|
-a | 打印能打印的全部 |
-d | 打印死掉的进程 |
-m | 同 am i,mom likes |
-q | 打印当前登录用户数及用户名 |
-u | 打印当前登录用户登录信息 |
-r | 打印运行等级 |
2.2 创建用户
root 账户拥有整个系统至高无上的权利,比如 新建/添加 用户。
要创建用户需要 root 权限,就要用到 sudo 命令。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组(稍后会介绍如何查看和添加用户组)。
su,su- 与 sudo
su 可以切换到用户 user,执行时需要输入目标用户的密码。
sudo <cmd> 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。
su - <user> 命令也是切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的。
现在我们新建一个叫 lilei 的用户(Linux 下密码输入是不显示任何内容的):
$ sudo adduser lilei
这个命令不但可以添加用户到系统,同时也会默认为新用户在 /home 目录下创建一个工作目录:
现在已经创建好一个用户,使用如下命令切换登录用户:
$ su -l lilei
输入如下命令并查看输出:
退出当前用户跟退出终端一样,可以使用 exit 命令或者使用快捷键 Ctrl+D。
- adduser 和 useradd 的区别
useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd <username> 去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。
2.3 用户组
每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源。一个用户可以属于多个用户组,就想你既属于家庭,又属于学校或公司。
在 Linux 里面如何知道自己属于哪些用户组呢?
方法一:使用 groups 命令
$ groups skx
skx@ubuntu:~$ groups skx
skx : skx adm cdrom sudo dip plugdev lpadmin sambashare
其中冒号之前表示用户,后面表示该用户所属的用户组。每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组。
方法二:查看 /etc/group 文件
$ cat /etc/group | sort
cat 命令用于读取指定文件的内容并打印到终端输出。| sort 表示将读取的文本进行一个字典排序再输出,可以在最下面看到 skx 的用户组信息:
可以使用 grep 命令过滤掉一些你不想看到的结果:
/etc/group 文件格式说明
/etc/group 的内容包括用户组(Group)、用户组口令、GID(组 ID) 及该用户组所包含的用户(User),每个用户组一条记录。格式如下:
group_name:password:GID:user_list
password 字段为 x 表示密码不可见。
这里需要注意,如果用户的 GID 等于用户组的 GID,那么最后一个字段 user_list 就是空的,这里的 GID 是指用户默认所在组的 GID,可以使用 id 命令查看。
将其它用户加入 sudo 用户组
默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:
# 注意 Linux 上输入密码是不会显示的
$ su -l lilei
$ sudo ls
会提示 lilei 不在 sudoers 文件中,意思就是 lilei 不在 sudo 用户组中,至于 sudoers 文件(/etc/sudoers)你现在最好不要动它。
使用 usermod 命令可以为用户添加用户组,同样使用该命令必需有 root 权限,可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。
这里用 skx 用户执行 sudo 命令将 lilei 添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限,首先我们切换回 skx 用户。
$ su - skx
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei
然后再切换回 lilei 用户,现在就可以使用 sudo 获取 root 权限了。
2.4 删除用户和用户组
$ sudo deluser lilei --remove-home
使用 --remove-home 参数在删除用户时候会一并将该用户的工作目录一并删除。如果不使用那么系统会自动在 /home 目录为该用户保留工作目录。
删除用户组可以使用 groupdel 命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。
3 Linux 文件权限
文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。
Unix/Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux 系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。
在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。
3.1 查看文件权限
使用 ls 查看文件权限
$ ls -l
文件类型和权限那含义如下:
-
文件类型:
Linux 里面一切皆文件
设备文件: /dev 目录下有各种设备文件,大都跟具体的硬件设备相关。
socket:网络套接字。
pipe:管道。
软链接文件:链接文件是分为两种的,另一种是“硬链接”,软链接等同于 Windows 上的快捷方式。 -
文件权限
包括读权限,写权限,执行权限。
一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。 -
链接数
链接到该文件所在的 inode 结点的文件名数目 -
文件大小
使用 -h 可以更直观的查看文件的大小。
ls 一些常见用法:
- -a:显示除了 .(当前目录)和 ..(上一级目录)之外的所有文件,包括隐藏文件(以 . 开头的文件)。
- -l:显示详细信息,ll -l 等于 ll
- -d:目录本身属性,而不是显示目录里面的文件属性
- -h:显示人类可读的大小(例如1K,234M,2G)
- -s:显示文件大小
- -S:按文件大小排序
3.2 变更文件所有者
使用 chown 命令
我们先在用户 lilei 下面创建一个文件,再将其所有者改为 skx
若前面已经删除 lilei 用户,这里重新创建一下。
$ su - lilei
$ pwd
$ touch iphone11
$ ls -alh iphone11
现在切换回到 skx 用户,使用以下命令变更文件所有者为 skx。
# 需要切换到 skx 用户执行以下操作
$ cd /home/lilei
$ sudo chown skx iphone11
$ ls -alh iphone11
发现文件所有者由 lilei 修改为 skx。
3.3 修改文件权限
使用 chmod 命令
文件的权限有两种表示方式:
- 方式一:二进制数字表示
每个文件有三组固定的权限,分别对应所有者,所属组,其他人。文件的读写执行对应字母 rwx,以二进制表示就是 111,用十进制表示就是 7。例如:权限 rw-rw-rw-,换成对应的十进制表示就是 666,这就表示这个文件的所者,所属组,其他人具有读写权限,不具有执行权限。
先往文件里面加点东西
$ echo "echo \"hello world\"" > iphone11
修改权限:
$ chmod 600 iphone11
$ ll -h iphone11
切换到 lilei 用户,尝试写入和读取操作,可以看到 lilei 用户已经不能读写这个 iphone11 文件了:
- 方式二:加减赋值操作
要完成上述实验相同的效果,你可以:
$ chmod go-rw iphone11
g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户)
+ 和 - 分别表示增加和去掉相应的权限。