首页 > 代码库 > Linux之用户管理--初级上

Linux之用户管理--初级上

 

管理用户命令汇总

命令注释说明(特殊颜色的必须掌握)
useradd增同adduser命令,执行此命令可在系统中添加用户。(更改4个用户文件)
userdel删执行此命令可删除用户及相关用户的配置或文件(更改4个用户文件)
passwd执行此命令可为用户设置或修改密码。更改/etc/shadow文件
chage修改用户密码属性。管理/etc/shadow文件
usermod改修改用户信息的命令,可以通过usermod来修改登录名,用户的家目录等等
id查查看用户的UID,GID及所归属的用户组
su用户角色切换工具。su -
sudo

sudo是通过另一个用户来执行命令,su 是用来切换用户,然后通过切换到的用户来完成相应的任务,但sudo能在命令后面直接接命令执行,

比如sudo ls /root,不需要root密码就可以执行只有root才能执行的相应命令或具备的目录权限;这个权限需要通过visudo命令或者直接编辑/etc/sudoers来实现

visudovisudo配置sudo权限的编辑命令;也可以不用这个命令,直接用vi来编辑/etc/sudoers实现。但推荐用visudo来操作(会自动检查语法)

 

管理用户组命令汇总

命令注释说明(特殊颜色标记需要掌握)
groupadd添加用户组
groupdel删除用户组

 

/etc/skel目录是用来存放新用户环境变量文件的目录,当我们添加新用户时,这个目录下的所有文件会自动被复制到新添加的用户的家目录下:默认情况下,/etc/skel目录下的所有文件都是隐藏文件以.点开头的文件);通过修改、添加、删除/etc/skel目录下的文件,我们可为新创建的用户提供统一的,标准的,初始化用户环境。

[root@chengliang ~]# cd /etc/skel[root@chengliang skel]# lsreadme[root@chengliang skel]# ls -altotal 20drwxr-xr-x.  2 root root 4096 May 12 22:14 .drwxr-xr-x. 79 root root 4096 May 16 17:07 ..-rw-r--r--.  1 root root   18 May 11  2016 .bash_logout-rw-r--r--.  1 root root  176 May 11  2016 .bash_profile-rw-r--r--.  1 root root  124 May 11  2016 .bashrc-rw-r--r--.  1 root root    0 May 12 22:14 readme[root@chengliang skel]# 

 

命令说明: 在/etc/skel/目录下创建一个文件readme,然后我们创建一个新用户,发现在用户的家目录里也默认有一个readme。因此,得出结论,/etc/skel/目录下的所有文件都会默认出现在新建用户的家目录里。

[root@chengliang ~]# su - cheng[cheng@chengliang ~]$ ls -altotal 24drwx------. 2 cheng cheng 4096 May 13 01:23 .drwxr-xr-x. 7 root  root  4096 May 12 22:15 ..-rw-------. 1 cheng cheng  125 May 13 01:23 .bash_history-rw-r--r--. 1 cheng cheng   18 May 11  2016 .bash_logout-rw-r--r--. 1 cheng cheng  176 May 11  2016 .bash_profile-rw-r--r--. 1 cheng cheng  124 May 11  2016 .bashrc-rw-r--r--. 1 cheng cheng    0 May 12 22:14 readme[cheng@chengliang ~]$ 

 

企业面试题:请问如下登录故障的原理及解决办法?

-bash-4.1$-bash-4.1$

问题示例: 命令说明:普通用户强制删除了家目录里的变量文件就会出现这种问题。

[teacher@chengliang ~]$ ls -altotal 20drwx------. 2 teacher teacher 4096 May 30 23:32 .drwxr-xr-x. 7 root    root    4096 May 12 22:15 ..-rw-------. 1 teacher teacher  149 May 30 23:32 .bash_history-rw-r--r--. 1 teacher teacher  176 May 11  2016 .bash_profile-rw-r--r--. 1 teacher teacher  124 May 11  2016 .bashrc[teacher@chengliang ~]$ rm ./.bash*[teacher@chengliang ~]$ ls -altotal 8drwx------. 2 teacher teacher 4096 May 30 23:34 .drwxr-xr-x. 7 root    root    4096 May 12 22:15 ..[teacher@chengliang ~]$ exitlogout[root@chengliang ~]# su - teacher-bash-4.1$ 

解决方法:我们去把/etc/skel/目录下的变量文件复制回来就好了

[root@chengliang ~]# su - teacher-bash-4.1$ -bash-4.1$ cp /etc/skel/.bash* ~-bash-4.1$ exitlogout[root@chengliang ~]# su - teacher[teacher@chengliang ~]$ ls -altotal 24drwx------. 2 teacher teacher 4096 May 30 23:36 .drwxr-xr-x. 7 root    root    4096 May 12 22:15 ..-rw-------. 1 teacher teacher   80 May 30 23:36 .bash_history-rw-r--r--. 1 teacher teacher   18 May 30 23:36 .bash_logout-rw-r--r--. 1 teacher teacher  176 May 30 23:36 .bash_profile-rw-r--r--. 1 teacher teacher  124 May 30 23:36 .bashrc[teacher@chengliang ~]$ 

知识扩展*和.*的问题

[root@chengliang etc]# cp /etc/skel/* /tmp/[root@chengliang etc]# cd /tmp/[root@chengliang tmp]# lsetc  mysql.sock  readme[root@chengliang tmp]# ls -altotal 16drwxrwxrwt.  4 root  root  4096 May 30 23:48 .dr-xr-xr-x. 24 root  root  4096 May 12 15:28 ..drwxrwxrwt.  2 root  root  4096 Nov 12  2016 .ICE-unixdrwxr-xr-x.  8 root  root  4096 Nov 20  2016 etcsrwxrwxrwx.  1 mysql mysql    0 May 10 21:08 mysql.sock-rw-r--r--.  1 root  root     0 May 30 23:48 readme[root@chengliang tmp]#

*不复制隐藏文件,所以/etc/skel/目录下的隐藏文件不会复制到/tmp/目录下

那么在运行cp /etc/skel/.*之前,我们先看看.*里都有什么东西?[root@chensiqi1 ~]# ls /etc/skel/.*/etc/skel/.bash_logout  /etc/skel/.bash_profile  /etc/skel/.bashrc/etc/skel/.:readme/etc/skel/..:ConsoleKit               inputrc                       quotatabDIR_COLORS               iproute2                      rcDIR_COLORS.256color      issue                         rc.dDIR_COLORS.lightbgcolor  issue.bak                     rc.localNetworkManager           issue.net                     rc.sysinitX11                      issue.net.bak                 rc0.dabrt                     kdump-adv-conf                rc1.dacpi                     kdump.conf                    rc2.dadjtime                  krb5.conf                     rc3.daliases                  latrace.conf                  rc4.daliases.db               latrace.d                     rc5.dalsa                     ld.so.cache                   rc6.d东西太多以下省略....

.*连etc下的东西都复制出来了,这是为什么呢?别忘了,目录下都还有些什么东西,还有.和..

.代表当前目录,..代表上级目录。因此.*就把上级目录的所有文件也复制了。所以我们在复制隐藏文件的时候不能用.*来代表所有

 

用户管理命令详解

添加用户命令useradd

  • 添加用户的命令有useradd和adduser,这两个命令所能达到的效果是一样的。当然除了useradd和adduser命令以外,我们还能通过修改用户配置文件/etc/passwd和/etc/group及手动创建文件的办法来直接添加用户,不过这里并不推荐,这里建议大家统一使用useradd命令,本文也仅会针对useradd命令进行举例讲解。
  • 当使用useradd命令不加参数选项,后面直接跟所添加用户名时,系统首先会读取配置文件/etc/login.defs和/etc/default/useradd中所定义的参数或规则,根据设置的规则添加用户,同时会向/etc/passwd和/etc/group文件内添加新建用户和用户组记录。
  • 当然/etc/passwd和/etc/group的加密资讯文件/etc/shadows和/etc/gshadow也会同步生成记录,同时系统还会根据/etc/default/useradd文件中所配置的信息建立用户的家目录,并复制/etc/skel中的所有文件(包括隐藏的环境配置文件)到新用户的家目录中。

useradd语法:

[root@chensiqi ~]# man useradd #下面的内容源于此命令帮助的结果,对于部分地方做了修改名称:    useradd - 账号建立或更新新用户资讯的工具语法:    useradd [-c comment] [-d home_dir]            [-e expire_date] [-f inactive_time]            [-g initial_group] [-G group[,....]]            [-m [-k skeleton_dir] | -M] [-s shell]            [-u uid[-o][-n][-r] login]        useradd -D  [-g default_group] [-b default_home]                [-f default_inactive] [-e default_expire_date]                [-s default_shell]                描述:    新账号建立    当不加-D 参数时,useradd指令使用命令列来指定新账号的设定值和使用系统上的预设值(指前文提到的/etc/login.defs和/etc/default/useradd等配置文件)。新用户账号将产生一些系统档案,如用户目录的建立,拷贝起始档案等,这些均可以利用命令列选项指定。此版本为Red Hat Linux 提供,可帮每个新加入的用户建立和用户同名的group,要达到这个目的,不能添加-n选项。

为了方便查看,我们用表格的方式把useradd可使用的参数选项展现给大家如下所示:
|useradd 参数选项|注释说明(特殊颜色的需要掌握)|
|--|--|
|-c comment|新账号password档的说明栏|
|-d home_dir|新账号每次登入时所使用的home_dir.预设值为default_home内login名称,并当成登入时目录名称|
|-e expire_date|账号终止日期。日期的指定格式为MM/DD/YY或者YYYY-MM-DD|
|-f inactive_day|账号过期几日后永久停权。当值为0时账号则立刻被停权。而当值为-1时则关闭此功能,预设值-1|
|-g initial_group|group 名称以数字来作为用户登入起始用户组(group)。用户组名须为系统现有存在的名称。用户组数字也须为现有存在的用户组,预设的用户组数字为1.|
|-G group,[...]|定义此用户为多个不同groups的成员,每个用户组使用“,”逗号分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。|
|-m|用户目录如不存在则自动建立。|
|-M|不建立用户家目录,优先于/etc/login.defs文件的设定。一般创虚拟用户时不建立家目录,部署服务时需要创建虚拟用户。|
|-n|默认情况用户的用户组与用户的名称会相同。如果命令加了-n参数,就不会生成和用户同名的用户组了。|
|-r| 此参数是用来建立系统账号。|
|-s shell|用户登入后使用的shell名称。默认值不填写,这样系统会帮你指定预设的登入shell(根据/etc/default/useradd预设的值)。cat /etc/shells系统支持的shell|
|-u uid|用户的ID值。这个值必须是唯一的,除非用-o选项。数字不可为负值|

 

示例1:useradd -c,-u,-G,-s,-d,-m多个参数组合例子,自定义用户家目录。

技术分享

示例2:新建用户默认的账号终止日期

技术分享

示例3:添加用户时的默认shell类型/bin/bash改为/bin/sh

技术分享
[root@chensiqi1 ~]# cat /etc/shells #查看当前系统支持的shell种类 /bin/sh/bin/bash/sbin/nologin/bin/dash/bin/tcsh/bin/csh[root@chensiqi1 ~]# grep SHELL /etc/default/useradd #查看当前默认的shell配置SHELL=/bin/bash[root@chensiqi1 ~]# useradd -D -s /bin/sh  #修改为/bin/sh[root@chensiqi1 ~]# grep SHELL /etc/default/useradd #查看修改结果SHELL=/bin/sh #修改成功
View Code

特别提示,这里仅更改了配置文件的默认值,仅对之后建立的新用户生效,和老用户无关

注意了,这里我更改shell类型之后,useradd新增用户时发现登陆,会出现如下登陆故障!

-bash-4.1$-bash-4.1$

  

Linux之用户管理--初级上