第九讲——超人管理员、用户以及权限 本文共有10138个字,关键词: 说起超人,我就想起小时候加班几点都想看的动画片,可惜啊,老爹比较凶,按时关电视,周末还不给看…… 超人那是相当强大的,系统管理员root也是这样,这是一个凌驾于所有用户至上的用户,能干很多普通用户干不了的事情,比如删除根目录下的所有文件,要是真这样干了,那就悲剧了,啥都没有了,所以啊,没事儿的时候还是不要穿着超人的外衣到处晃,免得犯了错有没有超人的能力挽救…… root用户是系统默认的管理员,既然是超人当然就会有很多不一样的地方。比如命令的执行上,举个简单的例子: 每一个用户在/home下都有一个家目录,并且以用户名命名,root就比较厉害,不屑于在/home下屈居,非得单独搞一个/root,也就是根目录下有一个root的目录。除了这些最容易体现不同之处是,root可以随便去普通用户家里,甚至想干啥都可以,写写文件,改改数据,删除点什么之类的,普通用户一般来说那是连门都进不去的,为啥?因为有一种机制给普通用户之间提供了防护,这种机制就是权限。 权限这玩意儿很是古怪啊,记得上一次的文件类型后面跟着的九个短横线rwx一大串,是的,这个就是文件的权限。文件的权限是如何实现的呢?且听本大流氓叽叽歪歪一番。 首先我们文件的权限是三位一组,也就是说一个文件有三组权限,每一组具有的权限按位(顺序)是读(r)、写(w)、执行(x),所以会看到一大串摸不着头脑的字符串。 我们说了,每一个文件有三组权限,那么是哪三组?还是按照顺序,三个一组,第一组的权限是文件创建者的,称为属主,第二组的权限是文件创建者所在的组(就像小组),第三组就是其他人了。 用户组(属组):其实就是一个容器,用来关联一些权限,只要在用户组里的人都具有属于用户组的文件的权限,用户组是一个逻辑概念,并不能登录计算机,仅仅是用来指派权限。 那么什么是权限?权限就是定义资源或服务的访问能力,属主就是指定某一个人具有权限,属组是指定某一类人具有权限。对于计算机来讲,用户只是一个标识符,是用来获取资源或服务的凭证,但是对外部来讲,用户是我们人。看似是我们在操作计算机,实际上只是代为完成。另外进程也是有属主和属组的,因为它是一个程序运行的副本,所以进程是用户操作计算机的代理,进程能够访问的文件是取决于这个进程自己的权限和它所访问资源或文件的权限。这个过程的判断是由操作系统安全管理属性自动完成的。 我们来详细说一说系统权限,每一类用户都有三种权限(读、写、执行),这是对于文件来说的,对于目录呢? 我们说了,linux中一切皆文件,也就是说,目录也是文件,但是这些权限表示的意义是不太一样的,目录是路径的映射文件,其本身并不存储内容,和设备文件一样只具有元数据,元数据就是文件本身的属性,我们就来详细说一说。 对于文件: r:可读,这就意味着我们可以使用相关命令查看内容等等。 w:可写,意味着此文件可以被编辑,也可以被删除。 x:可执行,也就是说这个文件是可以被执行的,就像win下的.exe。 对于目录: r:可以对此目录使用ls命令进行查看,列出其中的文件 w:可以再目录中创建文件,也可以删除自己创建的文件,但是我们要搞清楚,用户是不能对一个没有权限的文件操作的,这个有点绕,但是必须得搞清楚。 x:目录能被执行?然并卵,文件的x权限代表着我们可以cd到该目录下,一般来说文件的r、x权限是成对出现的,如果对于一个目录能够ls列出文件但是不能cd到该目录下,或者说能cd到该目录下但是不能ls列出文件,这得是多么操蛋的事情。 rwx三位一体,按位占用,没有权限则用短横线占位。 对于一个新创建的文件来说,默认是没有执行权限的,为什么会有一个默认权限?这个就是umask在捣鬼 要说umask,我们还得捋一捋权限的数字表示 权限表示 八进制 二进制 –x 1 001 -w- 2 010 -wx 3 011 r– 4 100 r-x 5 101 rw- 6 110 rwx 7 111 我们通常把三位放到一起来看,用八进制表示其权限,另外还有一种较为简洁的记法,单独的r权限为4.单独的w权限为2,单独的x权限为1,加起来刚好为7,相互组合起来也与之对应。个人觉得很好记忆。 好了,该说说主角umsk了,这玩意儿设定的就是我们用户创建文件的权限我们使用umask命令可以查看当前用户的umask设定,一般用户为0002,我们只看后三位002,002是什么鬼,只能写? 我们要知道umask设定的是文件的默认权限,但是我们说了系统默认是不给新创建的文件执行权限的,但是目录怎么办?目录没有执行权限就无法cd,不人道。所以umask(又叫遮罩码)的设计就是 1、如果用户创建的是文件,那么就用666-umask的值作为文件的权限 2、如果用户创建的是一个目录,那么就用777-umask的值作为目录的权限 如果用户创建的是文件,那么666-002=664 664是什么?即 w r – w r – r – -为了显示清楚我加了空格实际上是没有的。 如果用户创建的是目录,那么777-002=775 775展开就是rwxrwxr-x,就这么简单。 如果我非得让新创建的文件具有执行权限,在办?使用umask 111 更改默认权限试试?结果并不是我们想象的的那样美好,是不是?新建的文件中并没有执行权限……都变成了读写权限,都多了1,怎么回事儿?这个就是linux的强大之处了,linux会默认将具有执行权限的文件权限自动+1,这是linux的一种安全机制,遵守即可,这样的话那岂不是不能运行自己写的程序脚本了? 非也非也,我们可以使用chmod命令来实现文件权限的修改。 chmod可以修改三类用户的权限,也可以修改某类用户的权限,还可以修改某类用户的某个权限。 chmod 755 filename 修改一个文件的三类用户权限 chmod u=rwx filename 修改一个用户的权限 u其实是user的缩写 chmod g=rx filename 修改一个用户组的权限,group的缩写 chmod o=r fileme 修改其他人的权限,other的缩写 chmod u+x filename 给用户执行权限 chmod o-x filename 取消其他人的执行权限 另外我们可能会需要修改一个文件夹里所有的文件权限,包括其子目录下的文件等等,我们总不能一个一个的去改吧? -R 递归修改(–reference)可以实现目录下所有文件权限的修改,包括其子目录下的所有文件。 有了权限的划分,我们的小秘密就不怕别人知道了,咳咳,超人不算人……因为其他人在不属于文件创建者所在组的话,只具有其他人的身份,而其他人的访问权限我们是可以更改的。怎么更改?嗯,我们现在还是披着超人外衣的用户,所以为了稳定操作,我们还是整一个普通用户,我们只需要两步就可以创建一个新用户了。是的,使用命令进行操作。 useradd username useradd就是我们添加用户的命令,至于名字嘛,高兴就好,取个什么canglaoshi也是可以的,useradd命令不加任何参数的话是可以按照默认的规则添加用户的,但是像我这种比较贱的非要自己定义一下怎么办? 这个就需要使用到命令的选项了,useradd具有如下选项: -u 指定用户的UID,UID是啥呢?这玩意儿就和咱的身份证差不多,计算机处理数字的能力比处理字符的能力强太 多,所以系统识别用户是靠UID来识别的,以提高效率。普通用户UID在500-65535之间,,只要不重复,想咋用咋用。但是为了方便管理,如果不指定,系统会按照已经给过的最大UID为基准,以递增的方式依次赋给用户。 -g 指定基本组,前提是这个组事先是存在的,否则就会报错。 -G 指定额外组,我们可以加入多个小组,小组之间用逗号隔开。 -c 指定用户的注释信息,什么家在哪里、电话号码之类的,不过很少会用到。 -s 指定用户shell的绝对路径,一般来说只有系统认为安全的shell才可以被指定,那么系统觉得安全的shell放在哪里?一 般来说系统觉得安全的shell放在/etc/shells目录下,这里边就有之前说的什么cshell、tcshell等等。 -m 强制为用户创建家目录,家目录里保存了用户的环境配置信息,所以每一个用户才可以自定义登陆后的环境。 -m通常和-k一起使用,-k就是从/etc/skel下拷贝环境配置模板到用户家目录下,并将属主和属组更改为当前创 建的用户,/etc/skel中存放了shell的环境配置文件,这个在更改权限的时候再讲,先存疑。 -M 不创建家目录,是的,连家都没有的光杆司令,所以也就没有相应的shell环境变量配置文件,也就没有办法实 现环境的配置。 -r 添加系统用户,系统用户是什么鬼,简单地说,系统用户就是执行后台服务的特殊用户,系统用户一般没有登 录系统的权限,不是没有,是压根儿就没想让系统用户能登录操作系统。特殊用户UID从1-499 好多……就连我都有深深的罪恶感了,难道添加个用户这么麻烦?非也,就像之前说的,复杂的命令都是有配置文件的,useradd的配置文件在/etc/default/useradd,在这里面对用户的诸多选项进行了默认设置,所以没有特殊需要一般使用useradd直接添加用户就好了。 俗话说创造难毁灭易,在这里也是适用的,咱辛辛苦苦添加的用户,可以通过一个简单的命令删除的连毛都不剩。 userdel username ,是的,就这么简单,仅有一个-r的选项,供我们删除家目录,这个是不是有点狠,有点把人家干掉还把房子干掉的感觉……罪过啊罪过。 如果我们一激动不小心添加用户的时候把名字搞错了,咋整,改名这件事是可以办到的使用usermod命令就可以办到。 usermod [option] username 这个命令的使用有一个要求,你得先登录这个用户才可以,我们使用root命令先切换过去:su – username -l 更改用户名 -e 定义用户的过期时间,格式为年月日 -f 非活动时间(禁止但没有过期的时间) -L 锁定用户账号 -U 解锁用户 -G 添加额外组(附加组),会覆盖之前的操作覆盖,需要同-a选项一起使用,追加附加组。 -d 指定新的家目录,同时应当跟上-m参数,改变家目录的同时将此前家目录中的文件移动至新的家目录中。如果 没有这么操作,就会发生用户无法访问之前的家目录的情况。 讲了半天都没有涉及到密码操作,额……因为我们之前没有设置新用户的登录密码,所以系统是不能登录的,但是可以再已经登录的shell中进行切换 切换的命令就是su ,这个su命令比较好玩,它有两种情况一种称为完全切换,就是su – username,中间有个短横线,而另一种称为不完全切换,就是不加短横线的情况,这个从家目录的位置可以看出来,完全切换是将用户的家目录一同切换,而不完全切换则没有切换到用户的家目录下,也就是说没有被切换用户的shell环境。这个操作一下就能够体会得到。 设置密码的命令是passwd,password的缩写,其实我觉得这缩写不够简洁,缩就缩嘛,还非得只缩减俩字符……好歹也是缩减嘛…… passwd的命令还是相当简单的格式如下 passwd 回车就可以更改当前用户的密码,root用户比较厉害,可以指定任何一个用户,然后修改其密码,所以说超人不是人啊…… 有了密码我们就可以正常的登录操作了,linux操作系统默认是不允许空密码的用户进行登录的,所我们只能够su过去。 passwd有一个选项比较厉害:–stdin,这个选项支持从标准输入接收,突然觉得很乱,是不是?!什么叫标准输入?!这个在脚本的时候会讲,什么!还有脚本?!嗯,是的,不然怎么叫成神路,这是一条布满荆棘的羊肠小道,很多人被拦在了路途中……但就算是这样也要暴力通过,哪怕是九死一生,额……有点夸张,死是肯定不会的。 现在我们已经具有一个用户账户了,而且也可以随意的修改属性。 那么我们能不能单独建一个组?答案是可以的,我们可以使用groupadd添加一个用户组,同样的可以指定其GID等等 说一说组管理命令 groupadd 组名 -g 指定GID -r 添加一个系统组,有点像useradd中的-r 哦 groupdel 组名 作用是删除用户组 groupmod 修改组属性,同样的需要是用户组的成员才可以 -g 改变GID -n 改变组名 gpasswd 添加组密码,这个就神奇了,不能登陆还有密码?事实上组密码只是用于验证一个非组内用户添加该组为基本组或者额外组的。 如果我们不属于一个组的组员,但是我需要临时访问这个组。我们可以使用newgrp 登录为一个新的用户组,这时候组密码就会发生作用了,newgrp具有登录属性,我们可以按需使用exit退出。 嗯……我发现我逼逼叨叨的有点多,好了此次暂时结束,下一讲将会涉及一些关于权限和系统目录。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2016-12-09 评论 1677 次浏览