一、用户配置文件和密码配置文件

  1. /etc/passwd #这是用户的配置文件,一行代表一个用户,每一行用":"分隔为7段,内容如下: 第一段:用户名
    第二段:表示用户的密码,所有行都是x 第三段:表示uid, 第四段:表示gid 第五段:很多都是空的,用户的注释信息 第六段:用户的家目录 第七段:用户的shell,一个用户能登陆,那么需要交互的信息 有一些是/sbin/nologin 不能登陆。
  2. etc/shadow #这是用户存放密码的文件,是和用户配置文件对应的,每一行用":"分隔为9段 第一段:用户名 第二段:密码,密码都是经过加密的,两个!!表示未设置密码 第三段:最近更改密码的时间,是一个天数,17110,从1970年1月1日开始到你更改密码经过多少天 第四段:要过多少天才可以更改密码,0是没有限制 第五段:密码多少天后到期,必须要更改密码 第六段:密码到期前多少天提醒 第七段:账号的失效期限,如果密码到了失效期,那么在多少天内就被锁定 第八段:账号的生命周期,从1970年1月1日开始有多少天,账号在这个日期之前可以使用 第九段:没有实际意义。 二、用户组管理
  3. /etc/group #存放用户组的配置文件
  4. groupadd 可以用来增加用户组
  5. [root@localhost ~]# groupadd zx1 #增加一个用户组zx1 2 .[root@localhost ~]# tail -n1 /etc/group zx1:x:1002: #可以在用户组配置文件里面看到zx1已经存在 groupadd:新建组 [root@smartwy ~]# groupadd [OPTIONS] groupname [OPTIONS]选项参数如下:   -g:指定GID   -r:创建系统组
  6. groupadd -g 增加用户组的同时指定组ID
  7. [root@localhost ~]# groupadd -g 1003 zx2 #增加一个zx2组,指定组ID为1003
  8. [root@localhost ~]# tail -n3 /etc/group slocate:x:21: zx1:x:1002: zx2:x:1003: #可以zx2看到组ID为1003
  9. groupdel 删除用户组,但是如果用户组里有用户那么就不能删除
  10. [root@localhost ~]# groupdel zx2 #删除用户组zx2
  11. [root@localhost ~]# tail -n3 /etc/group lx02:x:1001: slocate:x:21: zx1:x:1002: #可以看到zx2已经没有了
  12. [root@localhost ~]# groupdel lx02 #删除用户组lx02 groupdel:不能移除用户“lx02”的主组 #用户组lx02里面有用户lx02,不能删除
  13. 每个配置文件系统都会进行备份,就是“-”结束的文件,如果不小心删除,可以使用这个文件进行恢复 四 用户管理相关文件 1 用户的家目录 普通用户 :/home/用户名/,所有者和所属组都是此用户,权限是700 超级用户:/root/,所有者和所属组都是root,权限是550 2 用户的邮箱 /var/spool/mail/用户名/ 比如我们创建一个用户fuqiang,然后到这个路径下查看,就会发现这个路径下自动生成了这个新用户的邮箱 3 用户模板目录 /etc/skel/ 我们看下这个目录

三、用户管理 useradd:新建用户 [root@smartwy ~]# useradd [OPTIONS] username [OPTIONS]选项参数如下: -u:指定UID -g:指定GID(此组需存在) -G:指定用户附加组,多个附加组需使用逗号分隔开(此组需存在) -c:指定注释信息 -d:指定用户家目录 -s:指定shell,可在/etc/shells文件里查看shell可用种类 -r:创建系统用户 -D:修改用户默认选项(修改的是/etc/default/useradd中选项)

  1. useradd 添加用户,自己添加的用户UID都是从1000开始往后排
  2. 默认配置 /etc/default/useradd /etc/login.defs 2.1. [root@localhost ~]# useradd lx03 #增加一个用户lx03
  3. [root@localhost ~]# tail -n4 /etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin lx01:x:1000:1000::/home/lx01:/bin/bash lx02:x:1001:1001::/home/lx02:/bin/bash lx03:x:1002:1003::/home/lx03:/bin/bash #lx03的UID为1002
  4. useradd -u 增加用户的同时指定UID
  5. [root@localhost ~]# useradd -u 1004 lx04 #增加一个用户lx04 ,并指定UID为1004
  6. [root@localhost ~]# tail -n4 /etc/passwd lx01:x:1000:1000::/home/lx01:/bin/bash lx02:x:1001:1001::/home/lx02:/bin/bash lx03:x:1002:1003::/home/lx03:/bin/bash lx04:x:1004:1004::/home/lx04:/bin/bash #可以看到lx04的UID为1004
  7. useradd -u -g 增加用户的同时指定UID和GID
  8. [root@localhost ~]# useradd -u 1005 -g zx1 lx05 # 增加一个用户lx05 ,指定UID1005,属于zx1这个组
  9. [root@localhost ~]# tail -n4 /etc/passwd lx02:x:1001:1001::/home/lx02:/bin/bash lx03:x:1002:1003::/home/lx03:/bin/bash lx04:x:1004:1004::/home/lx04:/bin/bash lx05:x:1005:1002::/home/lx05:/bin/bash #可以看到lx05的uid为1005,gid为1002,1002就是zx1 4.useradd -d -s -d指定用户的家目录,-s指定用户登陆的bash
  10. [root@localhost ~]# useradd -u 1006 -g 1002 -d /home/lkh -s /sbin/nologin sdd #添加一个用户sdd ,指定uid1006,gid1002,家目录/home/lkh/,bash为nologin
  11. [root@localhost ~]# tail -n4 /etc/passwd lx03:x:1002:1003::/home/lx03:/bin/bash lx04:x:1004:1004::/home/lx04:/bin/bash lx05:x:1005:1002::/home/lx05:/bin/bash sdd:x:1006:1002::/home/lkh:/sbin/nologin #可以看到sdd的家目录为/home/lkh bash为nologin
  12. [root@localhost ~]# ls /home/ lkh lx01 lx02 lx03 lx04 lx05 #可以看到home下有lkh这个目录
  13. useradd -M 创建用户,但是不创建家目录,
  14. [root@localhost ~]# useradd -M xaa # 创建一个用户xaa
  15. [root@localhost ~]# ls /home/ lkh lx01 lx02 lx03 lx04 lx05 #/home/下没有xaa的家目录 ,实际上xaa是有家目录的,但是没有创建,并不是说没有。
  16. userdel 删除用户
  17. [root@localhost ~]# userdel lx05 #删除用户lx05
  18. [root@localhost ~]# tail -n4 /etc/passwd lx02:x:1001:1001::/home/lx02:/bin/bash lx03:x:1002:1003::/home/lx03:/bin/bash lx04:x:1004:1004::/home/lx04:/bin/bash sdd:x:1006:1002::/home/lkh:/sbin/nologin #用户lx05已经不存在
  19. userdel -r 删除用户的同时删除用户的家目录
  20. [root@localhost ~]# userdel -r lx04 #删除用户lx04
  21. [root@localhost ~]# ls /home/ #可以看到lx04 的家目录一起被删除 lkh lx01 lx02 lx03 passwd:添加密码 [root@smartwy ~]# passwd [OPTIONS] username [OPTIONS]选项参数如下:   -l:锁定指定用户密码   -u:解锁指定用户密码   -d:清除指定用户密码   -e:终止用户密码   -i:非活动期限   -n:指定密码最短试用期   -x:密码最长使用期限   -w:提前多少天警告变更密码   ``–stdin:echo “12345678” | passwd –stdin username,将12345678设定为username的密码,一般用于批量新建用户初始密码 chage -d 0 user1 把user1的修改时间设置为0这样用户每次登陆都要修改 用户组管理 /etc/group group文件以”:”将信息分为4字段,各字段意义如下: 1字段:组名称 2字段:用户组密码,因安全问题,改放到/etc/gshadow 3字段:GID 4字段:以此组为附加组的用户名称 /etc/gshadow gshadow文件以”:”将信息分为4字段,各字段意义如下: 1字段:组名称 2字段:用户组密码,该用户组暂未设置密码 3字段:用户组管理者,缺省代表没有管理者 4字段:组内用户列表,因为这是用户的私有组所以没有其他用户 六 用户组管理命令 1 添加用户组groupadd 选项 组名 -g GID 指定组ID 我们先添加一个fuqianggroup的组 groupadd -g 600 fuqianggroup 然后到/etc/group下看看 可以看到这个组已经添加成功了 2 修改用户组groupmod 选项 组名 -g GID 指定组的GID -n 修改组名 比如我想把刚刚创建的fuqianggroup组修改为fqgroup 再来看下/etc/group 发现修改成功了 3 删除用户组groupdel 组名 注意:这样只能删除附加组,如果想删除初始组,必须把初始组的用户也删掉才行。 4 把用户填加到组里或者从组中删除 gpasswd 选项 组名 -a 用户名:把用户加入组 -d 用户名:把用户从组中删除 我想把fuqiang这个用户添加到刚才的fqgroup中 gpasswd -a fuqiang fqgroup 再把它删除 gpasswd -d fuqiang fqgroup usermod命令 usermod(选项)(参数) -c<备注>:修改用户帐号的备注文字; -d<登入目录>:修改用户登入时的目录; -e<有效期限>:修改帐号的有效期限; -f<缓冲天数>:修改在密码过期后多少天即关闭该帐号; -g<群组>:修改用户所属的群组; -G<群组>;修改用户所属的附加群组; -l<帐号名称>:修改用户帐号名称; -L:锁定用户密码,使密码无效; -s<shell>:修改用户登入后所使用的shell; -u<uid>:修改用户ID; -U:解除密码锁定。 登录名:指定要修改信息的用户登录名。 实例 将newuser2添加到组staff中: usermod -G staff newuser2 修改newuser的用户名为newuser1: usermod -l newuser1 newuser 锁定账号newuser1: usermod -L newuser1 解除对newuser1的锁定: usermod -U newuser1 mkpasswd命令 这个命令是随机生成 密码的一个工具, 如果没有这个命令,请安装相应的包。 yum -y install expect mkpasswd 的使用 常用的选项, -l 指定 长度 -d 指定 数字的个数 -c 指定 小写字符个数 -C 指定大写字符个数 -s 指定特殊字符个数 usage: mkpasswd [args] [user] where arguments are: -l # (length of password, default = 7) 指定密码的长度,默认是7位数 -d # (min # of digits, default = 2) 指定密码中数字最少位数,默认是2位 -c # (min # of lowercase chars, default = 2) 指定密码中小写字母最少位数,默认是2位 -C # (min # of uppercase chars, default = 2) 指定密码中大写字母最少位数,默认是2位 -s # (min # of special chars, default = 1) 指定密码中特殊字符最少位数,默认是1位 -v (verbose, show passwd interaction) 这个参数在实验的时候报错,具体不知道。

比如举个例子, 长度 15 位,数字至少 3位, 小写字母至少4 位, 大写字母至少4 位, 特殊字符 至少 2位 [root@localhost ~]# mkpasswd -l 15 -d 3 -c 4 -C 4 -s 2 M50=xniV_Y4gBht CZ7@lBYa)1gept6 7RaQ7c"gwvX<s6C jAYW8dGw>pe^42j su命令 1.命令作用 su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。 2.使用方式 su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 3.参数说明 -f , –fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。 -l , –login:加了这个参数之后,就好像是重新登陆一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并 且工作目录也会改变。如果没有指定USER,缺省情况是root。 -m, -p ,–preserve-environment:执行su时不改变环境变数。 -c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。 –help 显示说明文件 –version 显示版本资讯 USER:欲变更的使用者账号, ARG: 传入新的Shell参数。 4.例子 su -c ls root 变更帐号为 root 并在执行 ls 指令后退出变回原使用者。 su [用户名] a>在root用户下, 输入 su 普通用户. 则切换至普通用户, 从root切换到变通用户不需要密码 b>在普通用户下, 输入 su [用户名] 提示 password: 输入用户的PASSWORD, 则切换至该用户 扩展阅读一:Linux下 su命令与su - 命令有什么区别? su 是切换到其他用户,但是不切换环境变量(比如说那些export命令查看一下,就知道两个命令的区别了) su - 是完整的切换到一个用户环境 所以建议大家切换用户的时候,尽量使用 su - linuxso 这样 否则可能发现某些命令执行不了

扩展阅读二:su和sudo的区别

由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和 管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。 通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su; sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;

sudo -i sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。

su : 切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为root账户,密码也为超级账户的密码。没有时间限制。

sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。 其实,还有几个类似的用法: sudo /bin/bash : 这个命令也会切换到root的bash下,但不能完全拥有root的所有环境变量,比如PATH,可以拥有root用户的权限。这个命令和 sudo -s 是等同的。 sudo -s : 如上 sudo su : 这个命令,也是登录到了root,但是并没有切换root的环境变量,比如PATH。 sudo su - : 这个命令,纯粹的切换到root环境下,可以这样理解,先是切换到了root身份,然后又以root身份执行了 su - ,这个时候跟使用root登录没有什么区别。这个结果貌似跟sudo -i 的效果是一样的,但是也有不同,sudo 只是临时拥有了root的权限,而su则是使用root账号登录了linux系统。

所以,我们再来总结一下: sudo su - 约等于 sudo -i sudo -s 完全等于 sudo /bin/bash 约等于 sudo su sudo 终究被一个"临时权限的帽子"扣住,不能等价于纯粹的登录到系统里。