Linux 高级用户,组和权限介绍




Linux 高级用户,组和权限介绍

2022-07-20 20:31:56 网络知识 官方管理员
下面先来了解一下关于用户,组的四个文件
/etc/passwd/etc/shadow/etc/group/etc/gshadow首先来了解一下/etc/passwd这个文件,这个文件只是存放用户的信息[root@localhost~]#[root@localhost~]#cat/etc/passwd|grepuser1user1:x:500:500::/home/user1:/bin/bash[root@localhost~]#这里面总共有七个栏位,了解一下每个栏位的意义。User1用户名X用户的密码位(如果这个位上面没有这个X,就代表登陆这个用户不需要密码)500UID500GID第五个是密码的描述信息,这里没有。/home/user1用户的/home目录/bin/bash用户的shell在这里有个比较特殊的shell/sbin/nologin如果将用户的shell改为/sbin/nologin,那么这儿用户只可以登陆服务,但是不可以登陆计算机。不允许交互式登陆。再来了解一下/etc/shadow这个文件,这个文件主要是用来保存用户的密码信息和策略。[root@localhost~]#[root@localhost~]#cat/etc/shadow|grepuser1user1:$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|grepuser1user1:x:500:[root@localhost~]#现在来了解一下每个栏位的意义User组的名字X组的密码位500GID可以将用户直接添加到冒号后面,就代表加入了这个组。最后来了解一下/etc/gshadow这个文件,这个文件主要是保存组密码的信息。[root@localhost~]#[root@localhost~]#cat/etc/gshadow|grepuser1user1:!::[root@localhost~]#User组的名字可以看到,这个组默认是没有密码的,现在我们给它设置一个密码。[root@localhost~]#[root@localhost~]#gpasswduser1Changingthepasswordforgroupuser1NewPassword:Re-enternewpassword:[root@localhost~]#cat/etc/gshadow|grepuser1user1:$1$ZxvTf/dQ$DWmf//MTxpwJIzTZIcYQZ/::[root@localhost~]#可以看到,组现在也有了一个密码,而且也是经过MD5加密的。下面来看下组的密码有什么意义。[root@localhost~]#[root@localhost~]#useradduser2[root@localhost~]#[root@localhost~]#su–user2[user2@localhost~]$[user2@localhost~]$newgrpuser1Password:[user2@localhost~]$iduid=501(user2)gid=500(user1)groups=500(user1),501(user2)[user2@localhost~]$可以看到,我们user2现在加入到了user1,变成了user1组里面的成员,也就是说组密码的意义在于,一个普通用户只要有组的密码,就可以加入到这个组里面来,成为这个组里面的成员。用户管理工具Useradd添加用户#useradduser1(用户名)[root@localhost~]#[root@localhost~]#useradduser1[root@localhost~]#[root@localhost~]#iduser1uid=502(user1)gid=502(user1)groups=502(user1)[root@localhost~]#User1就添加成功了。Usermod修改用户Userdel删除用户#userdel-ruser1(用户名)[root@localhost~]#[root@localhost~]#userdel-ruser1[root@localhost~]#[root@localhost~]#iduser1id:user1:Nosuchuser[root@localhost~]#User1就成功删除了-r在删除用户的同时删除用户的/home目录。关于监视登陆的工具#w[root@localhost~]#w15:27:32up15:31,3users,loadaverage:0.81,0.25,0.08USERTTYFROMLOGIN@IDLEJCPUPCPUWHATroot:0-21Feb10?xdm?3:070.30s/usr/bin/gnome-rootpts/2:0.015:270.00s0.06s0.01swrootpts/1192.168.0.2015:2713.00s0.05s0.05s-bash[root@localhost~]#可以看到192.168.0.20正在连接我。#last[root@localhost~]#[root@localhost~]#lastrootpts/2station20.examplSunFeb2815:32stillloggedinrootpts/1:0.0SunFeb2815:31stillloggedinrootpts/2:0.0FriFeb2617:21–00:32(1+07:10)rootpts/1:0.0MonFeb2223:07–21:46(3+22:38)rootpts/2:0.0MonFeb2218:31-23:07(04:36)rootpts/2:0.0MonFeb2214:33-14:33(00:00)rootpts/1:0.0SunFeb2117:33-18:31(1+00:57)rootpts/1:0.0SunFeb2117:28-17:33(00:04)rootpts/1:0.0SunFeb2113:30-17:28(03:57)root:0SunFeb2113:30stillloggedinroot:0SunFeb2113:30–13:30(00:00)rebootsystemboot2.6.18-164.el5SunFeb2113:29(7+02:03)rootpts/1:0.0SunFeb2121:22–down(-7:-54)root:0SunFeb2121:21–down(-7:-54)root:0SunFeb2121:21–21:21(00:00)rebootsystemboot2.6.18-164.el5SunFeb2121:17(-7:-50)rebootsystemboot2.6.18-164.el5SunFeb2121:14(00:02)wtmpbeginsSunFeb2121:14:072010[root@localhost~]#曾经有那些用户登陆过我的计算机。并且在我计算机上面登陆了多久,很多东西都可以查看的到。#lastb[root@localhost~]#[root@localhost~]#lastbrootssh:nottywww.google.com.MonFeb2215:50–15:50(00:00)rootssh:nottywww.google.com.MonFeb2215:50–15:50(00:00)rootssh:nottywww.google.com.MonFeb2215:50–15:50(00:00)btmpbeginsMonFeb2215:50:502010[root@localhost~]#这条命令显示的结果是那些计算机曾经登录过我的计算机,但是没有登录成功的计算机。只会显示没有登录成功的信息,并且它们是使用的什么方法尝试连接我的计算机,这里面都很详细。默认权限(defaultsperm)默认的时候,我们在创建文件和目录的时候,并不是继承了上级目录的权限,而是根据目录和文件的UMASK值来决定的。关于UMASK值就是用来定义文件的默认权限的如何在系统查询UMASK值呢?#umask[root@localhost~]#[root@localhost~]#umask0022[root@localhost~]#可以看到,系统中的umask值为0022当然这个umask也是可以修改的#umask0033[root@localhost~]#[root@localhost~]#umask0033[root@localhost~]#[root@localhost~]#umask0033[root@localhost~]#系统的umask值被我们改成0033了。Umask是怎么定义目录和文件的权限的对于不同用户,umask定义都不一样。对于rootuamsk值为022对于普通用户umask值为002那么我们在创建目录和文件的时候默认权限是多少呢。对于root目录777-022755文件666-022644对于普通用户目录777-002775文件666-002664这就是我们的创建目录和文件的默认权限。注意:我们在用最高权限减umask值的时候一定是用二进制的数值来减,而不是十进制的数值来减。[root@localhost~]#[root@localhost~]#umask0022[root@localhost~]#mkdirtest[root@localhost~]#touchtest1[root@localhost~]#ll|greptestdrwxr-xr-x2rootroot4096Feb2816:42test-rw-r–r–1rootroot0Feb2816:43test1[root@localhost~]#可以看到,我们目录的默认权限的确是755.文件的默认权限的确是644。[root@localhost~]#[root@localhost~]#su–user1[user1@localhost~]$[user1@localhost~]$umask0002[user1@localhost~]$mkdirfile[user1@localhost~]$[user1@localhost~]$touchfile1[user1@localhost~]$ll|grepfiledrwxrwxr-x2user1user11024Feb2816:44file-rw-rw-r–1user1user10Feb2816:44file1[user1@localhost~]$可以看到,在普通用户的身份下面。我们创建的目录的权限为775,文件的权限为664。关于三个特殊的权限1.suid权限如果在一个可执行文件(命令或者脚本)运用了suid后,那么任何人在执行该命令的时候会临时拥有该命令的拥有人权限。我们知道passwd这个命令管理员可以运行,还有普通用户也可以运行。还有如果我们利用passwd来修改密码成功了,是要在/etc/shadow这个文件中去添加一个密码位的,现在我们看看这个文件的权限。[root@localhost~]#[root@localhost~]#ls-l/etc/shadow-r——–1rootroot1050Feb2523:01/etc/shadow[root@localhost~]#可以看到,这个文件普通用户什么权限也没有,连读的权限都没有,那么普通用户是怎么修改自己的密码,并且能够将密码写在/etc/shadow文件里面的呢。[root@localhost~]#[root@localhost~]#ll/usr/bin/passwd-rwsr-xr-x1rootroot22960Jul172006/usr/bin/passwd[root@localhost~]#我们可以看到passwd这个命令的权限位上面多了一个s,这个是我们以前从来没有看见过的,这个就是suid。当普通用户利用passwd来修改密码的时候,由于passwd命令上面有suid权限,那么普通用户就会临时拥有该命令的拥有人root的权限,从而就可以往/etc/shadow这个文件里面去写入密码位了。现在还有个问题,如果普通用户因为suid原因可以修改密码,那么普通用户能否去修改别的用户的密码呢,我们来尝试一下。[user1@localhost~]$[user1@localhost~]$passwduser2passwd:Onlyrootcanspecifyausername.[user1@localhost~]$我们可以看到,是不可以修改的。如果按照理论情况,我们的passwd命令因为具有suid权限,那么是可以修改别的用户的密码的。这里并不是passwd命令不具有suid功能,它也并没有报权限拒绝。而是提示我们passwd这个命令只有root用户才可以在后面接上用户名,系统是从语法上面做了限制,而并不是suid,没有生效。这也是系统为了保证安全。我们在做一个试验来了解suid的作用先来看看系统中根的权限是什么[root@localhost~]#[root@localhost~]#ls-ld/drwxr-xr-x25rootroot4096Feb2800:30/[root@localhost~]#可以看到,根的权限是755,也就是说一个普通用户是没有办法往根里面写入数据的,普通用户是属于其他人吗。我们试试[root@localhost~]#[root@localhost~]#su–user1[user1@localhost~]$[user1@localhost~]$cd/[user1@localhost/]$mkdirtestmkdir:cannotcreatedirectory`test’:Permissiondenied[user1@localhost/]$可以看到,我们的普通用户user1对根没有写入的权限。现在我们给mkdir这条命令加一个suid的权限。看看会发生什么。[root@localhost~]#[root@localhost~]#whichmkdir/bin/mkdir[root@localhost~]#ll/bin/mkdir-rwxr-xr-x1rootroot29852Jul132009/bin/mkdir[root@localhost~]#[root@localhost~]#chmodu+s/bin/mkdir[root@localhost~]#[root@localhost~]#ll/bin/mkdir-rwsr-xr-x1rootroot29852Jul132009/bin/mkdir[root@localhost~]#可以看到,mkdir这个命令的权限已经多了一个s权限。现在我们在使用普通用户去根下面创建一个文件,[root@localhost~]#[root@localhost~]#su–user1[user1@localhost~]$[user1@localhost~]$cd/[user1@localhost/]$mkdirfile[user1@localhost/]$[user1@localhost/]$ll-ldfile/drwxrwxr-x2rootuser14096Feb2821:58file/[user1@localhost/]$现在我们就可以在根下面创建目录了,是因为我们普通用户在使用mkdir这条命令的时候临时变成了该命令的拥有人的权限,所有普通用户就可以在根下面创建目录,还可以看到,我们通过user1在根下面创建了一个文件,其拥有人也是root,这个也很好的说明了我们的确是使用root的身份去创建的file这个目录。还有一个问题,我们的mkdir这个命令因为多了一个s位,那么以前的x位权限到哪里去了呢。如果是S,代表以前是没有x权限,如果是s,就代表以前有x权限。[root@localhost~]#[root@localhost~]#ll/bin/mkdir-rwsr-xr-x1rootroot29852Jul132009/bin/mkdir[root@localhost~]#chmodu-x/bin/mkdir[root@localhost~]#ll/bin/mkdir-rwSr-xr-x1rootroot29852Jul132009/bin/mkdir[root@localhost~]#chmodu+x/bin/mkdir[root@localhost~]#ll/bin/mkdir-rwsr-xr-x1rootroot29852Jul132009/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~]#chmod777/redhat/[root@localhost~]#[root@localhost~]#ll-ld/redhat/drwxrwxrwx2rootroot4096Mar121:26/redhat/[root@localhost~]#现在我们新建了一个redhat目录,并且这个目录的权限是777,现在普通用户对这个目录也应该是rwx的权限,我们试试,[root@localhost~]#[root@localhost~]#su–user1[user1@localhost~]$[user1@localhost~]$cd/redhat/[user1@localhostredhat]$[user1@localhostredhat]$touch1.txt[user1@localhostredhat]$ls1.txt[user1@localhostredhat]$我们的确可以创建文件,那么这个文件的拥有人和拥有组会是谁呢,肯定是user1。现在我们就在这个目录上面添加一个sgid的权限。[root@localhost~]#[root@localhost~]#chmodg+s/redhat/[root@localhost~]#[root@localhost~]#su–user1[user1@localhost~]$[user1@localhost~]$cd/redhat/[user1@localhostredhat]$[user1@localhostredhat]$touch2.txt[user1@localhostredhat]$[user1@localhostredhat]$lltotal0-rw-rw-r–1user1user10Mar121:281.txt-rw-rw-r–1user1root0Mar121:302.txt[user1@localhostredhat]$当我给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/drwxrwxrwx3rootroot4096Mar121:48/redhat/[root@localhost~]#Redhat目录的权限是777,现在普通用户应该是可以向这个目录里面创建文件的,我们来试试。[root@localhost~]#[root@localhost~]#su–user1[user1@localhost~]$cd/redhat/[user1@localhostredhat]$touch1.txt[user1@localhostredhat]$ls1.txt[user1@localhostredhat]$我们使用user1在这个目录中创建了一个1.txt的文件,那么我们的user2能否去删除这个文件呢,肯定是可以的,因为我们的目录权限是777,所有我们的普通用户user2对这个目录是有w的权限的,有w权限就意味着可以在这个目录中创建和删除文件。我们试下,[root@localhost~]#[root@localhost~]#su–user2[user2@localhost~]$[user2@localhost~]$cd/redhat/[user2@localhostredhat]$[user2@localhostredhat]$ls1.txt[user2@localhostredhat]$rm-rf1.txt[user2@localhostredhat]$ls[user2@localhostredhat]$OK,是没有问题的,我们的确可以删除由user1创建的文件1.txt。现在我们给redhat目录添加一个sticky,看看会发生什么。[root@localhost~]#[root@localhost~]#chmodo+t/redhat/[root@localhost~]#ls-ld/redhat/drwxrwxrwt2rootroot4096Mar123: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@localhostredhat]$[user1@localhostredhat]$touch2.txt[user1@localhostredhat]$[user1@localhostredhat]$ls2.txt[user1@localhostredhat]$su–user2Password:[user2@localhost~]$cd/redhat/[user2@localhostredhat]$ls2.txt[user2@localhostredhat]$rm-rf2.txtrm:cannotremove`2.txt’:Operationnotpermitted[user2@localhostredhat]$可以看到,现在我们使用user1创建的文件,user2是不可以删除的。这个就是sticky权限的作用,当一个redhat目录添加了一个sticky权限后,那么user1在redhat目录里面创建的2.txt文件,就只有root用户和user1才可以删除该文件。在我们系统中有个目录就是运用了sticky权限。[root@localhost~]#[root@localhost~]#ls-ld/tmp/drwxrwxrwt15rootroot4096Feb2800:28/tmp/[root@localhost~]#我们的/tmp目录默认就有了sticky权限。我们的特殊权限也可以用数字来表示。Suid4Sgid2Sticky1总结:Suid权限用在命令上面,而且只能用在用户上面。Sgid权限用在命令和目录上面,而且只能用在组上面。Sticky权限用在目录上面,而且只能用在其他人上面。关于高级权限的问题就这么多,在133里面还会有关于用户,组,权限的讨论。

发表评论:

最近发表
网站分类
标签列表