• 售前

  • 售后

热门帖子
入门百科

Linux 高级用户,组和权限先容

[复制链接]
做农告根乎 显示全部楼层 发表于 2021-10-26 14:08:31 |阅读模式 打印 上一主题 下一主题
下面先来相识一下关于用户,组的四个文件
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
起首来相识一下/etc/passwd这个文件,
这个文件只是存放用户的信息
[root@localhost ~]#
[root@localhost ~]# cat /etc/passwd | grep user1
user1:x:500:500::/home/user1:/bin/bash
[root@localhost ~]#
这内里统共有七个栏位,相识一下每个栏位的意义。
User1 用户名
X 用户的密码位(假如这个位上面没有这个X,就代表登陆这个用户不必要密码)
500 UID
500 GID
第五个是密码的形貌信息,这里没有。
/home/user1 用户的/home目录
/bin/bash 用户的shell
在这里有个比力特殊的shell /sbin/nologin
假如将用户的shell改为/sbin/nologin,那么这儿用户只可以登陆服务,但是不可以登陆计算机。不允许交互式登陆。
再来相识一下/etc/shadow这个文件,
这个文件重要是用来保存用户的密码信息和战略。
[root@localhost ~]#
[root@localhost ~]# cat /etc/shadow | grep user1
user1:$1$2WJEp9K7$h.NRfJsaEm8VMksBQHZm7.:14668:0:99999:7:::
[root@localhost ~]#
如今来相识一下每个栏位的意义
User1 用户名
第二个栏位是保存用户的密码,这个密码是颠末MD5的加密的。
假如密码位前面有个!,就代表这个用户被锁定了。
14668 密码最后一次修改的时间
0 密码最少的存活期(为0代表用户可以随时更改密码)
99999 密码过期时间(99999代表密码永不过期)
7 密码过期告诫天数(在密码过期的前七天告诫用户)
再来相识一下/etc/group这个文件,
这个文件重要是用于存放组的信息。
[root@localhost ~]#
[root@localhost ~]# cat /etc/group | grep user1
user1:x:500:
[root@localhost ~]#
如今来相识一下每个栏位的意义
User 组的名字
X 组的密码位
500 GID
可以将用户直接添加到冒号反面,就代表加入了这个组。
最厥后相识一下/etc/gshadow这个文件,
这个文件重要是保存组密码的信息。
[root@localhost ~]#
[root@localhost ~]# cat /etc/gshadow | grep user1
user1:!::
[root@localhost ~]#
User 组的名字
可以看到,这个组默认是没有密码的,如今我们给它设置一个密码。
[root@localhost ~]#
[root@localhost ~]# gpasswd user1
Changing the password for group user1
New Password:
Re-enter new password:
[root@localhost ~]# cat /etc/gshadow | grep user1
user1:$1$ZxvTf/dQ$DWmf//MTxpwJIzTZIcYQZ/::
[root@localhost ~]#
可以看到,组如今也有了一个密码,而且也是颠末MD5加密的。
下面来看下组的密码有什么意义。
[root@localhost ~]#
[root@localhost ~]# useradd user2
[root@localhost ~]#
[root@localhost ~]# su – user2
[user2@localhost ~]$
[user2@localhost ~]$ newgrp user1
Password:
[user2@localhost ~]$ id
uid=501(user2) gid=500(user1) groups=500(user1),501(user2)
[user2@localhost ~]$
可以看到,我们user2如今加入到了user1,变成了user1组内里的成员,也就是说组密码的意义在于,一个普通用户只要有组的密码,就可以加入到这个组内里来,成为这个组内里的成员。
用户管理工具
Useradd 添加用户
#useradd user1(用户名)
[root@localhost ~]#
[root@localhost ~]# useradd user1
[root@localhost ~]#
[root@localhost ~]# id user1
uid=502(user1) gid=502(user1) groups=502(user1)
[root@localhost ~]#
User1就添加乐成了。
Usermod 修改用户
Userdel 删除用户
#userdel -r user1(用户名)
[root@localhost ~]#
[root@localhost ~]# userdel -r user1
[root@localhost ~]#
[root@localhost ~]# id user1
id: user1: No such user
[root@localhost ~]#
User1就乐成删除了
-r 在删除用户的同时删除用户的/home目录。
关于监督登陆的工具
#w
[root@localhost ~]# w
15:27:32 up 15:31, 3 users, load average: 0.81, 0.25, 0.08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 - 21Feb10 ?xdm? 3:07 0.30s /usr/bin/ gnome-
root pts/2 :0.0 15:27 0.00s 0.06s 0.01s w
root pts/1 192.168.0.20 15:27 13.00s 0.05s 0.05s - bash
[root@localhost ~]#
可以看到192.168.0.20正在连接我。
#last
[root@localhost ~]#
[root@localhost ~]# last
root pts/2 station20.exampl Sun Feb 28 15:32 still logged in
root pts/1 :0.0 Sun Feb 28 15:31 still logged in
root pts/2 :0.0 Fri Feb 26 17:21 – 00:32 (1+07:10)
root pts/1 :0.0 Mon Feb 22 23:07 – 21:46 (3+22:38)
root pts/2 :0.0 Mon Feb 22 18:31 - 23:07 (04:36)
root pts/2 :0.0 Mon Feb 22 14:33 - 14:33 (00:00)
root pts/1 :0.0 Sun Feb 21 17:33 - 18:31 (1+00:57)
root pts/1 :0.0 Sun Feb 21 17:28 - 17:33 (00:04)
root pts/1 :0.0 Sun Feb 21 13:30 - 17:28 (03:57)
root :0 Sun Feb 21 13:30 still logged in
root :0 Sun Feb 21 13:30 – 13:30 (00:00)
reboot system boot 2.6.18-164.el5 Sun Feb 21 13:29 (7+02:03)
root pts/1 :0.0 Sun Feb 21 21:22 – down (-7:-54)
root :0 Sun Feb 21 21:21 – down (-7:-54)
root :0 Sun Feb 21 21:21 – 21:21 (00:00)
reboot system boot 2.6.18-164.el5 Sun Feb 21 21:17 (-7:-50)
reboot system boot 2.6.18-164.el5 Sun Feb 21 21:14 (00:02)
wtmp begins Sun Feb 21 21:14:07 2010
[root@localhost ~]#
曾经有那些用户登陆过我的计算机。并且在我计算机上面登陆了多久,很多东西都可以查察的到。
#lastb
[root@localhost ~]#
[root@localhost ~]# lastb
root ssh:notty www.google.com. Mon Feb 22 15:50 – 15:50 (00:00)
root ssh:notty www.google.com. Mon Feb 22 15:50 – 15:50 (00:00)
root ssh:notty www.google.com. Mon Feb 22 15:50 – 15:50 (00:00)
btmp begins Mon Feb 22 15:50:50 2010
[root@localhost ~]#
这条下令体现的结果是那些计算机曾经登录过我的计算机,但是没有登录乐成的计算机。只会体现没有登录乐成的信息,并且它们是使用的什么方法实验连接我的计算机,这内里都很具体。
默认权限(defaults perm)
默认的时候,我们在创建文件和目录的时候,并不是继承了上级目录的权限,而是根据目录和文件的UMASK值来决定的。
关于UMASK值
就是用来定义文件的默认权限的
如何在系统查询UMASK值呢?
#umask
[root@localhost ~]#
[root@localhost ~]# umask
0022
[root@localhost ~]#
可以看到,系统中的umask值为0022
固然这个umask也是可以修改的
#umask 0033
[root@localhost ~]#
[root@localhost ~]# umask 0033
[root@localhost ~]#
[root@localhost ~]# umask
0033
[root@localhost ~]#
系统的umask值被我们改成0033了。
Umask是怎么定义目录和文件的权限的
对于差别用户,umask定义都不一样。
对于root uamsk值为022
对于普通用户 umask值为002
那么我们在创建目录和文件的时候默认权限是多少呢。
对于root 目录 777-022 755
文件 666-022 644
对于普通用户 目录 777-002 775
文件 666-002 664
这就是我们的创建目录和文件的默认权限。
留意 :我们在用最高权限减umask值的时候一定是用二进制的数值来减,而不是十进制的数值来减。
[root@localhost ~]#
[root@localhost ~]# umask
0022
[root@localhost ~]# mkdir test
[root@localhost ~]# touch test1
[root@localhost ~]# ll | grep test
drwxr-xr-x 2 root root 4096 Feb 28 16:42 test
-rw-r–r– 1 root root 0 Feb 28 16:43 test1
[root@localhost ~]#
可以看到,我们目录的默认权限简直是755.文件的默认权限简直是644。
[root@localhost ~]#
[root@localhost ~]# su – user1
[user1@localhost ~]$
[user1@localhost ~]$ umask
0002
[user1@localhost ~]$ mkdir file
[user1@localhost ~]$
[user1@localhost ~]$ touch file1
[user1@localhost ~]$ ll | grep file
drwxrwxr-x 2 user1 user1 1024 Feb 28 16:44 file
-rw-rw-r– 1 user1 user1 0 Feb 28 16:44 file1
[user1@localhost ~]$
可以看到,在普通用户的身份下面。我们创建的目录的权限为775,文件的权限为664。
关于三个特殊的权限
1 .suid权限
假如在一个可执行文件(下令或者脚本)运用了suid后,那么任何人在执行该下令的时候会临时拥有该下令的拥有人权限。
我们知道passwd这个下令管理员可以运行,另有普通用户也可以运行。
另有假如我们利用passwd来修改密码乐成了,是要在/etc/shadow这个文件中去添加一个密码位的,如今我们看看这个文件的权限。
[root@localhost ~]#
[root@localhost ~]# ls -l /etc/shadow
-r——– 1 root root 1050 Feb 25 23:01 /etc/shadow
[root@localhost ~]#
可以看到,这个文件普通用户什么权限也没有,连读的权限都没有,那么普通用户是怎么修改自己的密码,并且能够将密码写在/etc/shadow文件内里的呢。
[root@localhost ~]#
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd
[root@localhost ~]#
我们可以看到passwd这个下令的权限位上面多了一个s,这个是我们从前从来没有看见过的,这个就是suid。
当普通用户利用passwd来修改密码的时候,由于passwd下令上面有suid权限,那么普通用户就会临时拥有该下令的拥有人root的权限,从而就可以往/etc/shadow这个文件内里去写入密码位了。
如今另有个题目,假如普通用户由于suid缘故原由可以修改密码,那么普通用户能否去修改别的用户的密码呢,我们来实验一下。
[user1@localhost ~]$
[user1@localhost ~]$ passwd user2
passwd: Only root can specify a user name.
[user1@localhost ~]$
我们可以看到,是不可以修改的。假如按照理论情况,我们的passwd下令由于具有suid权限,那么是可以修改别的用户的密码的。这里并不是passwd下令不具有suid功能,它也并没有报权限拒绝。而是提示我们passwd这个下令只有root用户才可以在反面接上用户名,系统是从语法上面做了限制,而并不是suid,没有生效。这也是系统为了保证安全。
我们在做一个试验来相识suid的作用
先来看看系统中根的权限是什么
[root@localhost ~]#
[root@localhost ~]# ls -ld /
drwxr-xr-x 25 root root 4096 Feb 28 00:30 /
[root@localhost ~]#
可以看到,根的权限是755,也就是说一个普通用户是没有办法往根内里写入数据的,普通用户是属于其他人吗。我们试试
[root@localhost ~]#
[root@localhost ~]# su – user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /
[user1@localhost /]$ mkdir test
mkdir: cannot create directory `test’: Permission denied
[user1@localhost /]$
可以看到,我们的普通用户user1对根没有写入的权限。
如今我们给mkdir这条下令加一个suid的权限。看看会发生什么。
[root@localhost ~]#
[root@localhost ~]# which mkdir
/bin/mkdir
[root@localhost ~]# ll /bin/mkdir
-rwxr-xr-x 1 root root 29852 Jul 13 2009 /bin/mkdir
[root@localhost ~]#
[root@localhost ~]# chmod u+s /bin/mkdir
[root@localhost ~]#
[root@localhost ~]# ll /bin/mkdir
-rwsr-xr-x 1 root root 29852 Jul 13 2009 /bin/mkdir
[root@localhost ~]#
可以看到,mkdir这个下令的权限已经多了一个s权限。
如今我们在使用普通用户去根下面创建一个文件,
[root@localhost ~]#
[root@localhost ~]# su – user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /
[user1@localhost /]$ mkdir file
[user1@localhost /]$
[user1@localhost /]$ ll -ld file/
drwxrwxr-x 2 root user1 4096 Feb 28 21:58 file/
[user1@localhost /]$
如今我们就可以在根下面创建目录了,是由于我们普通用户在使用mkdir这条下令的时候临时变成了该下令的拥有人的权限,全部普通用户就可以在根下面创建目录,还可以看到,我们通过user1在根下面创建了一个文件,其拥有人也是root,这个也很好的分析了我们简直是使用root的身份去创建的file这个目录。
另有一个题目,我们的mkdir这个下令由于多了一个s位,那么从前的x位权限到那边去了呢。假如是S,代表从前是没有x权限,假如是s,就代表从前有x权限。
[root@localhost ~]#
[root@localhost ~]# ll /bin/mkdir
-rwsr-xr-x 1 root root 29852 Jul 13 2009 /bin/mkdir
[root@localhost ~]# chmod u-x /bin/mkdir
[root@localhost ~]# ll /bin/mkdir
-rwSr-xr-x 1 root root 29852 Jul 13 2009 /bin/mkdir
[root@localhost ~]# chmod u+x /bin/mkdir
[root@localhost ~]# ll /bin/mkdir
-rwsr-xr-x 1 root root 29852 Jul 13 2009 /bin/mkdir
[root@localhost ~]#
可以看到,我们去掉了x权限,就变成了S,我们加上x权限,就又变成了s。
2.sgid权限
刚才我们的suid只可以运用在一个二进制文件上面,也就是下令上面。
而我们的sgid可以运用在下令和目录上面。
下面先来看下sgid运用在下令上面
假如允许运用在下令上面,和刚才的suid一样,只是变成了临时拥有该下令拥有组的权限,就这点区别。
下面在来看下sgid运用在目录上面
假如当一个目录运用的sgid权限,那么任何人在该目录创建的文件和目录就会继承该目录自己的组。
如今我们通过一个试验来相识sgid的权限,
[root@localhost ~]#
[root@localhost ~]# mkdir /redhat
[root@localhost ~]#
[root@localhost ~]# chmod 777 /redhat/
[root@localhost ~]#
[root@localhost ~]# ll -ld /redhat/
drwxrwxrwx 2 root root 4096 Mar 1 21:26 /redhat/
[root@localhost ~]#
如今我们新建了一个redhat目录,并且这个目录的权限是777,如今普通用户对这个目录也应该是rwx的权限,我们试试,
[root@localhost ~]#
[root@localhost ~]# su – user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /redhat/
[user1@localhost redhat]$
[user1@localhost redhat]$ touch 1.txt
[user1@localhost redhat]$ ls
1.txt
[user1@localhost redhat]$
我们简直可以创建文件,那么这个文件的拥有人和拥有组会是谁呢,肯定是user1。如今我们就在这个目录上面添加一个sgid的权限。
[root@localhost ~]#
[root@localhost ~]# chmod g+s /redhat/
[root@localhost ~]#
[root@localhost ~]# su – user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /redhat/
[user1@localhost redhat]$
[user1@localhost redhat]$ touch 2.txt
[user1@localhost redhat]$
[user1@localhost redhat]$ ll
total 0
-rw-rw-r– 1 user1 user1 0 Mar 1 21:28 1.txt
-rw-rw-r– 1 user1 root 0 Mar 1 21:30 2.txt
[user1@localhost redhat]$
当我给redhat这个目录添加了一个sgid的权限以后,我们利用普通用户在redhat目录内里创建的文件的拥有组就变成了root了。
如今我们再来明确一下sgid的权限,当我们在redhat目录上面运用了sgid的权限,那么普通用户user1在redhat目录下面创建的文件的拥有组就会继承redhat目录自己的组,不会随着用户的改变而改变。
另有一点,和刚刚一样,假如有x权限,就会体现s,假如没有x权限,就会体现S。
3. sticky权限
Sticky只可以运用在目录上面
假如在一个目录上面运用了sticky权限,那么仅root用户和和文件的拥有人才气删除该目录中的文件。
如今我们通过一个试验来相识sticky权限。
[root@localhost ~]#
[root@localhost ~]# ls -ld /redhat/
drwxrwxrwx 3 root root 4096 Mar 1 21:48 /redhat/
[root@localhost ~]#
Redhat目录的权限是777,如今普通用户应该是可以向这个目录内里创建文件的,我们来试试。
[root@localhost ~]#
[root@localhost ~]# su – user1
[user1@localhost ~]$ cd /redhat/
[user1@localhost redhat]$ touch 1.txt
[user1@localhost redhat]$ ls
1.txt
[user1@localhost redhat]$
我们使用user1在这个目录中创建了一个1.txt的文件,那么我们的user2能否去删除这个文件呢,肯定是可以的,由于我们的目录权限是777,全部我们的普通用户user2对这个目录是有w的权限的,有w权限就意味着可以在这个目录中创建和删除文件。我们试下,
[root@localhost ~]#
[root@localhost ~]# su – user2
[user2@localhost ~]$
[user2@localhost ~]$ cd /redhat/
[user2@localhost redhat]$
[user2@localhost redhat]$ ls
1.txt
[user2@localhost redhat]$ rm -rf 1.txt
[user2@localhost redhat]$ ls
[user2@localhost redhat]$
OK,是没有题目的,我们简直可以删除由user1创建的文件1.txt。
如今我们给redhat目录添加一个sticky,看看会发生什么。
[root@localhost ~]#
[root@localhost ~]# chmod o+t /redhat/
[root@localhost ~]# ls -ld /redhat/
drwxrwxrwt 2 root root 4096 Mar 1 23:19 /redhat/
[root@localhost ~]#
可以看到,redhat目录已经添加了一个t的权限,这个就是sticky权限。
和上面一样,假如有x权限,就体现t。假如没有x权限,就体现T。
我们在使用user1创建一个文件,然后使用user2删除这个文件,
[root@localhost ~]#
[root@localhost ~]# su – user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /redhat/
[user1@localhost redhat]$
[user1@localhost redhat]$ touch 2.txt
[user1@localhost redhat]$
[user1@localhost redhat]$ ls
2.txt
[user1@localhost redhat]$ su – user2
Password:
[user2@localhost ~]$ cd /redhat/
[user2@localhost redhat]$ ls
2.txt
[user2@localhost redhat]$ rm -rf 2.txt
rm: cannot remove `2.txt’: Operation not permitted
[user2@localhost redhat]$
可以看到,如今我们使用user1创建的文件,user2是不可以删除的。
这个就是sticky权限的作用,
当一个redhat目录添加了一个sticky权限后,那么user1在redhat目录内里创建的2.txt文件,就只有root用户和user1才可以删除该文件。
在我们系统中有个目录就是运用了sticky权限。
[root@localhost ~]#
[root@localhost ~]# ls -ld /tmp/
drwxrwxrwt 15 root root 4096 Feb 28 00:28 /tmp/
[root@localhost ~]#
我们的/tmp目录默认就有了sticky权限。
我们的特殊权限也可以用数字来表示。
Suid 4
Sgid 2
Sticky 1
总结:
Suid权限用在下令上面,而且只能用在用户上面。
Sgid权限用在下令和目录上面,而且只能用在组上面。
Sticky权限用在目录上面,而且只能用在其他人上面。
关于高级权限的题目就这么多,在133内里还会有关于用户,组,权限的讨论。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作