Linux用户权限
Linux用户和用户组
用户概念
通过前面对Linux多用户的理解,我们明白Linux是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)
用户组概念
用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的,
Linux用户和组的关系
用户和用户组的对应关系有以下4种:
- 一对一:一个用户可以存在一个组中,是组中的唯一成员;
- 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
- 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
- 多对多:多个用户可以存在多个组中,也就是以上3种关系的扩展。
Linux用户管理
Liux系统的管理员之所以是root,是因为该用户的身份号码即UID的数值为0,UID就相当于我们的身份证号码一样具有唯一性,因此可通过用户的UID值来判断用户身份。
- 管理员UID为0:系统的管理员用户。
- 系统用户UID为1 ~ 999:Liux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
- 普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。需要注意的是,UID是不能冲突的,而且管理员创建的普通用户的UID默认是从1000开始的(即使前面有闲置的号码)
添加用户
useradd [选项] 参数
选项说明:
- -d 指定用户的家目录(默认为/home/username)
- -e 账户的到期时间,格式为YYYY-MM-DD.
- -u 指定该用户的默认UID
- -g 指定一个初始的用户基本组(必须已存在)
- -G 指定一个或多个扩展用户组
- -N 不创建与用户同名的基本用户组
- -s 指定该用户的默认Shell解释器
参数:
用户名: 要创建的用户名。
案例实战
实例1:下面我们创建一个普通用户并指定家目录的路径、用户的UID以及Shll解释器。在下面的命令中,请注意/sbin/nologin,它是终端解释器中的一员,与Bash解释器有着天壤之别。一旦用户的解释器被设置为nologin,则代表该用户不能登录到系统中:
[root@node1 ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
[root@node1 ~]# id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)
修改帐号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:
usermod [选项] 用户名
选项:
- -c<备注>:修改用户帐号的备注文字;
- -d<登入目录>:修改用户登入时的目录;
- -e<有效期那限>:修改帐号的有效期限;
- -f<缓冲天数>:修改在密码过期后多少天即关闭该帐号:
- -g<群组>:修改用户所属的群组;
- -G<群组>;修改用户所属的附加群组;
- -l<帐号名称>:修改用户帐号名称;
- -L:锁定用户密码,使密码无效;
- -s:修改用户登入后所使用的shell;
- -u:修改用户D;
- -U:解除密码锁定
常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
案例实战:
实例1:将用户jinxf的登录Shell修改为bash,主目录改为/home/z,用户组改为root。
[root@node1 ~]# cat /etc/passwd|grep gem
gm:x:1003:1000::/home/gm:/bin/sh
[root@node1 ~]# id gem
uid=1003(gem) gid=1000(gtjin) 组=1000(gtjin),0(root),4(adm)
[root@node1 ~]# usermod -s /bin/bash –g root gem
[root@node1 ~]# usermod -d /home/z -m gem
[root@node1 ~]# cat /etc/passwd|grep gem
gem:x:1003:0::/home/z:/bin/bash
删除帐号
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
删除一个已有的用户账号使用userdel命令,其格式如下:
userdel [选项] 用户名
选项:
-f:强制删除用户
-r:同时删除用户及用户家目录
这个命令的目的删除用户,与它相关的文件有:
①/etc/passwd
②/etc/shadow
③/home/username
常用的选项是-r,它的作用是把用户的主目录一起删除。
[root@node1 ~]# userdel jinxf
此命令删除用户jinxf在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。
用户口令的管理
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
passwd [选项] 用户名
可使用的选项:
- -d:删除密码,仅有系统管理者才能使用;
- -f:强制执行;
- -k:设置只有在密码过期失效后,方能更新;
- -l:锁住密码;
- -s:列出密码的相关信息,仅有系统管理者才能使用;
- -u:解开已上锁的帐号。
如果默认用户名,则修改当前用户的口令。
例如,假设当前用户是jinxf,则下面的命令修改该用户自己的口令:
[root@node1 ~]# passwd
Old password:
New password:*
Re-enter new password:*
如果是超级用户,可以用下列形式指定任何用户的口令:
[root@node1 ~]# passwd jinxf
New password:*
Re-enter new password:*
普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
为用户指定空口令时,执行下列形式的命令:
[root@node1 ~]# passwd -d jinxf
此命令将用户jinxf的口令删除,这样用户jinxf下一次登录时,系统就不再询问口令。
passwd命令还可以用-l
(lock)选项锁定某一用户,使其不能登录,例如:
[root@node1 ~]# passwd -l jinxf
用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
添加新组groupadd
语法:
groupadd [选项] 用户组
选项:
- -g:指定新建工作组的id;
- -r:创建系统工作组,系统工作组的组ID小于500;
- -K:覆盖配置文件"/ect/login.defs";
- -o:允许添加组D号不唯一的工作组。
实例1:添加用户组group1
[root@node1 ~]# groupadd group1
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
实例2:向系统中增加了一个新组group2,同时指定新组的组标识号是101
[root@node1 ~]# groupadd -g 101 group2
此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。
删除用户组groupdel
语法:
groupdel 用户组
实例1:从系统中删除组group1
[root@node1 ~]# groupdel group1
修改群组groupmod
语法:
groupmod [选项] 用户组
常用的选项有:
- -g<群组识别码>:设置欲使用的群组识别码;
- -o:重复使用群组识别码;
- -n<新群组名称>:设置欲使用的群组名称。
实例1:将组group2的标识号改为10000,组名修改为group3
[root@node1 ~]# groupmod –g 10000 -n group3 group2
用户切换组
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:
[root@node1 ~]# newgrp root
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
Linuxi超级用户与伪用户
Liux下用户分为三类:超级用户、普通用户、伪用户
- 超级用户:用户名为root,具有一切管理权限,UID为0,可以创建多个管理员。
- 普通用户:在默认情况下,普通用户UID是介于500~6000;
- 伪用户:这些用户的存在是为了方便系统管理,满足相应的系统进程对文件属主的要求。伪用户不能够登录,他的UID值介于1 ~ 499。
用户身份切换
由于超级权限在系统管理中的不可缺少的重要作用,为了完成系统管理任务,必须用到超级权限。
su
su命令就是切换用户的工具。
语法
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
参数说明:
- -c command或-command=command变更为帐号为USER的使用者并执丸行指令(command)后再变回原来使用者
- –i或–login这个参数加了之后,就好像是重新login为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定USER,内定是root
sudo
sudo的全称为:super user do。
顾名思义:干超级用户才能干的事!所以Sudo最常用的功能就是提升一个命名的执行权限。
语法:
sudo [参数] 命令名称
参数:
- -h:列出帮助信息
- -l:列出当前用户可执行的命令
- -u:用户名或UD值以指定的用户身份执行命令
- -k:清空密码的有效时间,下次执行sudo时需要再次进行密码验证
- -b:在后台执行指定的命令
- -p:更改询问密码的提示语
总结
sudo命令具有如下功能:
- 限制用户执行指定的命令:
- 记录用户执行的每一条命令;
- 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
- 验证密码的后5分钟内(默认值)无须再让用户再次验证密码。
**编辑配置文件命令:visudo
**来配置用户权限。
按照下面的格式将第99行(大约)填写上指定的信息:
谁可以使用 允许使用的主机 =(以谁的身份)可执行命令的列表
niit ALL=(ALL) ALL
⚠️注意:
编辑sudo的配置文件/etc/sudoers,是一般不要直接使用vi(vi/etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如有错也保存了可能导致无法使用sudo工具,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错会有提示。
sudo免密配置:
visudo
niit ALL=NOPASSWD: ALL
Linux文件基本属性
显示文件属性
ls命令
Linux ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
语法:
ls [参数]
参数:
- -a 显示所有文件及目录(以 . 开头的隐藏文件也会列出)
- -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
- ls -l 的缩写 ll
Linux文件类型
Linux可以支持长达256个字符的文件名称,且文件名是区分大小写的,“abc”与"ABC"所代表的是不同文件。
Linux文件类型
- 普通文件(-):存放数据,程序等信息的文件,一般为文本文件和二进制文件。
- 目录文件(d):文件系统中一个目录所包含的目录文件,包括文件名和子目录名
- 链接文件(l):可以在不同的文件系统之间建立链接关系来实现对文件的访问。
- 设备文件©:把IO设备映射为一个设备文件。
- 管道文件§:主要用于在进程间传递数据。
文件权限
所谓的文件权限,是指对文件访问权限,包括对文件的读、写、删除、执行操作。Linux是一个多用户操作系统,它运行多个用户同时登陆和工作,因此Linux将一个文件或者目录与一个用户和组联系起来。
r(read):可读取此文件的实际内容,如读取文本文件的文字内容等;
w(write):可以编辑、新增或者是修改该文件的内容
x(execute):该文件具有可以被系统执行的权限。
⚠️**注意:**在Linux中,文件是否能被执行是由是否具有
x
这个权限来决定,与拓展名无关。
Linux权限字和权限操作
- chgrp:改变文件所属群组;
- chown:改变文件所有人;
- chmod:改变文件的属性;
改变所属群组chgrp
改变一个文件的群组很简单,直接用chgrp命令,这个命令是change group的缩写。
语法:
chgrp [-R] 属组名 文件名
参数选项
- -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数那么该目录下的所有文件的属组都会更改。
改变文件属性chmod
Liux文件属性有两种设置方法,一种是数字,一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others(拥有者/组/其他)三种身份各有自己的read/write/execute权限。
文字设定法
基本上就九个权限分别是:
- user:用户
- group:组
- others:其他
那么我们就可以使用u,g,o来代表三种身份的权限。
此外,a则代表all,即全部的身份。读写的权限可以写成r,w,x,也就是可以使用下表的方式来看:
语法:
chmod [who] [+ | - | =] [mode]
chmod niit+w a.txt
数字设定法
我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u) (g) (o)。
例如,如果想让某个文件的属主有“读/写”二种权限,需要把 4(可读)+ 2(可写)= 6(读写)。
先复习一下刚刚上面提到的数据:文件的权限字符为:-rwxrwxrwx,这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
- r:4
- w:2
- x:1
改变文件拥有者chown
更改文件属主,也可以同时更改文件属组
语法:
chown [-R] 属主名 文件名
chown [-R] 属主名:属组名 文件名