Linux命令——用户权限管理
一、Linux用户管理
Linux用户管理
- 用户是Linux系统工作中重要的一环,用户管理包括用户与组账号的管理。
- 账号管理是指账号的新增、删除和修改、账号规划以及权限的授予等问题。
- 在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。
Linux用户权限
- Linux下有两种用户:超级用户(root)、普通用户。
- Linux系统中的root账号通常用于系统的维护和管理,它对Linux操作系统的所有部分具有不受限制的访问权限。在大多数版本的Linux中,都不推荐直接使用root账号登录系统。
- Linux普通用户在系统下的操作是受限的。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
<1> 查看当前用户:whoami
whoami该命令⽤户查看当前系统当前账号的⽤户名。可通过cat /etc/passwd查看系统⽤户信息。
由于系统管理员通常需要使⽤多种身份登录系统,例如通常使⽤普通⽤户登录系统,然后再以su命令切换到root身份对传统进⾏管理。这时候就可以使⽤whoami来查看当前⽤户的身份。再输入exit命令,就可以退出到原来的用户身份了。
<2> 查看登录用户:who
who命令用于查看当前所有登录系统的用户信息。
常用选项:
选项 | 含义 |
---|---|
-m或am I | 只显示运⾏who命令的⽤户名、登录终端和登录时间 |
-q或–count | 只显示⽤户的登录账号和登录⽤户的数量 |
-u或–heading | 显示列标题 |
<3> 添加用户账号:useradd
在Linux中添加用户账号可以使用adduser或useradd命令,因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样。
useradd命令的使用格式如下:
useradd [参数] 新建用户账号
参数 | 含义 |
---|---|
-d | 指定⽤户登录系统时的主⽬录,如果不使⽤该参数,系统⾃动在/home⽬录下建⽴与⽤户名同名⽬录为主⽬录 |
-m | ⾃动建⽴⽬录 |
-g | 指定组名称 |
<4> 设置用户密码:passwd
在Unix/Linux中,超级⽤户可以使⽤passwd命令为普通⽤户设置或修改⽤户⼝令。⽤户也可以直接使⽤该命令来修改⾃⼰的⼝令,⽽⽆需在命令后⾯使⽤⽤户名。
<5> 删除用户:userdel
命令 | 含义 |
---|---|
userdel abc(⽤户名) | 删除abc⽤户,但不会⾃动删除⽤户的主⽬录 |
userdel -r abc(⽤户名) | 删除⽤户,同时删除⽤户的主⽬录 |
<6> 添加、删除组账号:groupadd、groupdel
groupadd 新建组账号 groupdel 组账号 cat /etc/group 查看⽤户组
<7> 修改用户所在组:usermod
<8> 查看用户在哪些组:groups
二、Linux权限管理
2.1 文件访问者的分类(人)
文件和文件目录的所有者:u—User
文件和文件目录的所有者所在的组的用户:g—Group
其它用户:o—Others
02.文件类型和访问权限(事物属性)
2.2 文件的类型和访问权限
- 文件类型
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
- 基本权限
读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“—”表示不具有该项权限
2.3 文件权限值的表示方法
- 字符表示方法
Linux表示 | 说明 |
---|---|
r- - | 只读 |
-w- | 仅可写 |
- -x | 仅可执行 |
rw- | 可读可写 |
r-x | 可读可执行 |
-wx | 可写可执行 |
rwx | 可读可写可执行 |
- - - | 无权限 |
- 8进制数值表示方法
权限符号 | 八进制 | 二进制 |
---|---|---|
r- - | 4 | 100 |
-w- | 2 | 010 |
- -x | 1 | 001 |
rw- | 6 | 110 |
r-x | 5 | 101 |
-wx | 3 | 011 |
rwx | 7 | 111 |
- - - | 0 | 000 |
2.4 文件访问权限的相关设置方法与命令
<1> 修改文件权限:chmod
chmod 修改文件权限的方法有两种: 字母法与数字法。
- 字母法:
chmod u/g/o/a +/-/=rwx 文件名
[ u/g/o/a ] | 含义 |
---|---|
u | user 表示该⽂件的所有者 |
g | group 表示与该⽂件的所有者属于同⼀组( group )者, 即⽤户组 |
o | other 表示其他以外的⼈ |
a | all 表示这三者皆是 |
[ ±= ] | 含义 |
---|---|
+ | 增加权限 |
- | 撤销权限 |
= | 设定权限 |
rwx | 含义 |
---|---|
r | read 表示可读取, 对于⼀个目录, 如果没有r权限, 那么就意味着不能通过ls查看这个⽬录的内容。 |
w | write 表示可写入, 对于⼀个目录, 如果没有w权限, 那么就意味着不能在目录下创建新的文件。 |
x | excute 表示可执行, 对于⼀个目录, 如果没有x权限, 那么就意味着不能通过cd进⼊这个目录。 |
执行该命令时,我们可以仅对用户或用户组等进行权限操作,如下所示:
也可以同时对用户、用户组等进行权限操作
- 数字法:rwx也可以用2.3节中8进制数值表示法
如执⾏: chmod u=rwx,g=rx,o=r filename 就等同于: chmod u=7,g=5,o=4 filenamechmod 754 filename
<2> 修改文件的拥有者:chown
<3> 修改文件的所属组:chgrp
<4> 查看或修改文件掩码: umask
Linux下对于新建的文件和目录的默认权限如下
- 新建文件默认权限=0666
- 新建目录默认权限=0777
但实际上我们所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。
这里假设默认权限是default,则实际创建的出来的文件权限是:
default & ~umask
举个栗子:假设我们新建文件test1.txt,则默认权限为default为666,其二进制序列为110 110 110,那么umask为02,二进制序列为000 000 010,取反后为111 111 101。按照公式
110
110
110
(
d
e
f
a
u
l
t
)
&
111
111
101
(
∼
u
m
a
s
k
)
110
110
100
\ \ \ 110 \ 110 \ 110(default) \\ \& \ \ \ 111 \ 111 \ 101(\sim umask) \\ \ \ \ 110 \ 110 \ 100 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
110 110 110(default)& 111 111 101(∼umask) 110 110 100
那么文件test1.txt的权限就是rw- rw- --w,下图证明了上述栗子
注意:
这里会有一个误区:umask的作用是将现有的权限减去umask的权限,产生最终的权限,如果不能理解可以按照上述栗子的操作。切忌不能与减法混淆,即用666-002=664 ,这种做法是错误的!
2.5 粘滞位:t
为什么有粘滞位?
假设有这样一个目录dir对于所有用户都有rwx权限,用户就可以随意操作目录dir下的文件了,但是问题来了如果目录dir下有一个文件file.c,文件的权限如下
file.c文件对于普通用户来说只能读取,而不能写和执行,也就意味着不能对file.c进行修改和删除,但事实确不是这样的
如图所示,我虽然对你的文件只具备读权限,但是我可以删除你的文件,这也就意味着只要用户具有目录的写权限,就可以随意删除目录中的文件而不必担心文件的任何权限和拥有者。对于这种问题是不科学的,Linux操作系统引入了粘滞位的概念
粘滞位的使用
chmod +t 目录
增加了粘滞位后,我们就不可以删除别人的文件了
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除
三、关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限。
- 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。