概述:
理解多用户,知道涉及用户信息的都有哪些文件,用户的管理命令,用户权限的下放。
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来修改,因为这个工具会对我们修改后的文件进行严格的语法检查,如果错误了会提示哪行错误。
下面我们用一个具体例子来解释他的语法
应为在使用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 /]# ls
bin dev home lib media mo proc run srv tmp var
boot 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 li lib64 mnt opt root sbin sys usr
boot 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:其实这个选项的作用就是为你新创建的家装修用的,如果我们装修技术不好的话,那就暂时先不指定,使用系统默认的吧。