背景
在工作的时候,整个人感觉非常的迷糊之时,在线上环境中运行了rm命令,然后发现线上产生的日志文件的时间跨度非常的大。这时候感觉整个人都快要崩溃了都。幸好幸好,经过再三确认,并不是本人引起的,并且是符合预期的。事后,总结发现,虽然我是使用了rm命令,但是我所使用的角色并不能删除到线上文件,万事大吉,万事大吉。接下来做个实验,用来证明我是没有权限删除文件的,即Linux中不同用户是否可以互删文件
实现
在root的用户中编写创建用户的可执行文件:addUser.sh
useradd -d "/home/$1" -g "ysm" -m $1 # -d 表示该用户的主目录,-g表示指定用户组,-m表示主目录不存在的时候创建一个
passwd $1
在root的用户中给addUser.sh文件添加可执行权限
chmod +x addUser.sh
在root的用户中创建两个用户
./addUser.sh one
# 其中需要添加密码
./addUser.sh two
创建成功之后,在root用户下,切换到one这个用户
su - one
在one用户中的/home/one目录下创建一个a.txt文件
cd /home/one
touch a.txt
使用ls -l查看该文件信息
ls -l
# 输出
# -rw-r--r-- 1 one ysm 0 Oct 9 21:21 a.txt 其中one表示one这个用户,ysm表示one这个用户是属于ysm组的
退出one用户,并且切换到two用户,进入到/home/one目录下执行删除命令
exit # 执行这个之后就是root用户
su - two # 切换到two这个用户
cd /home/one
rm a.txt
# 输出
# rm: cannot remove \'a.txt\': Permission denied 这就表明我删除不成功,没有权限
总结
实验证明,我执行rm文件只能删除我当时所属角色的文件,哈哈哈哈。不同普通用户不可以互删文件。
注意
看懂需要useradd命令和ls -l命令的基础知识。
关于useradd可以参考:https://www.runoob.com/linux/linux-user-manage.html
关于ls -l可以参考:https://blog.csdn.net/sjzs5590/article/details/8254527
Linux系统中用户的扩展研究
进程 用户和文件
Linux中的用户及用户组
linux中只有两个等级:root和非root,
- 一个用户至少属于一个用户组
- 一个用户可以属于多个用户组
用户本身的区别主要是权限的区别
各个用户之间的区别还有:
- 是否拥有密码
- home目录不同
- 普通用户的home目录是/home/username/
- root用户的home目录是/root/
- 不同的shell(tty等)
所有用户都可以通过
来查看,passwd文件的格式为
<username>:<code>:<UID>:<GID>:<fullname>:<home_dir>:shell
UID
- UID 0 %t root用户
- UID 1~999 预留
- UID 1000 以上是正常登陆的用户
GID
一个用户可以属于多个用户组,其中存储在/etc/passwd里的是专职用户组,每个用户只有一个专职用户组,其余用户组关联存储在/etc/group文件中
隐密码文件
考虑到/etc/passwd所有人都可以查看,于是以x代替,密码统一存储到/etc/shadow文件(只有root可以访问),全部以密文存储,shadow文件的格式为
<loginname>:
<encrypted_code>:(* cannot login)
<last Time code change>:
<effective days>:
<day-left notify>:
<day-left effect>:
<date invalid date>:
<reserved bit>
组文件
组文件的存储格式为
<g_name>:<g_code>:<GID>:<in-group name>
正常情况下很少用到组密码,存储在/etc/shadow中
用户组文件中比较特殊的是组内用户名,其实是本组用户的列表,用,分割,如果字段为空则表示用户组为GID的用户名
普通用户使用sudo临时使用superuser的权限,使用sudo需要输入root密码,赋予用户权限需要修改
文件
为没有root权限的用户添加root执行权