- [ul](1)管道符
- (2)筛选过滤
- (3)统计功能
- (4)xargs命令拓展
- (1)为什么要做用户与用户组管理
- (2)Linux的用户及用户组
- (3)用户组的操作
- (4)用户的操作
- 1.Linux的多用户多任务
- 2.什么是用户
- 3.什么是用户组
- 4.用户和组的关系
- ☆ 认识/etc/group文件
- ☆ 用户组的添加(groupadd)
- ☆ 用户组的修改(groupmod)
- ☆ 用户组的删除(groupdel)
- ☆ 认识/etc/passwd文件
- ☆ 添加用户(useradd)
- ☆ 查看用户信息(id)
- ☆ 修改用户(usermod)
- ☆ 修改用户密码(passwd)
- ☆ 认识/etc/shadow文件
- 切换用户(su)
- ☆ 启用wheel组设置
- ☆ 删除用户(userdel)
- 一、Linux 操作系统用户和组的概念
- 二、管道
[/ul]
一、Linux 操作系统用户和组的概念
(1)为什么要做用户与用户组管理
针对不同用户分配不同的权限,不同权限可以限制用户可以访问到的系统资源从而提高系统的安全性
(2)Linux的用户及用户组
1.Linux的多用户多任务
Linux 系统是一个多用户多任务的操作系统,所谓多用户多任务,是指支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。
例如:
在同一时间,alex和jack都可以登录同一台服务器,alex可以查询网站的日志,jack可以处理数据库的问题,他们之间互不影响。
由于我们设置了权限,alex只能访问网站的日志,无法访问数据库;jack可以处理数据库问题,但是不能访问网站的日志。这就实现了我们的多用户多任务的运行机制。
2.什么是用户
任何一个人想要登录服务器,都必须先申请一个账号,然后以这个账号的身份进入系统,就像我们前面说的alex和jack这两个账号。
每个账号都拥有一个唯一的用户名和各自的密码,用户在登录时输入正确的用户名和密码后,就能够进入系统,默认会进入到这个用户自己的主目录
3.什么是用户组
用户组是具有相同特征用户的逻辑集合,简单来说,就是具有相同权限的用户的集合。
例如:某团队有996名员工,他们都需要访问一个文件夹,如果我们给这996个用户的账号分别设置权限,这样太麻烦了,所以我们会建立一个用户组叫sameteam,对这个组设置权限,将这996个用户加入这个组就可以了。
4.用户和组的关系
理论上Linux系统中的每个用户在创建时都应该有一个对应的用户组,这个组就称之为用户的主组。同时,有些情况下,某个用户需要临时使用某个组的权限,那这个组就称之为这个用户的附属组或附加组。
主组只能拥有一个,但是附属组或附加组可以同时拥有多个
(3)用户组的操作
☆ 认识/etc/group文件
存储用户组信息的文件:/etc/group
/etc/group文件结构:
wheel:x:10:hsforpyp
用户组名:密码(占位符):用户组ID:这个组包含的用户(附属组)
特别说明:
1) 密码位x代表占位符,用户组可以设置密码,但是大部分情况下不需要设置
2)组内用户名:表示附加组是该组的用户名称。
例如:
wheel组(组ID10),是hsforpyp账户的附加组,所以hsforpyp这个账户,就显示在这里。
hsforpyp组(组ID1000),是hsforpyp账户的主组, 所以hsforpyp这个账户就不显示在最后。
3)wheel组
只有在wheel组中的普通用户,才可以通过su命令切换到root账户,但一般默认所有普通用户都能切换到root,只要知道root密码,换句话说,默认此配置是不生效的。
☆ 用户组的添加(groupadd)
用法一:groupadd 组名[root@hsforpyp ~]# groupadd group001新建一个组叫做 group001
使用tail -1 /etc/group即可查看/etc/group文件最后一行,如下:
[root@hsforpyp ~]# tail -1 /etc/groupgroup001:x:1001:
☆ 用户组的修改(groupmod)
语法:# groupmod [选项 选项值] 用户组名
选项:
-g :gid缩写,设置一个自定义的用户组ID 数字
-n :name缩写,设置新的用户组的名称
示例代码:修改group001用户组,将GID改成1024,将名称改为group002
用法:groupmod -g 新的组ID -n 新的组ID 原有组ID示例代码:[root@hsforpyp ~]# groupmod -g 1024 -n group002 group001[root@hsforpyp ~]# tail -1 /etc/groupgroup002:x:1024:含义:将group001组的GID改成1024,组名改成group002
☆ 用户组的删除(groupdel)
案例:删除用户组group002
[root@hsforpyp ~]# groupdel group002现在使用cat查看 /etc/group文件会发现找不到group002
(4)用户的操作
☆ 认识/etc/passwd文件
/etc/passwd 文件结构:
root:x:0:0:root:/root:/bin/bash
用户名:密码:UID:GID:注释:家目录:解释器
用户名:登录linux时使用的用户名
密码:此密码位置一般情况都是\”x\”,表示密码的占位,真实密码存储在/etc/shadow文件里
用户ID:用户的识别符,每个用户都有唯一的UID【-u】
用户组ID:该用户所属的主组ID;【-g】
注释:解释该用户是做什么用的;【-c】
家目录:用户登录进入系统之后默认的位置;【-d】
解释器:等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,转换成机器语言,传递给内核处理;如果解释器是/bin/bash表示用户可以登录到系统,/sbin/nologin表示该用户不能登录到系统【-s】
☆ 添加用户(useradd)
useradd 选项与 /etc/passwd 文件内容基本对应
选项 | 作用 |
---|---|
-u | uid,用户的id(用户的标识符),系统默认会从500 /或1000之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义 |
-g | 表示指定用户的用户主(主要)组,选项值可以是用户组ID,也可以是组名 |
-c | comment,添加注释(选择是否添加) |
-d | 指定用户登入时的启始目录(家目录位置) |
-s | 指定用户登入后所使用的shell 解释器,默认/bin/bash,如果不想让其登录,则可以设置为/sbin/nologin |
-n | 取消建立以用户名称为名的群组 |
-G | 表示指定用户的用户附加(额外)组,选项值可以是用户组ID,也可以是组名 |
用法之一:创建user001用户,不带任何选项[root@hsforpyp ~]# useradd user001[root@hsforpyp ~]# tail -1 /etc/passwduser001:x:1001:1001::/home/user001:/bin/bash
注意:不用任何参数,创建用户,系统会默认执行以下操作:
1)在 /etc/passwd 文件中创建一行关于user001用户的数据
2)在 /etc/shadow 文件中新增了一行关于user001密码的数据
3)在 /etc/group 文件中创建一行与用户名相同的组,例如user001
4)在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息,例如user001
5)自动创建用户的家目录,默认在/home下,与用户名同名
案例:公司来了一名新员工user007,属于group007新部门,用户ID 1111 ,不允许登录系统
# 创建新用户组group007,创建用户user007,默认user007属于自己同名的主组,让user007属于附加组group007,用户ID 1111,注释为\"group007er user007\",解释器为/sbin/nologin[root@hsforpyp ~]# groupadd group007[root@hsforpyp ~]# useradd -G group007 -u 1111 -s /sbin/nologin -c \"group007er user007\" user007[root@hsforpyp ~]# tail -1 /etc/passwduser007:x:1111:1111:group007er user007:/home/user007:/sbin/nologin[root@hsforpyp ~]# tail -2 /etc/groupgroup007:x:1002:user007user007:x:1111:
如果需要为一个用户指定多个附加组,只需要将多个附加组的id 通过英文逗号“,”分割即可。例如-G 500,501,502
☆ 查看用户信息(id)
作用:查看一个用户的一些基本信息(包含用户id,用户组id,附加组id…),该指令如果不指定用户则默认当前用户。
用法一:不指定用户,默认当前登录用户[root@hsforpyp ~]# iduid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023用法二:指定用户user007[root@hsforpyp ~]# id user007uid=1111(user007) gid=1111(user007) groups=1111(user007),1002(group007)
问:如何验证以上信息是否正确?
答:查看/etc/passwd文件,验证用户信息;通过文件/etc/group验证用户组信息。
☆ 修改用户(usermod)
选项 | 含义 |
---|---|
-g | 表示指定用户的用户主组,选项的值可以是用户组的ID,也可以是组名 |
-u | uid,用户的id(用户的标识符),系统默认会从500 之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义 |
-L | 锁定用户,锁定后用户无法登陆系统lock |
-U | 解锁用户unlock |
-c | 修改用户帐号的备注文字 |
-d | 修改用户登入时的目录 |
-s | 修改用户登入后所使用的shell |
-G | 表示指定用户的用户附加组,选项的值可以是用户组的ID,也可以是组名 |
案例:alex员工休假,假期期间,暂时停止他的登录权限
用法一:将alex账户暂时锁定[root@hsforpyp ~]# usermod -L alex用法二:将alex账户解除锁定[root@hsforpyp ~]# usermod -U alex
☆ 修改用户密码(passwd)
Linux不允许没有密码的用户登录到系统,因此前面创建的用户目前都处于锁定状态,需要设置密码之后才能登录计算机。
案例:将user007的账户解锁,在使用usermod -U解锁时,我们看到一个错误信息
[root@hsforpyp ~]# usermod -U user007
usermod: unlocking the user’s password would result in a passwordless account.
You should set a password with usermod -p to unlock this user’s password.
解锁这个账户,将导致一个没有密码的账户,因为之前user007的账户没有密码。这时候,我们就需要使用passwd命令,给王五的账户设置一个密码
[root@hsforpyp ~]# usermod -U user007usermod: unlocking the user\'s password would result in a passwordless account.You should set a password with usermod -p to unlock this user\'s password.[root@hsforpyp ~]# passwd user007Changing password for user user007.New password: BAD PASSWORD: The password is shorter than 8 charactersRetype new password: passwd: all authentication tokens updated successfully.
在我们输入密码时,屏幕不会有任何显示。
密码需要输入两次,请确保两次输入的密码是一样的。
☆ 认识/etc/shadow文件
与用户密码相关的文件:/etc/shadow
由于 /etc/passwd文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了shadow文件中。
/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
文件结构:
root:$1$MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7:: :1)“登录名”是与/etc/passwd文件中的登录名相一致的用户账号2)“口令”字段存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令; 星号代表帐号被锁定;双叹号表示这个密码已经过期了。加密算法$id$salt$encrypted$1$ 开头的,表明是用 MD5 加密的$2$ 表明是用 Blowfish 加密的$5$ 表明是用 SHA-256 加密的$6$ 表明是用 SHA-512 加密的3)“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在 SCOLinux 中,这个时间起点是1970年1月1日。4)“最小时间间隔”指的是两次修改口令之间所需的最小天数。5)“最大时间间隔”指的是口令保持有效的最大天数。6)“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。7)“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。(软限制。到期后多少天就不能用账号了。)8)“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。(硬限制。)9) 保留
切换用户(su)
在设置用户密码之后就可以使用此账号进行登录系统了,如果系统处于已登录状态,则可以使用su命令进行切换用户。
为了系统安全,通常不会允许root用户直接登录计算机,但是工作需要,我们又需要使用root权限,这时候,我们就可以先使用一个普通用户登录计算机,再通过su命令切换到root权限。
用法一:su 用户名示例代码:#su - root含义:切换到root权限注意:a. 从root 往普通用户切换不需要密码,但是反之则需要root 密码;b. 切换用户之后前后的工作路径是不变的,添加了选项[-]会自动切换到用户的家;c. 普通用户没有办法访问root 用户家目录,但是反之则可以;
☆ 启用wheel组设置
步骤①:使用vim编辑器 打开/etc/pam.d/su文件
[root@hsforpyp ~]# vim /etc/pam.d/su
步骤②:编辑文件,去掉auth required pam_wheel.so use_uid这一行前面的#,保存退出,使这一行配置生效
这时,便只有在wheel组内的用户才可以su到root哒。
☆ 删除用户(userdel)
选项:-r:表示删除用户的同时,删除其/home下的对应家目录文件夹,不选此选项则家目录文件夹保留。
[root@hsforpyp ~]# id user007uid=1111(user007) gid=1111(user007) groups=1111(user007),1002(group007)[root@hsforpyp ~]# userdel -r user007[root@hsforpyp ~]# id user007id: ‘user007’: no such user
案例:已经登录的alex删除时提示失败,而没有登录的账户可以正常删除时想删除alex怎么办?
[root@hsforpyp ~]# userdel -r alexuserdel: user alex is currently used by process 11244
解决办法:kill alex 用户的全部进程
[root@hsforpyp ~]# kill 11244[root@hsforpyp ~]# userdel -r alex[root@hsforpyp ~]#
备注:也可以在登录需要删除的用户之后,按下快捷键“ctrl+d”进行对当前用户的注销,随后退回到上一个用户(root)此时就可以对需要删除的用户进行删除操作。
所有跟用户操作的命令(除passwd 外,只能修改自己的密码,即不指定用户名)只有root 超级管理员有权限执行。
二、管道
(1)管道符
管道符号:|,竖线
作用:管道是一种通信机制,通常用于进程间的通信。它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
0 :标准输入,程序或命令需要外部的某些程序传递相应的参数,才能正常运行
1 :标准输出,程序或命令正确的执行结果,我们就称之为标准输出
2 :标准错误,程序或命令错误的执行结果,我们就称之为标准错误
(2)筛选过滤
基本语法:
# 前一个命令 | 后一个命令
案例:获取/etc/group下wheel组的信息
[root@hsforpyp ~]# cat /etc/group | grep wheelwheel:x:10:解析:| :管道符号,作用=>把cat /etc/group的正确的执行结果作为参数传递给grep命令cat /etc/group :管道左边的命令grep wheel :管道右边的命令
(3)统计功能
wc命令,word count,文件统计命令
选项 | 功能 |
---|---|
-l | line,统计总行数 |
-w | word,总单词数 |
-c | 统计总字节数 |
案例:统计根目录下一共有多少个文件
[root@hsforpyp ~]# ls / | wc -l20
案例:统计当前计算机中一共有多少个用户
[root@hsforpyp ~]# cat /etc/passwd |wc -l46
(4)xargs命令拓展
问:为什么需要xargs命令?
答:之所以能用到这个命令,关键是由于很多命令不支持 | 管道来传递参数,而日常工作中又有这个必要,所以就有了 xargs 命令。
简单来说,xargs命令就相当于对管道命令进行了一个扩展,让所有命令都支持管道
案例:搜索/etc目录下的所有\”.conf\”结尾的文件信息,然后以详细列表形式显示
[root@hsforpyp ~]# find /etc -name \"*.conf\" | ls -l
然而并没有得到想要的结果,解决方案:在ls命令之前添加一个xargs命令,这样ls命令就支持管道了,可以用于接收前一个命令的执行结果
[root@hsforpyp ~]# find /etc -name \"*.conf\" | xargs ls -l