热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Ubuntu下的用户和权限(二)

五、chown、chgrp命令从名字就可以推测他们是干嘛的,但是这两个命令需要root权限。chown命令的格式为:chownuser:groupfile

五、chown、chgrp命令

       从名字就可以推测他们是干嘛的,但是这两个命令需要root权限。

       chown命令的格式为:chown user:group file  中间的user : group三项可以根据需要省略某部分。比如现在有个文件file属于用户bob,bob的权限是rwx,而bob属于组group1,group1的权限是r。有另外一个用户jack属于group2。

       chown jack file  

       这就把file的woner从bob改成了jack,但是file所属的群组仍然是group1。其实一开始我也觉得很混乱,这特么什么情况?权限要怎分配?但是使用“ls -l”命令确实显示的是owner为jack,group为group1。查了一些资料后,我觉得可以这么理解:文件初创的时候,创建者拥有的权限由umask决定;本例中bob是创建者,但是当owner由bob改成jack的时候,jack直接继承bob的所有权限,无论bob后来对file的权限进行了怎样的修改,这一点我亲自敲命令验证过了。

       而至于file的群组仍然是group1,意思是说,group1里面的所有成员包括原来的bob,仍然具有当初对file的权限,在本例中就是r权限。需要注意的是,此时jack并不属于group1,而仍属于group2。chown只是改变文件本身的从属,但是不改变用户与群组的从属关系,如本例中chown把file的owner改成了jack,但是并没有同时把jack拉入group1。

        chown jack:group2 file  

        这样除了能达成上面那个命令的改变owner的效果之外,还把file的所属群组改成了group2。但是根据我们前面的分析,这里的group2并非是绑定的,即我们也可以随便改成group3。总结:user和group可以不是从属关系。然后权限的分配是:jack继承bob的所有权限,group2里的成员继承group1其他成员(除了bob以外的人)对file的所有权限。

         chown jack: file   

         显然这里省略了groupname,那么根据惯例会有一个默认的上场,是哪个呢?根据资料显示,是login group of user jack,关于这个群组,此处省略一千字,后面会分析,我们可以粗浅的认为是jack的目前绑定的那个群组。

     chown :group2 file   

         这个就更简单了,owner不变,但是所属群组改成了group2,意思是改组的成员继承了group1其他成员的权限。


        看到这里,我发现chown已经把chgrp的活儿都干了,其实chown以前的版本是不允许改变群组的,这是chgrp存在的意义。但是现在chown升级了,chgrp就变得可有可无。它的语法跟chown是一样的,只是不能改变user而已。如,chgrp root file,这里的root会被默认为root群组而非root用户。


六、增删用户相关指令

        先说一下几个相关的设定文档,最重要的两个档案是/etc/passwd和/etc/shadow,前一个主要涉及账户名称和对应id,后者主要涉及密码。先分别查看一下他们长什么样。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

这两行是截取的passwd的内容,以冒号作为分隔符,分成了七段:第一段是账户名称,说白了,这是给人类看的,方便记忆,而电脑却是用数字id作为索引的,passwd的作用就是把二者对应起来,像一个函数;第二段的x表示加密的密码,转移到shadow中; 第三段和第四段分别是uid和gid,即用户id和群组id;第五段是注释或描述,用来说明这个账户是干什么的;第六段是该账户的家目录所在地;第七段就是用户使用的shell程序,默认为/bin/bash,也可以设定成zsh等其他工具。

root:!:16254:0:99999:7:::
daemon:*:15994:0:99999:7:::

这是截取的shadow的内容,每行被冒号分成九段。第一段就是用户名,必须先在passwd中存在;第二段是经加密过的用特殊符号表示出来的密码;第三段表示最近那次更改密码的日期,但它的表示方法却是从1970 年 1 月 1 日起至今的天数;第四段是mindays,即保持密码稳定不变的最小天数,今当超过此限才能修改密码,故此值要不小于0;第五段为maxdays,即保持密码有效的最大天数,超过此限必须更改密码,否则账户会暂时失效,当然可以设一个很大的数字,表示密码不需要改动;第六段是warn,即密码有效期到期之前多少天向用户发出警告;第七段是inactive,指的是密码到期后还可以保持这个账户信息的天数,超过此限将会封锁账户;第八段是expire,即账号失效日期,用从1970 年 1 月 1 日算起的天数表示,超出这个天数该账户就会失效,一般用于收费系统中;第九段是reserve,即保留字段,是待开发的字段,目前没有什么用。

        需要注意一下第二个字段,若密码的第一个字符是叹号或星号,则表示暂时这个账号无法登陆或不用登陆linux,一般刚加入的用户这里都是叹号,而系统服务账号则一般是星号。我们看到我的root账户对应的密码字段竟然也是叹号,这其实正好印证了前面关于ubuntu系统root账户奇葩设定的说法。


        下面说说useradd命令,基本用法很简单,就是简单的 useradd name,然后就会发现在/home目录下出现了一个以name命名的文件夹,这表示这个用户的家目录等相关信息资料已然建立了,但是暂时还不能登陆,需要用passwd命令设定它的密码之后才可以登陆到linux系统。

         除了这种傻瓜式的操作外,useradd还提供了一系列参数以便精细化控制用户账号的建立过程,这些参数就对应了/etc/passwd文档每行被冒号分隔的七个字段。我们分别介绍。

         -u   后面跟一个uid,这个表示uid的数字还是不能乱写的,有一些讲究:首先是范围问题,有效的uid号码是从0到65535,在ubuntu中应该是到65533,因为我查看/etc/passwd时发现这么一行——nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin,我猜这最后一个已经被系统预设成了65534,所以不能超过这个数了。另外,在ubuntu中,前一千位即0~999是留给系统用户的,普通用户只能从1000开始,如装机时建立的账户信息就是这样:m:x:1000:1000:m,,,:/home/m:/bin/bash。最后就是使用的uid必须是没有被其他已经存在的账户占用的。如果不加这个参数,默认就是直接从已存在的uid中找到最大的那个加1就好。

         -g   后面的参数是已经存在的群组名或其id,ubuntu默认为新建一个与username同名的群组

         -c   后面跟的就是注释说明内容

         -d  指定家目录所在,ubuntu默认为在/home目录下

         -s   指定所使用的shell,ubuntu默认为/bin/bash

除了这些基本的参数之外,还有一些比较高级的,感兴趣的可以自己man useradd,我就不多说了。


          usermod命令

          这个命令是用来修改账户相关信息的,一般来讲,一旦某个用户建立,尽量不要再去修改用户名和用户id,但是其他的却是可以改的。改的方式有两种,一是直接修改两个设定档的相应的字段,二就是使用usermod命令。该命令的基本参数跟useradd一样,因为该改改去无非就是那几个字段,不过除此之外还有一些高级的。

          -l  修改用户名,如usermod -l bob jack   这就把jack这个用户的名字改成了bob

          -u/g/c/d/s,看名字就知道修改哪个字段了,基本上除了不能改密码,usermod把用户账户能改的信息全改了。

          -L 暂时将使用者的密码冻结,让他无法登入。其实仅改 /etc/shadow 的密码栏。

          -U   -L的逆操作,就是解冻账号。

          -G   后跟已存在的群组名或群组id,表示增加该用户的群组。我们知道一个用户可以属于多个群组的。

          -e    后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据——失效日期。

          -m   新建一个家目录或覆盖原来的家目录,usermod的-d参数仅仅是修改了passwd的内容,并没有实际建立家目录。

      

          userdel命令,即删除某个用户账号,加上-r参数则表示连家目录一起删除,如 userdel -r bob 。有时候会显示“用户xx已经登陆”,即无法删除,这时可以加上-f参数,然后重启即可。



推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 本文讨论了在Linux系统中,使用chown命令将django项目目录下的static目录的拥有者从root改为eureka的问题。作者尝试了多种命令,包括chown和sudo chown等,但都没有成功修改拥有者。文章提供了相关目录的权限信息,并补充了项目所在磁盘和操作系统的信息。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍了在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一,尤其是在大规模系统中,数据库集群已经成为必备的配置之一。文章详细介绍了主从数据库架构的好处和实验环境的搭建方法,包括主数据库的配置文件修改和设置需要同步的数据库等内容。MySQL的主从复制功能在国内外大型网站架构体系中被广泛采用,本文总结了作者在实际的Web项目中的实践经验。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
author-avatar
www
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有