Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员(root用户)申请一个账号,然后以这个账号的身份进入系统。每个用户账号都拥有一个唯一的用户名和各自的密码。Linux 的用户需要至少要属于一个组,也可以属于多个组。
用户在登录时输入正确的用户名和密码后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
(1)用户账号的添加、删除与修改;
(2)用户密码的管理;
(3)用户组的管理。
功能:添加用户
语法:useradd [选项] 用户名
常用选项:
(1)-c comment :指定一段注释性描述。
(2)-d 目录 :指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。若不指定目录,默认会自动在home目录下创建一个和用户名相同的目录。
(3)-g 用户组 :添加用户时指定用户所属的用户组。
(4)-G 用户组,用户组 :指定用户所属的附加组。
(5)-s Shell文件 :指定用户的登录Shell。
(6)-u 用户密码:指定用户的密码,如果同时有-o选项,则可以重复使用其他用户的标识号。
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
功能:删除帐号
语法:userdel [选项] 用户名
常用选项
(1)-r,把用户的主目录一起删除。
默认情况下只删除用户在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,不删除用户主目录,若想一同删除用户主目录,要使用-r选项。
用户管理的一项重要内容是用户密码的管理。用户账号刚创建时没有密码,但是被系统锁定,无法使用,必须为其指定密码后才可以使用(此时由root用户指定密码),即使是指定空密码。
超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
功能:指定用户密码或者修改用户密码
语法:passwd [选项] 用户名
常用选项:
(1)-l :锁定密码,即禁用账号。
(2)-u :密码解锁。
(3)-d :使账号无密码。
(4)-f :强迫用户下次登录时修改密码。
普通用户修改自己的密码时,passwd命令会先询问原密码,验证后再要求用户输入两遍新密码,如果两次输入的密码一致,则将这个密码指定给用户;而超级用户为用户指定密码时,就不需要知道原密码。
为了系统安全起见,用户应该选择比较复杂的密码,例如最好使用较长的密码,密码中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
为用户指定空密码时,执行下列形式的命令:
此命令将用户zhangsan 的密码删除,这样用户 zhangsan下一次登录时,系统就不再允许该用户登录了。
passwd 命令还可以用 -l(lock) 选项锁定某一用户,使其不能登录,例如:
功能:根据实际情况更改已有用户的有关属性,如用户号、主目录、用户组、登录Shell等。
语法:usermod [选项] 用户名
常用选项:
-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
(1)-c comment :指定一段注释性描述。
(2)-d 目录 :指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。若不指定目录,默认会自动在home目录下创建一个和用户名相同的目录。
(3)-g 用户组 :改变用户所在的用户组。
(4)-G 用户组,用户组 :指定用户所属的附加组
。
(5)-s Shell文件 :指定用户的登录Shell。
(6)-u 用户密码:指定用户的密码,如果同时有-o选项,则可以重复使用其他用户的标识号。
另外,有些系统可以使用选项:-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
功能:查询用户信息
语法:id 用户名
用户组类似于角色,系统可以对有共性的多个用户进行统一的管理。每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
功能:增加一个新的用户组
语法:groupadd [选项] 用户组
常用选项:
(1)-g GID :指定新用户组的组标识号(GID)。
(2)-o :一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
示例1:
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
此命令向系统中增加了一个新组group2,同时指定新组的组标识号是222。
可以在创建新用户时就指定用户组:
useradd -g 用户组 用户名
但是这种写法的前提是,先创建用户组,用户组已经存在。
功能:删除一个已有的用户组
语法:groupdel 用户组
功能:修改用户组自身的属性
语法:groupmod [选项] 用户组
常用选项:
(1)-g GID :为用户组指定新的组标识号。
(2)-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
(3)-n 新用户组 :将用户组的名字改为新名字
示例:
将用户组group1重命名为group2
为用户组group2指定新的组标识号1001
显示用户zhangsan的组
Linux下默认有两种用户:超级用户(root)、普通用户。
root:超级管理员,具有非常高的权限,可以再linux系统下做任何事情,不受限制
普通用户:具有一般权限,需要受权限约束(由root用户创建的)
超级用户:可以在linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
用户登录时尽量少用 root 帐号登录,因为它是系统管理员,最大的权限,避免操作失误。
退出登录使用ctrl+d或者命令行输入exit。
(1)普通用户切换到root用户:
su -
普通用户切换到root用户,需要输入root用户的密码。
(2)root用户切换到普通用户:
su - 普通用户名
root用户切换回普通用户不需要密码。但是,建议使用exit变回普通用户(或者快捷方式ctrl+d),因为使用su - 或者su,系统会生成一个bash。
注意一个细节:su和su - 都可以切换到root用户,那么su和su - 的区别是什么?su指令切换到root用户还在当前路径下;su - 切换到root用户在/root目录下。
普通用户权限,并没有最高 root 权限,如果普通用户需要使用 root 权限的时候, 通常都会在命令前面加上 sudo 。sudo是临时权限提升,以root身份来执行后面的命令
su和sudo的区别:su是身份完全转变,sudo是普通用户临时转变成root用户来执行命令,该命令执行完,仍为普通用户。
第一次使用sudo时,发现无法使用,怎么解决?
根本原因是用户没有加入到sudo的配置文件里,需要添加信任关系,以后再学习。
(1)普通用户更改自己的密码:
(2)超级用户更改普通用户的密码:
什么是权限?一件事情是否允许被特定的人做,权限约束的是人,文件本身是具有天然的权限属性的(r,w,x),权限等于人+事物的属性。权限要么约束特定的人群,要么修改事物的属性,所以权限的操作,要么修改人,要么修改事物的属性。
在 linux 中的每个用户必须属于一个组,不能独立于组外(用户组)。在 linux 中每个文件有所有者、所在组、其它组的概念(文件组)。
Linux中的用户类别:
1.拥有者 owner
2.所属组 group (为了组内协同)
3.其他 other
root和普通用户指的是具体的一个人。
拥有者、所属组、other指的是一种角色身份。
某一个人可能拥有这些身份中的一个或多个。
1.文件类型
Linux系统不以文件后缀作为区分文件类型的方式,以前缀(第一位)来区分文件类型。
-:普通文件(文本、动/静态库、可执行程序、源程序)
d:目录文件
c:字符设备文件(键盘与显示器)
b:块设备文件(磁盘)
p:管道文件(通信)
l:链接文件(软链接,类似Windows的快捷方式)
s:套接字文件
注意:gcc,g++是运行于操作系统之上的,它是以文件后缀来区分文件类型的。
2.基本权限
拥有者、所属组、其他人各自拥有3种权限,分别是 是否具有读权限、 是否具有写权限 、 是否具有可执行权限
r:具有读权限
w:具有写权限
x:具有可执行权限
-:不具有该权限
读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除、移动目录内文件的权限
执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
a)字符表示方法
因为权限位置固定,而且权限只有两种可能,要么具有要么没有,所以权限可以表示成数字形式。
功能:通过 chmod 指令,可以修改拥有者、所属组、其他组对文件或者目录的权限
语法:chmod [选项] 权限 文件名
常用选项:
(1)R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
普通用户只能修改自己是拥有者的文件的权限,修改别人的文件权限,要加上sudo,而超级用户root不受权限约束,可以随意修改所有文件的权限。
chmod修改权限的方式:
(1)使用+ 、-、= 变更权限
语法格式:
chmod 用户表示符+/-/=权限字符 指定文件或目录
用户表示符有如下选项:
操作符+、-、=的含义:
权限字符有如下选项:
权限字符 | 意思 | 说明 |
r | 读 | 设置为可读权限 |
w | 写 | 设置为可写权限 |
x | 可执行权限 | 设置为可执行权限 |
X | 特殊执行权限 | 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行 |
s | setuid/gid | 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限 |
t | 粘滞位 | 设置粘滞位,只有超级用户可以设置该位,只有文件所有者u可以使用该位 |
(2)通过数字变更权限
使用3位8进制数
r=4 ;w=2 ;x=1 ;rwx = 4+2+1 = 7
上一小节已经学习了如何修改文件的拥有者、所属组、其他组对文件的权限,现在我们来学习如何修改文件的拥有者、所属组。
功能:修改文件或目录的拥有者
格式: chown [选项] 用户名 文件名
常用选项:
(1)-R 如果是目录,则使其下所有子文件或目录递归生效
(1)普通用户改变文件拥有者,需要sudo切换到root用户
(2)root用户改变文件的拥有者,直接改即可
功能:修改文件或目录的所属组
格式: chgrp [选项] 用户组名 文件名
常用选项:
(1) -R 递归修改文件或目录的所属组
注意一个小细节:如果文件拥有者是你自己,你想把文件拥有者变成别人,需要加上sudo(给别人需要别人同意)。
如果想同时更改文件的拥有者和所属组,怎么办?使用chown指令:
chown newowner:newgroup filename
可读权限r :如果目录没有可读权限, 则无法用ls等命令查看目录中的子目录及文件内容.
可写权限w : 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
如果某个目录本身对other具有w权限,other可以删掉目录下的任意文件;
如果某个目录本身对other没有w权限,other不可以删掉任何文件。
假如现在有一个需求:要求可以在某个目录下创建文件、删除自己的文件(你对该目录具有w权限和x权限),但是你不能删除别人的文件(你对该目录不具有w权限),这样就矛盾了,怎么办?下一小节的“粘滞位”就可以解决这个问题。
要删除一个文件,你不一定要有这个文件的写权限,但你一定要有这个文件的上一级目录的写权限。也就是说,你即使没有一个文件的写权限,但你有这个文件的上一级目录的写权限,你就可以把这个文件给删除;而如果你没有一个目录的写权限,也就不能在这个目录下创建、删除文件。
我们只要对一个目录有w权限,即使我们不是这些文件的所有者,而且对这些文件也没有读或写权限,就可以删除这个目录下的任何文件和子目录,这样在同一个目录下,如果有多个用户建立属于自己的文件,任何只要对该目录有w权限的用户,都可以删除别人在这个目录下建立的属于自己的文件,这样做是很可怕的。但是,如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下其他人的文件呢?粘滞位就能起到这个作用。粘滞位一般只用在目录上,用在文件上起不到什么作用。
粘滞位用t表示,设置了该位后,其它用户就不可以删除不属于他的文件和目录(root用户除外),这就对 所有用户都能写的目录下的用户文件 启到了保护作用。但是该目录下的子目录不继承该权限,要再设置才可使用。
t权限:可以进入该目录,可以删除、修改该目录下自己的文件,不能修改删除该目录下别人的文件。
chmod o+t 目录名
粘滞位只能对目录设置,一般是限制other的权限,因为同一组内的用户即使有人误删了别人的代码,也可以追溯到,但是如果不限制other的权限,other误删文件,追溯不到哪个用户。对设置了粘滞位的目录,在该目录下,只能文件的拥有者可以删除,其他人不能删除(root用户可以随意删除)。
某个用户将自己主目录的other组权限增加t权限,那么other能够看到该用户主目录下的所有文件,在该目录下可以创建、删除自己的文件,但是不能删除别人的文件。
示例1:
对/home/liuyan目录的other组设置t权限
登录zhangsan用户,可以进入/home/liuyan目录
zhangsan用户在该目录下可以查看liuyan用户的文件,可以创建文件zhangsan.txt
zhangsan在该目录下尝试删除liuyan拥有的文件myfile.txt
没有权限进行删除。
示例2:
为/home目录添加t权限
zhangsan用户进入/home/liuyan目录,尝试删除liuyan拥有的文件,删除失败
在Linux系统中/tmp目录,用来存放系统产生的临时文件,权限为 “rwx(用户)rwx(用户所属组)rwx(其他)”,允许任意用户、任意程序在该目录中进行创建、删除、移动文件或子目录操作。若任意一个普通用户都能够删除系统服务运行中使用的临时文件,将会造成多么严重的结果?所以/tmp目录的other组权限添加了粘滞位,other组设置了t权限后,该目录下的文件或子目录文件就会受到保护,每个用户可以进入这个目录,修改自己和他人的文件,也可以写入自己的文件,但是不能随便删除他人(root用户除外),只能删除自己的文件。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
功能:umask指令的作用是查看或修改文件的权限掩码
权限掩码是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
语法:umask [权限值]
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
为什么系统中的文件(普通文件和目录),创建出来的权限是我们看到的样子?
默认权限:
新建文件默认权限:666
新建目录默认权限:777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个默认值。原因就是创建文件或目录的时候还要受到权限掩码umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask(权限掩码按位取反,然后和默认掩码按位与)
示例1:
示例3:
设置权限掩码
设置的权限掩码只在本次登录有效,如果想让修改的权限掩码全局有效,就需要改配置文件,文件持久化,但是不建议这样做!