年底了,公司接的北京地铁轨道交通的项目做不完了,一百多列地铁的设备都得调,派我出差了几周,这几天才回来,出差累死了实在是没办法更新。(YOASOBI的二开票还没抢到ToT,哭死,看看回滚票能不能抢到吧..)
本篇主要学习一下用户账户管理的命令,这个比较重要的,Linux里面的权限和用户都是用的比较多的。用户账号的作用主要是为了登录系统,在windows系统中也有用户系统,但是在Windows系统中的用户系统并没有Linux那么严谨,条条框框没那么多。
01 useradd 创建用户
useradd用于创建用户,一般的命令格式是:useradd[-选项]用户名
常用选项有:
- -u 指定用户UID
- -d 指定用户家目录(了解)
- -c 用户描述信息
- -g 指定用户基本组(了解)
- -G 指定用户附加组
- -s 指定用户的解释器程序
一般用法有蛮多的,比如:
创建用户指定UID:
创建用户并指定用户的家目录:
创建用户并指定UID和用户描述信息:
创建用户组test,创建用户指定UID和基本组
如果你想,还可以禁止用户登录系统:
02 /etc/passwd用户信息文件
用户的基本信息存放在 /etc/passwd文件内。查看此文件信息可以看到以下内容:
root: x: 0: 0: root: /root: /bin/bash
用户名: 密码占位符: UID: 基本组GID: 用户描述信息: 家目录: 解释器程序
UID:0 超级用户(root)
UID:1-999 系统伪用户,不能登录系统
UID:1000-65535 普通用户,管理员创建的用户
组:
基本组(初始组):一个用户只允许有一个基本组
附加组(在基本组之外组):一个用户可以允许有多个附加组
用户--->bash程序(解释器)--->内核--->硬件
03 用户默认值信息
/etc/default/useradd 是用来存放用户默认值信息的,输入vim /etc/default/useradd 可以看到文件内容:
GROUP=100 #用户默认组
HOME=/home #用户家目录
INACTIVE=-1 #密码过期宽限天数(/etc/shadow文件第7个字段)
EXPIRE= #密码失效时间(/etc/shadow文件第8个字段)
SHELL=/bin/bash #默认使用的
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否建立邮箱
04 用户邮件目录
可以给用户信息里面设置邮箱,这样就可以通过登录账户,安装查看邮件的工具来查看邮件。
安装mailx工具来查看邮件。
05 账户密码设置
passwd命令用于设置密码,命令格式:passwd [-选项] [用户名]
密码规范:长度不能少于8个字符,复杂度(数字、字母(包含大小写)特殊字符
密码规范:本次修改的密码不能和上次修改的密码太相近
常用选项
- -S 查看密码信息
- -l 锁定用户密码
- -u 解锁用户密码
- -d 删除密码
- --stdin 通过管道方式设置用户密码
以上是交互式设置密码,也可以非交互式直接设置:
命令格式:echo '密码' | passwd --stdin 用户名
交互式修改用户密码:
查看用户的密码:
如果你不想其他人修改密码,可以选择锁定当前用户的密码。
非交互式修改用户密码:
06 用户密码文件
用户的密码存放在/etc/shadow文件中,该文件默认任何人都没有任何权限(不包括root),我们可以去用vim来查看一下此文件:
#每个字段含义解释:
第一字段:用户名
第二字段:密码加密字符串,加密算法为SHA512散列加密算法,如果密码位是“*”或者“!!”表示密码已过期
第三个字段:密码最后一次修改日期,日期从1970年1月1日起,每过一天时间戳加1
第四个字段:密码修改的期限,如果该字段为0表示随时可以修改密码,例如:该字段为10,代表10天之内不可以修改密
第五个字段:密码有效期
第六个字段:密码到期前警告时间(和第五个字段相比)
第七个字段:密码过期后的宽限天数(和第五个字段相比)
第八个字段:账号失效时间,日期从1970年1月1日起
第九个字段:保留
#chage命令用于修改/etc/shadow文件信息,修改文件内容第三个字段(密码最后一次修改时间)
[root@localhost ~]# chage -d 0 user2
07 su命令
如果你在某一个非root账户下,想要获取更高的权限,切换到root用户,使用su命令即可。
切换用户,用户环境会一起改变。普通用户切换root需要输入密码,root用户切换普通用户不需要。
08 usermod修改用户属性
usermod 命令用于修改已存在用户的基本信息
命令格式:usermod [-选项] 用户名
常用选项:
- -u 修改用户UID
- -d 修改用户家目录(了解)
- -g 修改用户基本组(了解)
- -c 修改用户描述信息
- -G 添加用户附加组
- -s 修改用户shell
修改已存在用户的UID
修改已存在用户的解释器:
09 删除用户
前面都是在讲如何创建修改用户,那么我不需要这个用户的时候,如何删除用户呢?
userdel 用于删除给定的用户以及与用户相关的文件,该命令若不加选项仅删除用户账号,不删除用户的家目录
命令格式:userdel [-选项] 用户名
常用选项:
- -r 删除用户同时,并删除用户的家目录
#删除用户,仅删除账号,不删除家目录
#删除用户,删除账号,连带删除家目录
10 groupadd 添加组
groupadd 用于创建一个新的工作组,新组的信息将被添加到/etc/group文件中
-
命令格式:groupadd [-选项] 组名
-
常用选项:
- -g GID #指定组的GID
11 gpasswd组管理命令
gpasswd 是Linux工作组文件/etc/group和/etc/gshadow管理工具,用于将用户添加到组或从组中删除。
命令格式:gpasswd [-选项] 用户名 组名
常用选项:
- -a #将用户添加到工作组
- -d #将用户从工作组中删除
首先创建三个用户a1 a2 a3
创建组a,把三个用户添加进组a:
12 chmod权限管理
权限的重要性:
任何一个系统,权限都是非常重要的,如果没有权限的话,那系统的安全就没办法保障,
特别是对于Linux这种多用户的系统来讲,通常一台机器有很多个用户都在使用的话,那我们
就应该通过权限去控制这些用户在系统的操作。
- chmod(英文全拼:change mode)设置用户对文件的权限
- 命令格式:chmod [-选项] 归属关系+-=权限类别 文件...
- 不常用选项:
- -R 递归修改目录下所有的子文件与子目录的权限与父目录相同
- 归属关系:u 所有者 g 所属组 o 其他人
- 权限类别: r 读取 w 写入 x 执行 - 没有权限
- 操作:+ 添加权限 - 去除权限 = 重新定义权限
- 权限数字表示:r ---- 4 w ---- 2 x ---- 1 0 没有权限
#查看文件详细属性
[root@localhost ~]# ll hello
- rw- r-- r-- . 1 root root 426 3月 28 15:00 hello
文件类型 所有者权限 所属组权限 其他人的权限 所有者 所属组
#为文件所有者添加执行权限
[root@localhost ~]# chmod u+x hello
[root@localhost ~]# ll hello
-rwxr--r--. 1 root root 426 3月 28 15:00 hello
#为文件所属组添加写权限
[root@localhost ~]# chmod g+w hello
[root@localhost ~]# ll hello
-rwxrw-r--. 1 root root 426 3月 28 15:00 hello
#为文件其他人添加写权限
[root@localhost ~]# chmod o+w hello
[root@localhost ~]# ll hello
-rwxrw-rw-. 1 root root 426 3月 28 15:00 hello
#使用(逗号)可以同时为多个用户授权
[root@localhost ~]# chmod g+x,o+x hello
[root@localhost ~]# ll hello
-rwxrwxrwx. 1 root root 426 3月 28 15:00 hello
#去除所有者执行权限
[root@localhost ~]# chmod u-x hello
[root@localhost ~]# ll hello
-rw-rwxrwx. 1 root root 426 3月 28 15:00 hello
#去除所属组执行权限
[root@localhost ~]# chmod g-x hello
[root@localhost ~]# ll hello
-rw-rw-rwx. 1 root root 426 3月 28 15:00 hello
#去除其他人执行权限
[root@localhost ~]# chmod o-x hello
[root@localhost ~]# ll hello
-rw-rw-rw-. 1 root root 426 3月 28 15:00 hello
#同时去除ugo写权限
[root@localhost ~]# chmod u-w,g-w,o-w hello
[root@localhost ~]# ll hello
-r--r--r--. 1 root root 426 3月 28 15:00 hello
#重新定义所有者权限
[root@localhost ~]# chmod u=rwx hello
[root@localhost ~]# ll hello
-rwxr--r--. 1 root root 426 3月 28 15:00 hello
#重新定义所属组权限
[root@localhost ~]# chmod g=rwx hello
[root@localhost ~]# ll hello
-rwxrwxr--. 1 root root 426 3月 28 15:00 hello
#重新定义其他人权限
[root@localhost ~]# chmod o=rwx hello
[root@localhost ~]# ll hello
-rwxrwxrwx. 1 root root 426 3月 28 15:00 hello
#创建目录并设置目录权限
[root@localhost ~]# mkdir /test
[root@localhost ~]# ll -d /test
drwxr-xr-x. 2 root root 6 4月 11 14:30 /test
#为目录所属组添加写权限
[root@localhost ~]# chmod g+w /test
[root@localhost ~]# ll -d /test
drwxrwxr-x. 2 root root 6 4月 11 14:30 /test
#为目录其他人添加写权限
[root@localhost ~]# chmod o+w /test
[root@localhost ~]# ll -d /test
drwxrwxrwx. 2 root root 6 4月 11 14:30 /test
[root@localhost ~]#
#重新定义所有用户权限
[root@localhost ~]# chmod u=rwx,g=rx,o=rx /test
[root@localhost ~]# ll -d /test
drwxr-xr-x. 2 root root 6 4月 11 14:30 /test
#同时为所有用户定义相同权限
[root@localhost ~]# chmod ugo=rwx /test
[root@localhost ~]# ll -d /test
drwxrwxrwx. 2 root root 21 4月 11 14:37 /test
#权限数字定义方式
[root@localhost ~]# ll hello
-rwxrwxrwx. 1 root root 426 3月 28 15:00 hello
所有者:rwx 4+2+1=7
所属组:r 4
其他人:r 4
[root@localhost ~]# chmod 744 hello
[root@localhost ~]# ll hello
-rwxr--r--. 1 root root 426 3月 28 15:00 hello
所有者:rw 4+2=6
所属组:rw 4+2=6
其他人:--- 0
[root@localhost ~]# chmod 660 hello
[root@localhost ~]# ll hello
-rw-rw----. 1 root root 426 3月 28 15:00 hello
所有者:rwx 4+2+1=7
所属组:wx 2+1=3
其他人:--- 0
[root@localhost ~]# touch /hello.txt
[root@localhost ~]# ll /hello.txt
-rw-r--r--. 1 root root 0 4月 11 14:45 /hello.txt
[root@localhost ~]# chmod 730 /hello.txt
[root@localhost ~]# ll /hello.txt
-rwx-wx---. 1 root root 0 4月 11 14:45 /hello.txt
#去除所有用户权限
[root@localhost ~]# chmod 000 /hello.txt
[root@localhost ~]# ll /hello.txt
----------. 1 root student 0 4月 11 14:45 /hello.txt
#递归修改目录下所有子文件与子目录权限
[root@localhost ~]# ll -d /test
drwxrwxrwx. 2 root root 21 4月 11 14:37 /test
[root@localhost ~]# mkdir /test/xxoo
[root@localhost ~]# ll -d /test/xxoo/
drwxr-xr-x. 2 root root 6 4月 11 14:54 /test/xxoo/
[root@localhost ~]# ll /test/abc.txt
-rw-r--r--. 1 root root 0 4月 11 14:37 /test/abc.txt
#默认用户在该目录下创建文件权限与父目录不一致
#递归修改目录下所有子文件与子目录权限
[root@localhost ~]# chmod -R 777 /test
[root@localhost ~]# ll /test/abc.txt
-rwxrwxrwx. 1 root root 0 4月 11 14:37 /test/abc.txt
[root@localhost ~]# ll -d /test/xxoo
drwxrwxrwx. 2 root root 6 4月 11 14:54 /test/xxoo
#深入理解权限,
[root@localhost ~]# mkdir /test1
[root@localhost ~]# chmod 777 /test1
[root@localhost ~]# ll -d /test1
drwxrwxrwx. 2 root root 6 4月 11 14:57 /test1
#在该目录下创建文件与目录
[root@localhost ~]# touch /test1/root.txt
[root@localhost ~]# mkdir /test1/rootbak
[root@localhost ~]# chmod o=rx /test1
[root@localhost ~]# ll -d /test1
drwxrwxr-x. 2 root root 6 4月 11 14:59 /test1
[root@localhost ~]# touch /test1/root.txt
#普通用户对该目录如果拥有rwx权限是可以删除该目录下任何用户创建的文件(包括root)
[user1@localhost ~]$ cd /test1
[user1@localhost test1]$ ls
root.txt
[user1@localhost test1]$ ll root.txt
-rw-r--r--. 1 root root 0 4月 11 14:57 root.txt
[user1@localhost test1]$ rm -rf root.txt
[user1@localhost test1]$ ls
rootbak
[user1@localhost test1]$ rm -rf rootbak/
[user1@localhost test1]$ ls
[user1@localhost test1]$ ll -d /test1
drwxrwxrwx. 2 root root 6 4月 11 14:59 /test1
总结:用户对文件拥有rwx权限(针对的是文件的内容)
r:查看文件内容
w:对文件内容拥有增删改权限,并不能删除文件,删除文件取决于对文件所在的目录有没有rwx权限
x:可以运行该文件
2.用户对目录拥有rwx权限
r:查看目录下内容
w:在该目录创建文件,修改文件属性,删除任何用户的文件(包括root)
x:可以切换到该目录
13 umask预设权限
umask用于显示或设置创建目录的权限掩码
- 命令格式:umask [-p] [-S] [mode]
root@localhost ~]# mkdir /test2
[root@localhost ~]# ll -d /test2
drwxr-xr-x. 2 root root 6 4月 11 15:05 /test2
[root@localhost ~]# umask --help
umask: 用法:umask [-p] [-S] [模式]
#查看目录默认权限掩码,以数字形式显示
[root@localhost ~]# umask -p
umask 0022
#查看目录默认权限掩码,以字母形式显示
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx
#设置目录默认权限掩码,为所属组添加写权限
[root@localhost ~]# umask g+w
[root@localhost ~]# mkdir /test3
[root@localhost ~]# ll -d /test3
drwxrwxr-x. 2 root root 6 4月 11 15:09 /test3
#去除目录默认权限掩码
[root@localhost ~]# umask g-w
[root@localhost ~]# mkdir /test4
[root@localhost ~]# ll -d /test4
drwxr-xr-x. 2 root root 6 4月 11 15:10 /test4