运维笔记4(用户信息涉及到的文件,用户管理命令,用户权限的下放,更新:关于useradd -b -d -m -k的一些理解和使用)

来源:互联网 发布:维启软件 编辑:程序博客网 时间:2024/06/03 22:58

概述:

       理解多用户,知道涉及用户信息的都有哪些文件,用户的管理命令,用户权限的下放。

1.什么是用户?

       从日常生活中想的话,我们每个人都是当过用户,去银行你有个账户,对于银行你就是个用户,你的信息被银行记录在数据库(可以是任何介质的数据库)中,诸如姓名,身份证号,注册时间,存款信息等等,如果你的存钱或取钱后就对你账户数据库中的信息进行修改。所以用户对银行来说就是一些用来描述用户信息的字符串。在linux系统中也是这样,用户就是系统使用者的身份,在系统中用户存储为若干串字符+若干个系统配置文件,存储这些字符串的文件分别是/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow,还有一些与用户有关系的文件,如/etc/login.defs,/etc/skel。他们的详细用途,我们在下面进行介绍。

2.用户信息涉及到的系统配置文件:

       

       /etc/passwd:这个文件所有的用户都可以读取,其中存放的信息有,用户名字,用户加密后的密码(为了安全,现在已将加密后的密码放在/etc/shadow文件下了,这里默认放x,切记不可乱加字符,可能导致无法登陆),用户ID(uid),用户初始组ID(gid),用户描述信息(可用chfn修改这个信息,可用finger命令查询),用户家目录,用户使用哪种shell(在/etc/shells下是规定可以使用的shell)。

      

      /etc/shadow:这个文件主要存放用户的密码信息,第一个字段是用户名;第二个字段是加密的密码;第三个字段是上一次修改密码的时间(大家可能看不懂这个数字和时间有什么关系,其实这个数字是上次修改距离1970年1月1日的天数,不信?我们来计算一下,现在明白了吧,这就是天数);第四个字段是密码最短修改时间间隔,第五个字段是密码最长修改时间间隔,第六个字段是,密码警告时间(密码距离到达第四个字段多长时间时需要会发出警告);第七个字段是非活跃期(当密码过期后还有多少天可以使用);第八个是密码到期日(过了这个时间用户就无法使用了)。

       

        /etc/group:第一个字段是用户名,第二个字段是加密的组密码,第三个是组ID(gid),最后一个字段用来放这个组的用户(或者说以'mo'为附加组的用户,之后会介绍初始组和附加组的区别)。

       

       /etc/gshadow:第一个字段是用户名,第二个字段是真正的加密密码,图中为!,代表还没有设置,第三个字段也是用来放这个组的用户。

      

      /etc/skel,这个文件是用户的骨架目录,每次新建用户时都会将这个目录下的文件复制到用户家目录下来布置环境。

3.用户的管理命令

1)useradd        参数          用户名字

          -u        ##指定用户uid

                              -g        ##指定用户初始组的gid,这个组必须已经存在

                              -G       ##指定用户附加组,这个附加组也必须存在

 #############这里插入一条关于什么是初始组什么是附加组?

        用一个通俗的解释,你刚出生时只属于一个组,就是你的家,而且这个组一般是不会变的,这个家就是你的初始组,生你的时候家必须存在,所以用-g指定的那个组,也就必须存在;随着你的长大,你又加入了很多组,比如小学,初中,高中,大学,等等,但是这些组不会覆盖你的初始组,你还是属于你的家,这就是附加组。

       -s       ##指定用户登陆时使用的shell

                               -c      ##用户说明信息

                               -d      ##指定用户家目录

2)ueserdel    删除用户

                           一般会使用-r选项,表示删除用户信息及用户系统配置。

3)组的建立

groupadd ########建立组

                  -g  指定组id

groupdel            组名称    ###删除组

4)用户id信息查看

-u ##用户uid
-g ##用户初始组id
-G ##用户所有所在组id
-n ##显示名称而不是id数字
-a ##显示所有信息

5)用户信息更改

uesrmod  参数           用户

               -l ##更改用户名称
-u ##更改uid
-g ##更改gid
-G ##更改附加组
-aG ##添加附加组
-c ##更改说明
-d ##更改家目录指定
-md ##更改家目录指定及家目录名称
-s ##更改shell
-L ##冻结帐号
-U ##解锁

这个命令的基本参数与useradd差不都,如果掌握了useradd这个命令一定也没有问题,此处说明下-L加锁参数。我们都知道passwd命令也拥有加锁参数,是passwd -l,这两个加锁有什么不同呢,我们现在来测试下。

              用usermod -L上的锁就是在/etc/shadow第二字段的前面加一个'!',而passwd -l是在第二个字段前加两个'!',所以可得,两个不同是他们的强度不同。

,这是我们新建一个用户后他的shadow文件中的字符串,只有一个‘!’,所以我们在刚创建用户后没有设置密码的时候是无法使用的,这个账户是被锁定状态,设定密码过后就解除了锁定状态。 

6)一些其他的用户管理命令

chfn,用来更改用的注释信息


finger用于查询以上信息(这个命令一般需要先下载)


chage用于更改密码的过期信息

           -d         ###用于更改上次修改密码的时间(将这个天数修改为0有特殊意义,用户下次登陆这个账户会被要求必须修改密码)

           -E         ###用于更改到期天数

           -I          ###用户到期后的不活跃天数

           -m       ###两次修改密码间距最小天数

           -M       ###两次修改密码间距最大天数

           -W      ###为警告天数

4.用户权限的下放

我们可以让一个用户以某个身份执行一个命令,而不一定是以自己的身份执行,一般用来将root用户的权利下放给普通用户。其实就是修改一个文件/etc/sudoers我们来看下这个文件的结构。


这个文件有自己的一套语法,如果修改不当,就会导致sudo出现问题,所以务必使用visudo来修改,因为这个工具会对我们修改后的文件进行严格的语法检查,如果错误了会提示哪行错误。

下面我们用一个具体例子来解释他的语法

jorge ALL=(root) /usr/bin/find, /bin/rm
上面的第一栏规定它的适用对象:用户或组,就本例来说,它是用户jorge。此外,因为系统中的组和用户可以重名,要想指定该规则的适用对象是组而非用户的话,组对象的名称一定要用百分号%开头。
第二栏指定该规则的适用主机。当我们在多个系统之间部署sudo环境时,这一栏格外有用,这里的ALL代表所有主机。但是,对于桌面系统或不想将sudo部署到多个系统的情况,这一栏就换成相应的主机名。
第三栏的值放在括号内,指出第一栏规定的用户能够以何种身份来执行命令。本例中该值设为root,这意味着用户jorge能够以root用户的身份来运行后面列出的命令。该值也可以设成通配符ALL,jorge便能作为系统中的任何用户来执行列出的命令了。
最后一栏(即/usr/bin/find, /bin/rm)是使用逗号分开的命令表,这些命令能被第一栏规定的用户以第三栏指出的身份来运行它们。本例中,该配置允许jorge作为超级用户运行 /usr/bin/find和 /bin/rm这两个命令。需要指出的是,这里列出的命令一定要使用绝对路径。
上面的这一段摘抄自Ubuntu进入root权限命令——sudo和su命令详解,详细的大家可以看这里。

########接下来我们测试一下,做一个练习,我想让mo2用户可以以修改任何人的密码,怎么做?


这样就可以了。
这样就可以使用了。


sudo命令不仅可以将某一和用户权利提升,也可以将root用户权利下降,就是使用它的-u参数,以某一用户执行这个命令。

这样我们就用root用户创出了属主和属组都是mo的文件。

更新:

应为在使用useradd的时候会有指定你的家目录的时候,不一定是/home/username,自己查询man手册后发现了几个相关的参数但是有点混淆,现在好好总结一下这几个参数,分别是-b,-d,-m,-k,现在我简单的翻一下man目录关于这几个参数的说明。

1)
       -b, --base-dir BASE_DIR
           The default base directory for the system if -d HOME_DIR is not specified.
           BASE_DIR is concatenated with the account name to define the home directory.
           If the -m option is not used, BASE_DIR must exist.

     If this option is not specified, useradd will use the base directory
           specified by the HOME variable in /etc/default/useradd, or /home by default

           

如果-d参数(家目录)没有被指定,那么这就是系统基础目录。基础目录是与账户名字相连接起来作为家目录。

如果-m选项没有使用,那么基础目录必须存在

   如果这个参数没有被指定,useradd命令将使用HOME变量所指定的基础目录,这个变量在/etc/default/useradd,或者/home 下。

tips:根据上面的翻译其实已经非常好理解了,这个-b参数就是用于修改放置用于名字目录的目录,下面测试一下:

[root@localhost ~]# useradd -b / mo[root@localhost ~]# cd /[root@localhost /]# lsbin   dev  home    lib    media  <span style="color:#ff0000;">mo</span>   proc  run   srv  tmp  varboot  etc  huawei  lib64  mnt    opt  root  sbin  sys  usr[root@localhost /]# cd mo[root@localhost mo]# ls[root@localhost mo]# ls -a.  ..  .bash_logout  .bash_profile  .bashrc  .config  .mozilla
这个命令就相当于修改下你的用户家目录放置的上级目录,不会更改其他的东西,而且就算家目录之前没有创建,他也会为你创建好。

2)

-d, --home-dir HOME_DIR
           The new user will be created using HOME_DIR as the value for the user's
           login directory. The default is to append the LOGIN name to BASE_DIR and use
           that as the login directory name. The directory HOME_DIR does not have to
           exist but will not be created if it is missing.

新用户将会以HOME_DIR作为他的用户登录目录而被创建。默认情况下是使用LOGIIN name添加在BASE_DIR后并使用它作为登陆目录名字。HOME_DIR路径不是必须存在,但是他将不会被创建如果路径不存在的话。

tips:这个选项用起来就会奇怪一点,他既然可以指定在哪里创建家目录,但是为啥又不为系统创建他呢,其实是有原因的,我们知道家目录不是一个简单的目录他下面有很多与这个环境有关的文件,我们随便创建一个其实和用户真实的家目录有权限和文件的差别。所以这个命令是一个很细化的命令,让我们可以自定义用户的家目录,但是细化的坏处就是他只完成一小部分任务,其他的任务还要交给别人完成,这条命令还要有别的参数参与才能建立我们完整的家目录。就是下面我们介绍的-m与-k。

3)

-m, --create-home
           Create the user's home directory if it does not exist. The files and
           directories contained in the skeleton directory (which can be defined with
           the -k option) will be copied to the home directory.

           By default, if this option is not specified and CREATE_HOME is not enabled,
           no home directories are created.

           The directory where the user's home directory is created must exist and have
           proper SELinux context and permissions. Otherwise the user's home directory
           cannot be created or accessed.

为用户创建家目录如果家目录不存在的话。那里包含的文件和目录在骨架目录中(骨架目录的路径也可以用-k选项指定)将被复制到家目录下。

默认情况下,如果这个选项没有被指定并且CREATE_HOME(定义在)也没有被启动将没有家目录被创建。

创建用户的主目录的目录必须存在并有适当的SELinux上下文和权限

tips:看,咱们刚才需要创建目录,这里,他就给出来了,既然-d不给创建目录,那就加一个-m参数不就可以创建了吗。

[root@localhost /]# useradd -d /li -m li[root@localhost /]# ls /bin   dev  home    <span style="color:#ff0000;">li</span>   lib64  mnt  opt   root  sbin  sys  usrboot  etc  huawei  lib  media  mo   proc  run   srv   tmp  var[root@localhost /]# ls li[root@localhost /]# ls -a li.  ..  .bash_logout  .bash_profile  .bashrc  .config  .mozilla
4)

-k, --skel SKEL_DIR
           The skeleton directory, which contains files and directories to be copied in
           the user's home directory, when the home directory is created by useradd.

           This option is only valid if the -m (or --create-home) option is specified.

           If this option is not set, the skeleton directory is defined by the SKEL
           variable in /etc/default/useradd or, by default, /etc/skel.

           If possible, the ACLs and extended attributes are copied.

骨架目录,包括将被复制到用户家目录的文件和目录,当家目录被useradd制造。

这个选项只有在-m选项被指定的时候才有效。

如果这个选项没有设定,这个骨架目录将被在/etc/default/useradd的SKEL变量定义,or直接默认为/etc/skel。

tips:其实这个选项的作用就是为你新创建的家装修用的,如果我们装修技术不好的话,那就暂时先不指定,使用系统默认的吧。

2 0
原创粉丝点击