任务目标:学会随意切换用户 添加用户 并管理用户之间的权限
3种 用户
超级用户 root uid =0
普通用户 uid 500 - 60000
伪用户 uid 1- 499
每个用户 至少有一个 用户组
useradd
最简单的添加用户的方法:
useradd lisi
passwd lisi
su linux
案例:
情景:多人协同开发,root建立的software文件夹,其他用户没有写权限,要授权用户jack 和mary 对目录software 同时具有写权限
可能会用到的命令:
groupadd softteam //参数比较多 可以通过groupadd --help获得,意思是 添加名为softeam的用户组
usermod -G softteam jack //将 jack 添加到组 softteam 中
gpasswd -a mary softteam //把mary添加到softteam中 和上面差不多意思,参数不同,-A 指定管理员
chgrp softteam /software //chgrp命令变更文件或目录所属群组 这里的意思是把/software的所属组 改成softteam
chmod g+w /software //变更权限 让所属组对software有写的权限
检验组是否已经生成
grep 'softteam' /etc/group;
chown www testfile //改变所属者为www
实验:
# mkdir /home/software; //建立文件夹
# useradd jack //添加用户jack
# useradd mary
# groupadd softadmin; //添加组softadmin
# grep softadmin /etc/group; // 此处为查看softadmin 创建 成功与否,softadmin:x:505:
# usermod -G softadmin jack; //把jack添加到softadmin这个组中去
# usermod -G softteam mary;
# chgrp softadmin /home/software; //把这个文件夹的所属组 改成softadmin
# ls -ld /home/software; //查看目录的权限
# chmod g+w /home/software; //让所属组 有写的权限
试验后,可以用su + 用户名 ,检验一下 ,是否可以在目录添加文件
tail
tail -15 /etc/shadow //显示最后15行
sudo 和 su的分别
1 . su
su命令就是切换用户的工具, su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用户没有这个权限,而这个权限恰恰由root所拥有。解决办法无法有两个,一是退出beinan用户,重新以root用户登录,但这种办法并不是最好的;二是我们没有必要退出beinan用户,可以用su来切换到root下进行添加用户的工作,等任务完成后再退出root。我们可以看到当然通过su 切换是一种比较好的办法;
通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码,什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证;
su root //这个虽然切换到了root 但是没有切换到root的环境,sbin的命令还是没法使用
echo $PATH; //这个用来检验,发现环境变量中还是没有发现有sbin这个目录
su - root //切换至root用户 并 切换至root的环境,就能超级管理员的密码
但是su有着明显的安全问题,作为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户
2. sudo
sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;实际上就是root的身份来执行
sudo -l; //普通用户查看自己有那些命令权限
编辑/etc/sudoers
格式:
用户名(组名) 主机地址= 命令(绝对地址)
root状态下 输入visodu
example:
//允许hellen这个用户使用useradd这个命令 进入vi后 按i 下面提示--insert-- ,然后输入,输入后:wq退出保存,命令多个用逗号隔开
hellen localhost=/usr/sbin/useradd
hellen localhost=/usr/sbin/useradd,/bin/vi
授权后,并不代表能直接使用命令
sudo /usr/sbin/useradd sdfsdf; //使用绝对路径 前面加sudo