linux 查看当前用户id、whoami用户列表、用户组、用户权限/etc/passwd、/etc/group、/etc/shadow以及切换用户身份、su、sudo、/etc/sudoers

一、查看当前用户之id、whoami

命 令:id

功能说明:查看显示目前登陆账户的uid和gid及所属分组及用户名

语  法:id [-gGnru][--help][--version][用户名称]

补充说明:id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。

这个命令在溢出时经常用到,查看是不是溢出root成功,执行一下id命令,显示uid=0,则成功了。

参  数:

 -g或--group  显示用户所属群组的ID。

 -G或--groups  显示用户所属附加群组的ID。

 -n或--name  显示用户,所属群组或附加群组的名称。

 -r或--real  显示实际ID。

 -u或--user  显示用户ID。

 -help  显示帮助。

 -version  显示版本信息

执行结果:

[root]#id

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

[root]#su  linuxso

[]$id

uid=505(linuxso) gid=505(linuxso) groups=504(test),505(linuxso)

[root]-> whoami

root

[root]-> id root

uid=0(root) gid=0(root) groups=0(root)

二、查看用户列表、用户组之/etc/passwd、/etc/group、/etc/shadow

以下参考:http://blog.chinaunix.net/uid-24837409-id-3174035.html

在Linux中,用户(User)和用户组(Group)的配置文件,是作为系统管理员的你最应该了解和掌握的系统基础文件之一。从另一方面来说,了解这些文件也是系统安全管理的重要组成部份,作为一个合格的系统管理员一定要对用户和用户组配置文件了解透彻才行;

   【1】、用户(User)相关:

  谈到用户,就不得不谈用户管理、用户配置文件、以及用户查询和管理的控制工具;用户管理主要通过修改用户配置文件完成,用户管理控制工具最终目的也是为了修改用户配置文件。

  那么,什么是用户查询和管理控制工具呢?用户查询和控制工具是查询、添加、修改和删除用户等系统管理工具,比如查询用户的id和finger命

令,添加用户的useradd 或adduser 、userdel 用户的删除 、设置密码的passwd命令 、修改用户usermod

等等;我们需要知道的是通过用户查询和控制工具所进行的动作的最终目的也是修改用户配置文件;所以我们进行用户管理的时候,直接修改用户配置文件一样可以

达到用户管理的目的。

  了解了上面所说的,我们便能实实在在的感觉到用户(User)配置文件的重要性:其实用户和用户组在系统管理中是不可分割的,但为了说明问题,

我们还是得把用户(User)的配置文件单列出来解说,其中包括/etc/passwd 和/etc/shadow

文件;在这之中,你还能了解UID的重要性;

  通过本标题,您可以了解或掌握的内容有:了解/etc/passwd和/etc/shadow;什么UID ;

  与用户相关的系统配置文件主要有/etc/passwd

和/etc/shadow,其中/etc/shadow是用户资讯的加密文件,比如用户的密码口令的加密保存等;/etc/passwd

和/etc/shadow 文件是互补的;我们可以通过对比两个文件来差看他们的区别;

  1、关于/etc/passwd 和 UID;

  /etc/passwd 是系统识别用户的一个文件,做个不恰当的比喻,/etc/passwd

是一个花名册,系统所有的用户都在这里有登录记载;当我们以beinan 这个账号登录时,系统首先会查阅 /etc/passwd

文件,看是否有beinan 这个账号,然后确定beinan的UID,通过UID 来确认用户和身份,如果存在则读取/etc/shadow

影子文件中所对应的beinan的密码;如果密码核实无误则登录系统,读取用户的配置文件;

  1)/etc/passwd 的内容理解:

  在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割,比如下面是我的系统中的/etc/passwd 的两行:

   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash

   linuxsir:x:501:502::/home/linuxsir:/bin/bash

  第一字段:用户名(也被称为登录名);在上面的例子中,我们看到这两个用户的用户名分别是 beinan 和linuxsir;

  第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;

  第三字段:UID ;请参看本文的UID的解说;

  第四字段:GID;请参看本文的GID的解说;

  第五字段:用户名全称,这是可选的,可以不设置,在beinan这个用户中,用户的全称是beinan sun ;而linuxsir 这个用户是没有设置全称;

  第六字段:用户的家目录所在位置;beinan 这个用户是/home/beinan ,而linuxsir 这个用户是/home/linuxsir ;

  第七字段:用户所用SHELL 的类型,beinan和linuxsir 都用的是 bash ;所以设置为/bin/bash ;

  2)关于UID 的理解:

  UID 是用户的ID 值,在系统中每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID

,系统管理员应该确保这一规则。系统用户的UID的值从0开始,是一个正整数,至于最大值可以在/etc/login.defs

可以查到,一般Linux发行版约定为60000; 在Linux 中,root的UID是0,拥有系统最高权限;

  UID 在系统唯一特性,做为系统管理员应该确保这一标准,UID

的唯一性关系到系统的安全,应该值得我们关注!比如我在/etc/passwd 中把beinan的UID

改为0后,你设想会发生什么呢?beinan这个用户会被确认为root用户。beinan这个帐号可以进行所有root的操作;

  UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名,切记;把几个用户共用一个UID

是危险的,比如我们上面所谈到的,把普通用户的UID 改为0,和root共用一个UID

,这事实上就造成了系统管理权限的混乱。如果我们想用root权限,可以通过su或sudo来实现;切不可随意让一个用户和root分享同一个UID ;

  UID是唯一性,只是要求管理员所做的,其实我们修改/etc/passwd 文件,可以修改任何用户的UID的值为0,

  一般情况下,每个Linux的发行版都会预留一定的UID和GID给系统虚拟用户占用,虚拟用户一般是系统安装时就有的,是为了完成系统任务所必须的用户,但虚拟用户是不能登录系统的,比如ftp、nobody、adm、rpm、bin、shutdown等;

  在Fedora 系统会把前499 个UID和GID 预留出来,我们添加新用户时的UID

从500开始的,GID也是从500开始,至于其它系统,有的系统可能会把前999UID和GID预留出来;以各个系统中/etc/login.defs

中的 UID_MIN 的最小值为准; Fedora 系统 login.defs的UID_MIN是500,而UID_MAX

值为60000,也就是说我们通过adduser默认添加的用户的UID的值是500到60000之间;而Slackware

通过adduser不指定UID来添加用户,默认UID 是从1000开始;

  2、关于/etc/shadow ;

  1)/etc/shadow 概说;

  /etc/shadow文件是/etc/passwd 的影子文件,这个文件并不由/etc/passwd

而产生的,这两个文件是应该是对应互补的;shadow内容包括用户及被加密的密码以及其它/etc/passwd

不能包括的信息,比如用户的有效期限等;这个文件只有root权限可以读取和操作,权限如下:

  -r——– 1 root root 1.5K 10月 16 09:49 /etc/shadow

  /etc/shadow 的权限不能随便改为其它用户可读,这样做是危险的。如果您发现这个文件的权限变成了其它用户组或用户可读了,要进行检查,以防系统安全问题的发生;

  如果我们以普通用户查看这个文件时,应该什么也查看不到,提示是权限不够:

  [[email protected] ~]$ more /etc/shadow

   /etc/shadow: 权限不够

  2)/etc/shadow 的内容分析;

  /etc/shadow 文件的内容包括9个段位,每个段位之间用:号分割;我们以如下的例子说明;

  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::

   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:

  第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;

  第二字段:密码(已被加密),如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;

  第三字段:上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;

  第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;

  第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;

  第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;

  第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;

  第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;

  第九字段:保留字段,目前为空,以备将来Linux发展之用;

  如果更为详细的,请用 man shadow来查看帮助,您会得到更为详尽的资料;

  我们再根据实例分析:

  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::

   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:

  第一字段:用户名(也被称之为登录名),在例子中有峡谷两条记录,也表示有两个用户beinan和linuxsir

  第二字段:被加密的密码,如果有的用户在此字段中是x,表示这个用户不能登录系统,也可以看作是虚拟用户,不过虚拟用户和真实用户都是相对的,系统管理员随时可以对任何用户操作;

  第三字段:表示上次更改口令的天数(距1970年01月01日),上面的例子能说明beinan和linuxsir这两个用户,是在同一天更改了用户密码,当然是通过passwd 命令来更改的,更改密码的时间距1970年01月01日的天数为13072;

  第四字段:禁用两次口令修改之间最小天数的功能,设置为0

  第五字段:两次修改口令间隔最多的天数,在例子中都是99999天;这个值如果在添加用户时没有指定的话,是通过/etc/login.defs来获取默认值,PASS_MAX_DAYS 99999;您可以查看/etc/login.defs来查看,具体的值;

  第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc

/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;在例子中的值是7 ,表示在用户口令将过期的前7天警告用户更改期口令;

  第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;在例子中,此字段两个用户的都是空的,表示禁用这个功能;

  第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;在例子中,

我们看到beinan这个用户在此字段是空的,表示此用户永久可用;而linuxsir这个用户表示在距1970年01月01日后13108天后过期,算

起来也就是2005年11月21号过期;哈哈,如果有兴趣的的弟兄,自己来算算,大体还是差不多的;);

  第九字段:保留字段,目前为空,以备将来Linux发展之用;

【2】、关于用户组;

  具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件;在本标题下,您还能了解到什么是GID ;

  1、/etc/group 解说;

  /etc/group

文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用

户组的用户之间具有相似的特征。比如我们把某一用户加入到root用户组,那么这个用户就可以浏览root用户家目录的文件,如果root用户把某个文件

的读写执行权限开放,root用户组的所有用户都可以修改此文件,如果是可执行的文件(比如脚本),root用户组的用户也是可以执行的;

  用户组的特性在系统管理中为系统管理员提供了极大的方便,但安全性也是值得关注的,如某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户组,或者是把用户下的文件的权限设置为完全私有;另外root用户组一般不要轻易把普通用户加入进去,

  2、/etc/group 内容具体分析

  /etc/group 的内容包括用户组(Group)、用户组口令、GID及该用户组所包含的用户(User),每个用户组一条记录;格式如下:

  group_name:passwd:GID:user_list

  在/etc/group 中的每条记录分四个字段:

  第一字段:用户组名称;

  第二字段:用户组密码;

  第三字段:GID

  第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;

  我们举个例子:

  root:x:0:root,linuxsir 注:用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户(可以通过/etc/passwd查看);;

  beinan:x:500:linuxsir 注:用户组beinan,x是密码段,表示没有设置密码,GID是500,beinan用户组下包括linuxsir用户及GID为500的用户(可以通过/etc/passwd查看);

  linuxsir:x:502:linuxsir 注:用户组linuxsir,x是密码段,表示没有设置密码,GID是502,linuxsir用户组下包用户linuxsir及GID为502的用户(可以通过/etc/passwd查看);

  helloer:x:503: 注:用户组helloer,x是密码段,表示没有设置密码,GID是503,helloer用户组下包括GID为503的用户,可以通过/etc/passwd查看;

  而/etc/passwd 对应的相关的记录为:

  root:x:0:0:root:/root:/bin/bash

   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash

   linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash

   helloer:x:502:503::/home/helloer:/bin/bash

  由此可以看出helloer用户组包括 helloer用户;所以我们查看一个用户组所拥有的用户,可以通过对比/etc/passwd和/etc/group来得到;

  2、关于GID ;

  GID和UID类似,是一个正整数或0,GID从0开始,GID为0的组让系统付予给root用户组;系统会预留一些较靠前的GID给系统虚拟

用户(也被称为伪装用户)之用;每个系统预留的GID都有所不同,比如Fedora

预留了500个,我们添加新用户组时,用户组是从500开始的;而Slackware

是把前100个GID预留,新添加的用户组是从100开始;查看系统添加用户组默认的GID范围应该查看 /etc/login.defs 中的

GID_MIN 和GID_MAX 值;

  我们可以对照/etc/passwd和/etc/group 两个文件;我们会发现有默认用户组之说;我们在 /etc/passwd

中的每条用户记录会发现用户默认的GID

;在/etc/group中,我们也会发现每个用户组下有多少个用户;在创建目录和文件时,会使用默认的用户组;我们还是举个例子;

  比如我把linuxsir 加为root用户组,在/etc/passwd 和/etc/group 中的记录相关记录为:

  linuxsir用户在 /etc/passwd 中的记录;我们在这条记录中看到,linuxsir用户默认的GID为502;而502的GID 在/etc/group中查到是linuxsir用户组;

  linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash

  linuxsir 用户在 /etc/group 中的相关记录;在这里,我们看到linuxsir用户组的GID 为502,而linuxsir 用户归属为root、beinan用户组;

  root:x:0:root,linuxsir

   beinan:x:500:linuxsir

   linuxsir:x:502:linuxsir

  我们用linuxsir 来创建一个目录,以观察linuxsir用户创建目录的权限归属;

  [[email protected] ~]$ mkdir testdir

   [[email protected] ~]$ ls -lh

  总用量 4.0K

  drwxrwxr-x 2 linuxsir linuxsir 4.0K 10月 17 11:42 testdir

  通过我们用linuxsir 来创建目录时发现,testdir的权限归属仍然是linuxsir用户和linuxsir用户组的;而没有归属root和beinan用户组,明白了吧;

  但值得注意的是,判断用户的访问权限时,默认的GID 并不是最重要的,只要一个目录让同组用户可以访问的权限,那么同组用户就可以拥有该目录的访问权,在这时用户的默认GID 并不是最重要的;

  3、/etc/gshadow 解说;

  /etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。/etc

/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极

有必要的。比如我们不想让一些非用户组成员永久拥有用户组的权限和特性,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用

到用户组密码;

  /etc/gshadow 格式如下,每个用户组独占一行;

  groupname:password:admin,admin,…:member,member,…

  第一字段:用户组

  第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;

  第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;

  第四字段:组成员,如果有多个成员,用,号分割;

  举例:

  beinan:!::linuxsir

   linuxsir:oUS/q7NH75RhQ::linuxsir

  第一字段:这个例子中,有两个用户组beinan用linuxsir

  第二字段:用户组的密码,beinan用户组无密码;linuxsir用户组有已经,已经加密;

  第三字段:用户组管理者,两者都为空;

  第四字段:beinan用户组所拥有的成员是linuxsir ,然后还要对照一下/etc/group和/etc/passwd

查看是否还有其它用户,一般默认添加的用户,有时同时也会创建用户组和用户名同名称; linuxsir 用户组有成员linuxisir ;

  如何设置用户组的密码? 我们可以通过 gpasswd 来实现;不过一般的情况下,没有必要设置用户组的密码;不过自己实践一下也有必要;下面是一个为linuxsir用户组设置密码的例子;

  gpasswd 的用法: gpasswd 用户组

  

[[email protected]][email protected][/email]

~]# gpasswd linuxsir

  正在修改 linuxsir 组的密码

  新密码:

  请重新输入新密码:

  用户组之间的切换,应该用 newgrp ,这个有点象用户之间切换的su ;我先举个例子:

  [[email protected] ~]$ newgrp linuxsir

  密码:

  [[email protected] ~]$ mkdir lingroup

   [[email protected] ~]$ ls -ld lingroup/

  drwxr-xr-x 2 beinan linuxsir 4096 10月 18 15:56 lingroup/

  [[email protected] ~]$ newgrp beinan

   [[email protected] ~]$ mkdir beinangrouptest

   [[email protected] ~]$ ls -ld beinangrouptest

  drwxrwxr-x 2 beinan beinan 4096 10月 18 15:56 beinangrouptest

  说明:我是以beinan用户组切换到linuxsir用户组,并且建了一个目录,然后再切换回beinan用户组,又建了一个目录,请观察两个目录属用户组的不同;还是自己体会吧;

【3】、通过用户和用户组配置文件来查询或管理用户;

  1、用户和用户组查询的方法;

  1)通过查看用户(User)和用户组的配置文件的办法来查看用户信息

  我们已经用户(User)和用户组(Group)的配置文件已经有个基本的了解,通过查看用户(User)和用户组的配置文件,我们就能做到对系统用户的了解,当然您也可以通过id 或finger 等工具来进行用户的查询等任务。

  对于文件的查看,我们可以通过 more 或cat 来查看,比如 more /etc/passwd 或cat /etc/passwd ;其它工具也一样,能对文本查看就行,比如less 也好

  比如我们可以通过more 、cat 、less命令对/etc/passwd 的查看,虽然命令不同,但达到的目的是一样的, 都是得到/etc/passwd 的内容;

  [[email protected] ~]# more /etc/passwd

   [[email protected] ~]# cat /etc/passwd

   [[email protected] ~]# less /etc/passwd

  2)通过id和finger 工具来获取用户信息;

  除了直接查看用户(User)和用户组(Group)配置文件的办法除外,我们还有id和finger工具可用,我们一样通过命令行的操作,来

完成对用户的查询;id和finger,是两个各有测重的工具,id工具更测重用户、用户所归属的用户组、UID 和GID 的查看;而finger

测重用户资讯的查询,比如用户名(登录名)、电话、家目录、登录SHELL类型、真实姓名、空闲时间等等;

  id 命令用法;

  id 选项 用户名

  比如:我想查询beinan和linuxsir 用户的UID、GID 以及归属用户组的情况:

  [[email protected] ~]# id beinan

   uid=500(beinan) gid=500(beinan) groups=500(beinan)

  注:beinan的UID 是 500,默认用户组是beinan,默认用户组的GID 是500,归属于beinan用户组;

  [[email protected] ~]# id linuxsir

   uid=505(linuxsir) gid=502(linuxsir) groups=502(linuxsir),0(root),500(beinan)

  注:linuxsir的UID 是505,默认用户组是linuxsir ,默认用户组的GID 是502,归属于linuxsir(GID为502)、root(GID为0),beinan(GID为500);

  关于id的详细用法,我会在专门用户查询的文章来介绍;您可以通过man id 来查看用法,用起来还是比较简单的;

  finger 的用法

  finger 选项 用户名1 用户名2 …

  详细用法请参看man finger ;关于更为详细用法,我会在专门用户查询的文章来介绍;

  如果finger 不加任何参数和用户,会显示出当前在线用户,和w命令类似;对比一下;不过各有测重;

  [[email protected] ~]# w

   14:02:42 up 1:03, 3 users, load average: 0.04, 0.15, 0.18

   USER TTY FROM [email protected] IDLE JCPU PCPU WHAT

   linuxsir tty1 - 13:39 22:51 0.01s 0.01s -bash

   beinan tty2 - 13:53 8:48 11.62s 0.00s /bin/sh /usr/X1

   beinan pts/0 :0.0 13:57 0.00s 0.14s 1.08s gnome-terminal

   [[email protected] ~]# finger

   Login Name Tty Idle Login Time Office Office Phone

   beinan beinan sun tty2 8 Oct 18 13:53

   beinan beinan sun pts/0 Oct 18 13:57 (:0.0)

   linuxsir linuxsir open tty1 22 Oct 18 13:39 linuxsir o +1-389-866-771

  如果我们在finger 后面加上用户名,就可以看到用户更为详细的信息,可以一次查看多个用户,用空格分开,比如下面的例子中,我们一次查询两个用户beinan和linuxsir的信息;

  [[email protected] ~]# finger beinan linuxsir

   Login: beinan 注:用户名(也是登录名) Name: beinan sun (用户名全称)

   Directory: /home/beinan 注:家目录 Shell: /bin/bash 注:所用SHELL类型

   On since Tue Oct 18 13:53 (CST) on tty2 10 minutes 55 seconds idle 注:空闲时间;

   On since Tue Oct 18 13:57 (CST) on pts/0 from :0.0

   No mail.

   No Plan.

   Login: linuxsir Name: linuxsir open

   Directory: /home/linuxsir Shell: /bin/bash

   Office: linuxsir office, +1-389-866-7715

   On since Tue Oct 18 13:39 (CST) on tty1 24 minutes 58 seconds idle

   No mail.

   No Plan.

  3)用户组查询的办法;

  我们可以通过用户来查询所归属的组,用groups 来查询;比如我查询beinan和linuxsir 所归属的组,我们可以用groups 来查询;

  [[email protected] ~]# groups beinan linuxsir

   beinan : beinan

   linuxsir : linuxsir root beinan

  注:这是通过groups 同时查看了用户beinan和linuxsir所归属的组;

  2、通过修改用户(User)和用户组(Group)配置文件的办法来添加;

  由于我们已经在前面说过,可以通过修改配置文件的办法来管理用户,所以此主题应该包括此内容;当然通过用户及用户组管理工具(比如

adduser、userdel、usermod 、userinfo、groupadd 、groupdel

、groupmod等)也是可以的,通过管理工具对用户的管理我们将要在专门一篇文章中介绍;

  通过修改用户(User)和用户组(Group)配置文件的方法管理用户之用户的添加流程;

  我们先以添加用户为例,对用户的删除和修改都比较简单;

  1)修改 /etc/passwd ,添加用户记录;

  我们按/etc/passwd的格式的约定来添加新的用户记录;当然您要让一个用户失效,可以删除您想要删除的用户记录;值得注意的是,不能让UID 重复;

  比如我想添加lanhaitun 这个用户,我发现UID 508没有用户用,并且我想把其用户组也设置为lanhaitun ,用户组的GID 也设置为508,如果GID 没有占用的话;

  我们要打开 /etc/passwd ,在最下面加一行;

  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash

  然后执行pwconv ,让/etc/passwd 和/etc/shadow同步,您可以查看 /etc/shadow的内容是否同步;

  [[email protected] beinan]# pwconv

  2)修改/etc/group

  首先,我们得查看是否有lanhaitun用户组,以及GID 508 是否被其它用户组占用;

  [[email protected] ~]# more /etc/group |grep lanhaitun

   [[email protected] ~]# more /etc/group |grep 508

  通过查看,我们发现没有被占用;所以我们要添加lanhaitun 的记录到 /etc/group

  lanhaitun:x:508:

  其次,是运行 grpconv 来同步/etc/group 和/etc/gshadow内容,您可以通过查看/etc/gshadow的内容变化确认是不是添加组成功了;

  [[email protected] beinan]# grpconv

  3)创建用户的家目录,并把用户启动文件也复制过去;

  创建用户的家目录,我们要以/etc/passwd 中添加的新用户的记录为准,我们在/etc/passwd

中添加新用户lanhaitun ,她的家目录是处于/home/lanhaitun ;另外我们还需要把/etc/skel

目录下的.*隐藏文件复制过去;

  [[email protected] ~]# cp -R /etc/skel/ /home/lanhaitun

   [[email protected] ~]# ls -la /home/lanhaitun/

   总用量 48

   drwxr-xr-x 3 root root 4096 10月 18 14:53 .

   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..

   -rw-r–r– 1 root root 24 10月 18 14:53 .bash_logout

   -rw-r–r– 1 root root 191 10月 18 14:53 .bash_profile

   -rw-r–r– 1 root root 124 10月 18 14:53 .bashrc

   -rw-r–r– 1 root root 5619 10月 18 14:53 .canna

   -rw-r–r– 1 root root 438 10月 18 14:53 .emacs

   -rw-r–r– 1 root root 120 10月 18 14:53 .gtkrc

   drwxr-xr-x 3 root root 4096 10月 18 14:53 .kde

   -rw-r–r– 1 root root 658 10月 18 14:53 .zshrc

  4)改变新增用户家目录的属主和权限;

  我们发现新增用户的家目录的属主目前是root ,并且家目录下的隐藏文件也是root权限;

  [[email protected] ~]# ls -ld /home/lanhaitun/

   drwxr-xr-x 3 root root 4096 10月 18 14:53 /home/lanhaitun/

  所以我们要通过chown 命令来改变/home/lanhaitun目录归属为lanhaitun用户;

  [[email protected] ~]# chown -R lanhaitun:lanhaitun /home/lanhaitun

  查看是否已经更换了属主为lanhaitun用户所有;

  [[email protected] ~]# ls -ld /home/lanhaitun/

   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/

   [[email protected] ~]# ls -la /home/lanhaitun/

   总用量 48

   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .

   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..

   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout

   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile

   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc

   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna

   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs

   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc

   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde

   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc

  看来已经实现了;

  但这样还是不够的,因为/home/lanhaitun/的目录权限可能会过于公开;

  drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/

  我们看到 /home/lanhaitun/ 目录的权限为 drwxr-xr-x ,也就是同组用户和其它用户组所能查看,为了保密,我们有理由把新增用户家目录的权限设置为只有其自己可读可写可执行;于是… …

  [[email protected] ~]# chmod 700 /home/lanhaitun/

   [[email protected] ~]# ls -ld /home/lanhaitun/

   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/

  我们用其它用户,当然得把具有超级权限的root用户除外;比如我以beinan用户来查看lanhaitun的家目录会得到如下信息;

  [[email protected] ~]$ ls -la /home/lanhaitun/

   ls: /home/lanhaitun/: 权限不够

  如此看来,lanhaitun用户的家目录是安全的

<IMG onmousewheel="return imgzoom(this);" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor=‘hand‘; this.alt=‘Click here to open new window\nCTRL+Mouse wheel to zoom in/out‘;}" onclick="if(!this.resized)
{return true;} else {window.open(‘http://linux.qisi.org/wp-includes/images/smilies/icon_wink.gif‘);}" alt="" src="http://linux.qisi.org/wp-includes/images/smilies/icon_wink.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7;
this.alt=‘Click here to open new window\nCTRL+Mouse wheel to zoom in/out‘;}" border=0>

  5)设置新增用户的密码;

  以上各步骤都就序了,我们得为新增用户设置密码了;要通过passwd 命令来生成;这个没有办法通过修改文件解决;

  passwd 的用法:

  passwd 用户

  [[email protected] ~]# passwd lanhaitun

   Changing password for user lanhaitun.

   New UNIX password: 注:输入您的密码

   Retype new UNIX password: 再输入一次

   passwd: all authentication tokens updated successfully. 注:设置密码成功

  6)测试添增用户是否成功;

  您可以用新增用户登录测试,也可以通过su 来切换用户测试;

  [[email protected] ~]$ su lanhaitun

   Password:

   [[email protected] beinan]$ cd ~

   [[email protected] ~]$ pwd

   /home/lanhaitun

   [[email protected] ~]$ ls -la

   总用量 52

   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 15:15 .

   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..

   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout

   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile

   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc

   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna

   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs

   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc

   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde

   -rw——- 1 lanhaitun lanhaitun 66 10月 18 15:15 .xauthOhEoTk

   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc

   [[email protected] ~]$ mkdir testdir

   [[email protected] ~]$ ls -lh

   总用量 4.0K

   drwxrwxr-x 2 lanhaitun lanhaitun 4.0K 10月 18 15:16 testdir

  通过上面一系列动作,我们会发现所创建的lanhaitun用户已经成功;

  2、通过修改用户(User)和用户组(Group)配置文件的办法来修改用户或用户组;

  我们可以修改/etc/passwd 和/etc/group 来达到修改用户和用户所归属的组,这个过程和添加新用户时差不多;比如我想修改lanhaitun的用户名全称、公司以及电话等信息;我们可以修改/etc/passwd 实现;

  1)修改用户信息;

  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash 注:这是初始记录;

  我们可以修改为

  lanhaitun:x:508:508:lanhaitun wu,Office Dalian,13000000000:/home/lanhaitun:/bin/bash

  当然我们还可以修改用户的bash 类型,家目录等,当然如果修改家目录,还得进行建家目录、属主和权限的操作,这和前面添加用户的办法在程序上有些是相同的;

  修改完成后,我们要进行pwconv 同步,通过finger 来查看用户的信息等;

  [[email protected] lanhaitun]# pwconv

   [[email protected] lanhaitun]# finger lanhaitun

   Login: lanhaitun Name: lanhaitun wu

   Directory: /home/lanhaitun Shell: /bin/bash

   Office: Office Dalian, +1-300-000-0000

   Never logged in.

   No mail.

   No Plan.

  2)修改用户所归属的组,可以通过/etc/group 修改实现;

  当然修改用户和用户组,不仅能通过修改配置文件来实现,还能过过 usermod 及chfn来实现;我将在以后的文档中写一写,也比较简单;您可以通过man来查看用法;在这里我们先讲一讲如何通过修改配置文件来达到目的;

  如果我们想把lanhaitun 这个用户归属到root用户组,所以我们还能修改/etc/group 的办法来达到目的;找到/etc/group 中的root开头的一行,按其规划加入lanhaitun;

  root:x:0:root,lanhaitun

  如果不明白,看前面/etc/group的解释,谢谢;

  然后执行 grpconv 命令来同步/etc/group 和/etc/gshadow两个文件的内容;

  [[email protected] ~]# grpconv

  查看lanhaitun归属组的信息;

  [[email protected] ~]# id lanhaitun

   uid=508(lanhaitun) gid=508(lanhaitun) groups=508(lanhaitun),0(root)

  3)删除用户及用户组的办法;

  这个比较简单,我们可以通过删除/etc/passwd 和/etc/group 相应的用户和用户组记录就能达到目的,也能过过userdel 和groupdel 来实现对用户及用户组的删除;

  如果是通过修改用户和用户组配置文件的办法来删除用户,就是删除相应的记录就行了,如果不想保留其家目录,删除就是了。

  [[email protected] ~]# userdel lanhaitun

   [[email protected] ~]# userdel -r lanhaitun

  注:可以用userdel 来删除lanhaitun 用户,我们看到第二个例子中多了一个参数-r

,第一个例子是说只删除lanhaitun用户,其家目录和mail等仍会保存;加上-r

参数,是删除家目录及mail等;所以要小心操作;用userdel 删除用户的同时,也会把其用户组删除;我们可以通过/etc/passwd

和/etc/group 的内容变化来查看;

三、切换用户身份su、sudo、/etc/sudoers

以下内容参考:http://desert3.iteye.com/blog/1663995

Linux系统中,有时候普通用户有些事情是不能做的,除非是root用户才能做到。这时就需要用su命令临时切换到root身份来做事了。

su:substitute[‘s?bst?tju?t]代替 user

su 的语法为:

su [OPTION选项参数] [用户]

-, -l, --login 登录并改变到所切换的用户环境;

-c, --commmand=COMMAND 执行一个命令,然后退出所切换到的用户环境;

用su命令切换用户后,可以用 exit 命令或快捷键[Ctrl+D]可返回原登录用户。

例子:

su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就是说这时虽然是切换为root用户了,但并没有改变root登录环境;用户默认的登录环境,可以在/etc/passwd 中查得到,包括家目录,SHELL定义等;

su 加参数 - ,表示默认切换到root用户,并且改变到root用户的环境;

用su是可以切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那岂不是系统非常的不安全?没有错,为了改进这个问题,产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用visudo命令去编辑相关的配置文件/etc/sudoers。如果没有visudo这个命令,请使用
"yum install -y sudo" 安装。

默认root能够sudo是因为这个文件中有一行” root ALL=(ALL) ALL”

sudo 的适用条件:

由于su对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su来切换到超级用户来管理系统,也不能明 确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限, 并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。

通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;

sudo 执行命令的流程:是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;

从编写 sudo 配置文件/etc/sudoers开始

sudo的配置文件是/etc/sudoers ,我们可以用他的专用编辑工具visodu ,此工具的好处是在添加规则不太准确时,保存退出时会提示给我们错误信息;配置好后,可以用切换到您授权的用户下,通过sudo -l 来查看哪些命令是可以执行或禁止的;

/etc/sudoers 文件中每行算一个规则,前面带有#号可以当作是说明的内容,并不执行;如果规则很长,一行列不下时,可以用\号来续行,这样看来一个规则也可以拥有多个行;

/etc/sudoers 的规则可分为两类;一类是别名定义,另一类是授权规则;别名定义并不是必须的,但授权规则是必须的;

sudo授权规则(sudoers配置):

授权用户 主机=命令动作

这三个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用( )号括起来,如果不需要密码直接运行命令的,应该加NOPASSWD:参数,但这些可以省略;举例说明;

sudoers的缺省配置:

Html代码  

  1. #############################################################
  2. # sudoers file.
  3. #
  4. # This file MUST be edited with the ‘visudo‘ command as root.
  5. #
  6. # See the sudoers man page for the details on how to write a sudoers file.
  7. #
  8. # Host alias specification
  9. # User alias specification
  10. # Cmnd alias specification
  11. # Defaults specification
  12. # User privilege specification
  13. root    ALL=(ALL) ALL
  14. # Uncomment to allow people in group wheel to run all commands
  15. # %wheel        ALL=(ALL)       ALL
  16. # Same thing without a password
  17. # %wheel        ALL=(ALL)       NOPASSWD: ALL
  18. # Samples
  19. # %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
  20. # %users  localhost=/sbin/shutdown -h now
  21. ##################################################################

1. 最简单的配置,让普通用户support具有root的所有权限 

执行visudo之后,可以看见缺省只有一条配置:

root    ALL=(ALL) ALL

那么你就在下边再加一条配置:

support ALL=(ALL) ALL

这样,普通用户support就能够执行root权限的所有命令

以support用户登录之后,执行:

sudo su -

然后输入support用户自己的密码,就可以切换成root用户了

2. 让普通用户support只能在某几台服务器上,执行root能执行的某些命令 

首先需要配置一些Alias,这样在下面配置权限时,会方便一些,不用写大段大段的配置。Alias主要分成4种

Host_Alias

Cmnd_Alias

User_Alias

Runas_Alias

1) 配置Host_Alias:就是主机的列表

Host_Alias      HOST_FLAG = hostname1, hostname2, hostname3

2) 配置Cmnd_Alias:就是允许执行的命令的列表,命令前加上!表示不能执行此命令.

命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!

Cmnd_Alias      COMMAND_FLAG = command1, command2, command3 ,!command4

3) 配置User_Alias:就是具有sudo权限的用户的列表

User_Alias USER_FLAG = user1, user2, user3

4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表

Runas_Alias RUNAS_FLAG = operator1, operator2, operator3

5) 配置权限

配置权限的格式如下:

USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG

如果不需要密码验证的话,则按照这样的格式来配置

USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG

配置示例:

Html代码  

  1. ############################################################################
  2. # sudoers file.
  3. #
  4. # This file MUST be edited with the ‘visudo‘ command as root.
  5. #
  6. # See the sudoers man page for the details on how to write a sudoers file.
  7. #
  8. # Host alias specification
  9. Host_Alias      EPG = 192.168.1.1, 192.168.1.2
  10. # User alias specification
  11. # Cmnd alias specification
  12. Cmnd_Alias      SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm
  13. Cmnd_Alias      ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root
  14. # Defaults specification
  15. # User privilege specification
  16. root    ALL=(ALL) ALL
  17. support EPG=(ALL) NOPASSWD: SQUID
  18. support EPG=(ALL) NOPASSWD: ADMPW
  19. # Uncomment to allow people in group wheel to run all commands
  20. # %wheel        ALL=(ALL)       ALL
  21. # Same thing without a password
  22. # %wheel        ALL=(ALL)       NOPASSWD: ALL
  23. # Samples
  24. # %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
  25. # %users  localhost=/sbin/shutdown -h now
  26. ###############################################################
时间: 2024-10-16 22:55:24

linux 查看当前用户id、whoami用户列表、用户组、用户权限/etc/passwd、/etc/group、/etc/shadow以及切换用户身份、su、sudo、/etc/sudoers的相关文章

【转】linux 设置用户id 设置组id

[转]转自 linux 设置用户id 设置组id 最近看apue,简单记录对设置用户id理解(设置组id同理). 1. 相关的id好像很多,共有哪些? 文件2个id 2个位: 拥有者id             拥有者组id 设置用户id位         设置组id位 进程6个或更多的id(如果有附加组id): 实际用户id             实际组id       (仅仅标志我们是谁,不参与文件访问权限检测) 有效用户id             有效组id        (用于文件访

linux系统学习笔记:无死角理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID

一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就是登录的用户的uid. 有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限.如果有,则ok,否则报错不能执行.在正常的情况下,一个用户登录之后(假设是A用户),A用户的有效用户ID和实际用户ID是相同的,但是如果A用户在某些场景中想要执行一些特权操作,能顺利的执行吗?上面说到了用户的任务操作,linu

文件访问权限:更改用户ID

本文来探讨一下通过更改用户ID来获取合适的文件访问权限.由于更改组ID的规则与用户ID相同,我们在这里只探讨用户ID. 纸上得来终觉浅 先了解以下几个基本知识: 用户ID包括:实际用户ID.有效用户ID.保存的设置用户ID.其中保存的设置用户ID由exec函数保存. 实际用户ID标识我们究竟是谁,该字段在登录时取自口令文件中的登录项.通常,在一个登录会话期间该值不会改变,但root用户进程有方法改变它. 有效用户ID决定了我们的文件访问权限. 保存的设置用户ID在执行一个程序时包含了有效用户ID

[转载]unix环境高级编程备忘:理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID

转载自http://www.cnblogs.com/stemon/p/5287631.html 一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就是登录的用户的uid. 有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限.如果有,则ok,否则报错不能执行.在正常的情况下,一个用户登录之后(假设是A用户),A用户的有效用户ID和实际用户ID是相同的,但

无死角理解保存设置用户ID,设置用户ID位,有效用户ID,实际用户ID

最近在理解保存设置用户ID时,遇到一些问题,但是发现网上都没能把这个问题说清楚,通过自己的思考和查找资料,终于明白了,现在分享在这里共大家交流学习,如果有不正确的地方,欢迎指正 1,基本概念: 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一确定的,就是登陆的用户的uid 有效用户ID(EUID):用于系统决定用户对系统资源的权限.也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限,如果有,则OK,否则报错不能执行.在正常情况下,

用户ID和用户组ID的操作

主要函数为 #include<sys/types.h> #include<unistd.h> uid_t getuid(void); gid_t getgid(void); uid_t gettuid(void); gid_t getegid(void); //更改ID int setuid(uid_t uid); int setgid(gid_t gid); //交换实际用户和有效用户ID int setreuid(uid_t ruid,uid_t euid); int setr

Linux的用户组和权限(一)

导读:本章主要内容如下       1.解释Linux的安全模型 2.解释用户账号和组群账号的目的 3.用户和组管理命令 4.理解并设置文件权限 5.默认权限 6.特殊权限 7.ACL 一.安全介绍 3A 1.资源分派: Authentication :认证  (用户名和对应口令) Authorization :授权   (不同的用户权限不一样) Accouting /Audition :审计 2.所属主和所属组 user(用户) token令牌 :identity身份 Linux用户:user

Linux 查看登录用户信息 who &amp; whoami

Linux 查看登录用户信息 who & whoami 在一台服务器上,同一时间往往会有很难多人同时登录. who 命令可以查看当前系统中有哪些人登录,以及他们都工作在哪个控制台上. 这样可以很方便的监控机器的登录人信息,并对系统操作进行安全监控. [[email protected] /]# who root pts/0 2019-11-21 23:10 (XX..) root pts/2 2019-11-18 11:39 (XX..) 效果如下: 有时候,可能会忘记自己是以什么身份登录到系统

Linux进程的实际用户ID和有效用户ID

在Unix进程中涉及多个用户ID和用户组ID,包括如下: 1.实际用户ID和实际用户组ID:标识我是谁.也就是登录用户的uid和gid,比如我的Linux以simon登录,在Linux运行的所有的命令的实际用户ID都是simon的uid,实际用户组ID都是simon的gid(可以用id命令查看). 2.有效用户ID和有效用户组ID:进程用来决定我们对资源的访问权限.一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID.当设置-用户-ID(SUID)位设置,则有效用户ID等于