一、用户的创建
- 在我们创建一个用户时,如果创建时指定了参数,以指定参数为准,如果没有指定参数,那么就以系统中默认的两个配置文件(/etc/login.defs /etc/default/useradd)作为参照。
二、组的应用
- 组的概念:
组就是一个逻辑概念。逻辑上将多个用户捆绑成一个组,当我们操作组的时候就相当于在操作组下的所有用户。 - 组的分类:
基本组:创建时指定组,就叫基本组
私有组:创建时没有指定组,默认创建与用户同名的组
附加组:对于用户来说,可以有N多个。 - 组的信息存放位置:
- /etc/group
grep '1newg' /etc/group
1newg : x : 6666 :
#组名称 密码 组GID 显示附加组
2. /etc/gshadow
grep '1newg' /etc/gshadow
1newg : ! : :
#组名称 密码 组管理员 显示附加组成员
- 新增组
groupadd+选项+组名=创建组(不加选项则默认基本组)
选项:
-g :指定GID
-r :创建系统组
groupadd -g 6666 newg #创建gid为6666组名为newg的组
groupadd -r oldg #创建名为oldg的系统组
- 修改组信息
groupmod+选项+组名=修改组信息
选项:
-g :修改GID
-n :修改组名称
groupmod -n 1newg newg #改组newg名称为1newg
- 删除组
groupdel+组名=删除组
默认删除私有组,如果要删除基本组,需要先删除基本组中的用户才可以删除该组。但是附加进组的成员无需考虑。
三、用户的切换与提权
- Linux Shell主要分为如下几类
交互式shell,等待用户输入执行的命令(终端操作,需要不断提示)
非交互式shell,执行shell脚本, 脚本执行结束后shell自动退出
登陆shell,需要输入用户名和密码才能进入Shell,日常接触的最多的一种
非登陆shell,不需要输入用户和密码就能进入Shell,比如运行bash会开启一个新的会话窗口 - bash shell配置文件介绍(文件主要保存用户的工作环境)
个人配置文件:~/.bash_profile ~/.bashrc 。全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc
profile类文件, 设定环境变量, 登陆前运行的脚本和命令。bashrc 类文件, 设定本地变量, 定义命令别名
PS: 如果全局配置和个人配置产生冲突,以个人配置为准。 - 登陆系统后,环境变量配置文件的应用顺序是
#登录式shell配置文件执行顺序:
/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
#非登陆式shell配置文件执行顺序:
~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
- 用户切换
su - username属于登陆式shell,su username属于非登陆式shell,区别在于加载的环境变量不一样。
普通用户su -可以直接切换至root用户,但需要输入root用户的密码。
超级管理员root用户使用su - username切换普通用户不需要输入任何密码。 - 快速提权
su命令在切换用户身份时,如果每个普通用户都能拿到root用户的密码,当其中某个用户不小心泄漏了root的密码,那系统会变得非常不安全。为了改进这个问题,从而产生了sudo这个命令。
visudo
Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
#输入visudo可以里面有一行是此代码
#这代表名称为wheel的组可以有所有权限,所以快速提权就是将用户的附加组添加wheel组即可
usermod admin -G wheel #添加wheel组为用户附加组
su - admin #切换用户
$ rm -rf /opt/ #删除/opt/,删除失败
rm: cannot remove ‘/opt/’: Permission denied
sudo rm -rf /opt #使用sudo权限,需要输入普通用户的密码
- 设置权限
方法一:
groupadd OPS #创建真实的组
groupadd DBS
useradd xu #创建用户
useradd li
usermod xu -G OPS #加入附加组
usermod li -G DBS
echo '1' |passwd --stdin xu #赋予密码
Changing password for user xu.
passwd: all authentication tokens updated successfully.
echo '1' |passwd --stdin li
Changing password for user li.
passwd: all authentication tokens updated successfully.
visudo #打开visudo粘贴
Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start
Cmnd_Alias STORAGE = /bin/mount, /bin/umount
Cmnd_Alias DELEGATING = /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
%OPS ALL=(ALL) SOFTWARE #给组赋予权限
%DBA ALL=(ALL) SOFTWARE,PROCESSES
visudo -c #检查配置是否有错
Warning: /etc/sudoers:128 unused Cmnd_Alias "DELEGATING"
Warning: /etc/sudoers:124 unused Cmnd_Alias "NETWORKING"
Warning: /etc/sudoers:126 unused Cmnd_Alias "SERVICES"
Warning: /etc/sudoers:127 unused Cmnd_Alias "STORAGE"
/etc/sudoers: parsed OK
su - xu #切换用户并检查
sudo -l
User xu may run the following commands on oldboy:
(ALL) /bin/rpm, /usr/bin/yum
方法二:
useradd zhang #同样创建用户
useradd yang
visudo #编辑sudo
User_Alias OPS = zhang #使用sudo定义分组,这个系统group没什么关系
User_Alias DBA = yang
Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start
Cmnd_Alias STORAGE = /bin/mount, /bin/umount
Cmnd_Alias DELEGATING = /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
%OPS ALL=(ALL) SOFTWARE #给组赋予权限
%DBA ALL=(ALL) SOFTWARE,PROCESSES
#接下来登陆对应的用户使用 sudo -l 验证权限