文章目录
用户管理
配置文件
字符段配置文件 | /etc/shadow | /etc/passwd | /etc/group |
---|---|---|---|
第一个字段 | 登录名 | 用户名 | 组名 |
第二个字段 | 加密后的密码 | 密码占位符 | 组密码 |
第三个字段 | 最近一次更改密码的日期 | UID | GID |
第四个字段 | 密码的最小使用期限 | GID | 以当前组为附加组的用户列表(分隔符为逗号) |
第五个字段 | 密码的最大使用期限 | 用户的描述信息 | |
第六个字段 | 密码警告时间段 | 用户家目录 | |
第七个字段 | 密码禁用期 | 用户的登录shell | |
第八个字段 | 帐号的过期日期 | ||
第九个字段 | 保留字段 |
例:
jay : x :1000:1000: jay : /home/jay :/bin/bash
用户名 密码占位符 UID GID 注释信息 用户家目录 执行shell
- 每个用户都有一个ID,就像是我们的身份证号码,是唯一的
- root用户的UID、GID都是0
- 用户分为
- 系统用户:用户ID在1-999
- 登录用户:用户ID在1000-60000
创建用户
useradd
- 语法:
useradd
[选项] 用户名 - 常用选项;
-u
指定uid-g
指定拥护所属基本组、组名或GID-G 组名
为用户添加附加组,附加组必须事先存在-c
“注释信息” 添加注释信息-d 目录
指定用户的家目录。此目录必须不能事先存在,否则将不会从/etc/skel中复制环境设置文件-s shell
指定登录shell-M
创建用户时不给其创建家目录-r
添加一个系统用户
[root@bad test]# id jay //查看用户jay的详细信息
uid=1000(jay) gid=1000(jay) 组=1000(jay)
[root@bad test]# useradd -u 1005 -g jay -G user lili //创建用户lili,指定uid为1005,基本组为jay组,附加组为user
[root@bad test]# id lili
uid=1005(lili) gid=1000(jay) 组=1000(jay),1001(user)
[root@bad test]# ls /home/
jay lili bad
[root@bad test]# ls /opt/
rh
[root@bad test]# useradd -d /opt/tom tom //创建用户,指定家目录为/opt/tom
[root@bad test]# ls /opt/
rh tom
[root@bad test]# id tom
uid=1006(tom) gid=1006(tom) 组=1006(tom)
[root@bad test]# useradd -s /bin/sh lisi //创建用户lisi指定执行shell为/bin/sh
[root@bad test]# su - lisi
-sh-4.2$
[root@bad test]# useradd -M -s /sbin/nologin -r jerry //创建一个系统用户jerry不创建家目录,指定shell不允许登录系统,
[root@bad test]# id jerry
uid=992(jerry) gid=990(jerry) 组=990(jerry)
[root@bad test]# ls /home/
jay lili lisi bad
[root@bad test]# su jerry
This account is currently not available.
[root@bad test]# vim /etc/login.defs //默认配置
- 在创建用户时,会默认创建一个相同名的组,这个组叫私有组也叫基本组
- 除了基本组,用户还可以被加到其他组,这个组叫附加组
创建了一个用户,我们要怎么看是否创建成功了呢?这个时候,就会用到id
命令了。
查看用户账号信息
id
- 语法:
id
[选项] 参数 - 常用选项:
-u
查看UID-g
查看GID-G
查看Groups
[root@bad test]# id -u jerry
992
[root@bad test]# id -g jerry
990
[root@bad test]# id -G jerry
990
修改账户属性
usermod
- 语法:
usermod
[选项] 用户名 - 常用选项:
-u
修改uid-g
修改gid-a -G
添加附加组,不使用-a选项,会覆盖此前的附加组-d -m
改变用户家目录的同时把原来家目录的文件移动到新的家目录中-e YYYY-MM-DD
指明用户帐号过期日期-f INACTIVE
设定非活动期限-L
锁定帐号。被锁定的帐号在/etc/shadow文件中密码前面会有一个感叹号-U
解锁帐号
[root@bad test]# id bad //查看用户详细信息
uid=1001(bad) gid=1001(user) 组=1001(user)
[root@bad test]# usermod -u 1005 bad //修改uid为1005
[root@bad test]# id bad
uid=1005(bad) gid=1001(user) 组=1001(user)
[root@bad test]# usermod -g 1000 bad //修改gid为1000
[root@bad test]# id bad
uid=1005(bad) gid=1000(jay) 组=1000(jay)
[root@bad test]# usermod -G user bad //添加附加组为user
[root@bad test]# id bad
uid=1005(bad) gid=1000(jay) 组=1000(jay),1001(user)
[root@bad test]# groupadd a //创建新组为a
[root@bad test]# usermod -G a bad //给用户bad指定附加组a
[root@bad test]# id bad
uid=1005(bad) gid=1000(jay) 组=1000(jay),1002(a)
[root@bad test]# usermod -aG user bad //再原附加组的基础上添加附加组
[root@bad test]# id bad
uid=1005(bad) gid=1000(jay) 组=1000(jay),1001(user),1002(a)
[root@bad ~]# tail -3 /etc/passwd //查看密码配置文件
tcpdump:x:72:72::/:/sbin/nologin
jay:x:1000:1000:jay:/home/jay:/bin/bash
bad:x:1005:1000::/home/bad:/bin/bash
[root@bad ~]# usermod -c "hello bad" bad //为用户bad添加注释信息
[root@bad ~]# tail -3 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
jay:x:1000:1000:jay:/home/jay:/bin/bash
bad:x:1005:1000:hello bad:/home/bad:/bin/bash
删除用户
userdel
- 语法:
userdel
[选项] 用户名 - 选项:
-r
删除用户的同时删除其家目录
[root@bad test]# ls /home/ //查看家目录下的目录里
jay lili lisi bad
[root@bad test]# userdel -r lili //删除用户,并删除家目录
[root@bad test]# ls /home/
jay lisi bad
如果我们在删除用户的时候,没有删除其家目录,那么在
/home
目录下,还是依旧会看到我们创建的用户的目录。可以将目录删除,或者重新建一个同名的用户,重新删除用户。
切换用户
su
切换用户的方式 | 特点 |
---|---|
su 用户名 | 非登录式切换,即不会读取目标用户的配置文件 |
su - 用户名 | 登录式切换,即会读取目标用户的配置文件。完全切换 |
su - | 不指定用户时默认切换至root用户 |
[root@bad test]# su - jay //切换jay用户,并切换到jay的家目录
上一次登录:日 10月 20 15:45:30 CST 2019:0 上
[jay@bad ~]$ pwd //查看当前位置
/home/jay
[jay@bad ~]$ exit
登出
[root@bad test]# su jay //切换用户,不切换目录
[jay@bad test]$ pwd
/root/test
[jay@bad test]$ su - //不指定用户默认为root用户
密码:
上一次登录:四 11月 7 00:40:36 CST 2019pts/0 上
[root@bad ~]# whoami //查看当前登录用户
root
- 语法:
su - 用户名 -c '命令'
- 切换身份执行命令,命令执行结束后又回到原来的身份
[root@bad ~]# su - bad -c 'touch abc'
[root@bad ~]# ll /home/bad/
总用量 0
-rw-r--r--. 1 bad jay 0 11月 7 14:07 abc
root用户切换至其他用户时,是不需要密码的。但是其他的用户想要切换别的用户,需要输入切换的用户的密码
sudo
- 配置文件:/etc/sudoers
- 语法:sudo 选项 命令
- 选项:
-V
显示版本编号-h
会显示版本编号及指令的使用方式说明-l
列出当前用户可以使用的所有sudo类命令-v
在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码-k
使认证信息失效,如果不指定-k,默认认证信息在5分钟后失效-b
将要执行的指令放在后台执行-u
用户名 //以指定的用户名执行命令,默认为root
bash配置文件
配置文件类型 | 配置文件路径 |
---|---|
全局配置 | /etc/profile、/etc/profile.d/*.sh、/etc/bashrc |
个人配置 | ~/.bash_profile、~/.bashrc |
配置文件类型 | 功能 |
---|---|
profile类 | 为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本 |
bashrc | 为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名 |
在RHCE的考试中,为了保险起见,通常会写一个脚本,以保证我们所做的服务配置,能够在机器重启之后挂载成功。而这个脚本需要执行就会放在全局配置文件中,以及命令别名都会涉及到这里。
密码管理
passwd
- 语法:
passwd
[选项] username - 选项:
--stdin
从标准输入获取用户密码-l
锁定用户-u
解锁用户-d
删除用户密码-n mindays
指定最短使用期限-x mandays
指定最长使用期限-w warndays
提前多少天开始警告-i inactivedays
非活动期限,密码过期后到禁用前的这段时间
这里没有举例,可以自己练习,可以在
/etc/shadow
中查看修改的用户的详细信息
修改用户密码期限
chage
- 用于修改用户密码过期信息的命令
- 语法:
chage
[选项] username - 选项:
-d
最近一次的修改时间-E
过期时间-I
非活动时间-m
最短使用期限-M
最长使用期限-W
警告时间
这条命令我用到过的比较少,但是工作应该用的会多一点。
密码生成工具
openssl
openssl
密码生成工具- 语法:
openssl
command [ command_opts ] [ command_args ] - 选项:
command
包含标准命令、消息摘要命令、加密命令version
查看程序版本号dgst
提取特征码passwd
生成密码rand
生成伪随机数
//提取特征码
[root@bad ~]# openssl dgst -md5 /etc/fstab
MD5(/etc/fstab)= a977cc5e638d779ed880f3fee6d7067e
//生成密码 openssl passwd -1 -salt string //string一般为8位
[root@bad ~]# openssl passwd -1 -salt hellotom
Password:
$1$hellotom$HpEDmPGqWwhP/eHg0kJHA0
//生成随机数 openssl rand -base64 NUM
//NUM表示随机数的长度
[root@bad ~]# openssl rand -base64 20
S/q8tjUSBuUNHb+0cgDX66dbvTQ=
组管理
创建组
groupadd
- 语法:
groupadd
[选项] groupname - 选项:
-g GID
指定GID-r
添加一个系统组
修改组信息
groupmod
- 语法:
groupmod
[选项] groupname - 选项:
-g GID
指定GID-n groupname
修改组名
删除组
groupdel
- 语法:
groupdel
groupname
给组设密码
gpasswd
- 语法:
gpasswd
[选项] group - 选项:
-a username
将用户添加至组-d username
将用户从组中删除-r -passwd
删除组密码
切换组
newgrp
- 语法:
newgrp
groepname
这条命令我几乎没有用过。当你以以一个非root的用户登录,可以使用这条命令临时切换到新的基本组,但是需要输入要切换的基本组的密码。使用
exit
就可以退出新的基本组,回到当前用户原本的基本组。
权限管理
那权限怎么看呢?其实很简单,在使用ll
命令的时候,是不是发现文件显示一大串?那么最前面的一列就是。第一个字符表示文件类型,之后的九位就表示权限。
-
首先我们要知道,文件的权限主要针对的对象
u
(owner)属主,即文件拥有者g
(group)数组,即文件拥有的组o
(other)其他用户,即除文件拥有者及拥有者所属组之外的所有用户
-
每个文件或者目录都有三种权限
r
可读w
可写x
可执行
注意!在RHCSA的题目中,有涉及到设置权限的题,其中有一个坑就是要你给目录可读的权限。因为是个目录,如果可读,那么就一定有执行权限,因为你要进入到目录中去才可以查看目录中的内容。
权限的二进制十进制转换
- 不要慌,进行进制转换,是为了帮助我们更好的理解权限
权限 | 二进制 | 十进制 |
---|---|---|
— | 000 | 0 |
–x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r– | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
- 权限通常有两种表达方式,一种是用字母
rwx
来表示,还有一种就是用十进制数来表示
不要看着这么多就慌了,记不住怎么办?我在刚开始学的时候,权限完全是懵逼的,但是只要你理解了,也就很简单。无非就读写执行,421。数字表示就是自由组合了。
修改权限
chmod
- 即change modify,修改
- 语法:
chmod
[选项] 文件或目录 - 选项:
-R
递归修改权限,修改目录及目录中的文件权限时需要
chown
- 即change owner,修改属主,也可以修改属组
- 语法:
chown 用户名 文件名
//修改属主 - 语法:
chown 用户名.组名 文件名
//修改属主和属组,中间有点 - 选项:
-R
递归修改权限
在RHCSA中,会有一道题是需要修改文件的属主和属组的。
chgrp
- 语法:
chown
[选项] 组名 文件名 - 选项:
-R
递归修改
这条命令我们一般使用的少,一般都是直接使用的
chown
。
遮罩码
-
这个其实就是将文件的权限进行一个隐藏,能更安全
-
有个变量叫umask,默认值为0022
-
文件最终权限是:666-umask
-
目录最终权限是:777-umask
文件默认是不能具有执行权限的,如果算得结果有执行权限,则将其权限整体+1
特殊权限
SUID
- 针对可执行的程序文件
- 程序启动的进程的属主是程序文件自身的属主,不是启动者为属主
chmod u+s
文件chmod u-s
文件chmod 4755
文件
- 程序启动的进程的属主是程序文件自身的属主,不是启动者为属主
如果文件本身拥有执行权限,则显示SUID为s,否则为S
SGID
- 针对目录
- 用户创建文件时,属组为此用户所属的基本组
chmod g+s
目录chmod g-s
目录chmod 2755
目录
- 用户创建文件时,属组为此用户所属的基本组
如果目录本身拥有执行权限,则显示SGID为s,否则为S
Sticky
- 针对目录
- 在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
chmod o+t
目录chmod o-t
目录chmod 1755
目录
- 在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
如果目录本身拥有执行权限,则显示Sticky为t,否则为T
后面两种权限在RHCSA中都会有相关的题目,需要掌握。
一般不会使用7755权限
facl
- Filesystem Access Control List,文件系统访问控制列表
- 语法:
setfacl
[选项] 语法 文件名-
-m
设定u:用户名:权限
g:组名:权限
-
-x
取消特殊权限u:用户名
g:组名
-
-b
Remove all 即清除所有特殊权限
-
- 如果要为某个目录设定默认的访问控制列表,则设定时在u或g前面加上d
- setfacl -m d:u:test:rw 文件名
设置特殊权限也是RHCSA中必考的题目,需要多练习。
管理命令
w
显示当前系统登录用户,以及在做什么sleep
睡眠- sleep 数字
s
秒,默认m
分h
小时d
天
- sleep 数字
写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep表示停顿#秒后再执行后面的命令
last
显示/var/log/wtmp文件,显示用户登录历史及系统重启历史-n #
显示最近#次的相关信息
lastb
显示/var/log/btmp文件,显示用户错误的登录尝试-n #
显示最近#次的相关信息
lastlog
显示每个用户最近一次成功登录信息-u
用户名 //显示特定用户最近的登录信息
basename
//显示路径基名
[root@bad test]# ls
abc test
[root@bad test]# ll abc
-rw-r--r--. 1 root root 0 11月 9 10:00 abc
[root@bad test]# chown jay abc
[root@bad test]# ll
总用量 0
-rw-r--r--. 1 jay root 0 11月 9 10:00 abc
drw-------. 2 root root 6 11月 9 09:32 test
[root@bad test]# chown .jay abc
[root@bad test]# ll abc
-rw-r--r--. 1 jay jay 0 11月 9 10:00 abc
[root@bad test]# chown root.root
chown: "root.root" 后缺少操作数
Try 'chown --help' for more information.
[root@bad test]# chown root.root abc
以上内容均属原创,如有不详或错误,敬请指出。