用户和组管理


用户组管理

用户组管理

1. 用户组文件 /etc/group

[root@localhost ~]# tail -n3 /etc/group   //查看/etc/group下最后三行的数据    
testgroup❌1001:
user2❌1002:
grp1❌1003:

说明: 输出的结果与 /etc/passwd 的前三行相同。请参照前一张的博文 /etc/passwd 的前三行。

2. 用户备份说明

  • 输入完命令,别回车,用 Tab 补全,会显示以下效果
[root@localhost ~]# ls /etc/shadow  //密码配置文件
shadow   shadow-           
[root@localhost ~]# ls /etc/passwd  //用户配置文件
passwd   passwd-  
[root@localhost ~]# ls /etc/group  //用户组文件
group   group-  
[root@localhost ~]# ls /etc/gshadow  //用户组密码配置文件
gshadow   gshadow-  

说明: 这里的 group-,passwd-, 代表该文件的备份文件,如果删除了用户或该文件,用其恢复。

3. 新增和删除用户组

  1. 命令语法
    groupadd [-g GID] groupname

  2. 命令描述
    新增用户组

  3. 命令选项
    -g 自定义 gid。如果不加 -g 选项,则按照系统默认的 gid 创建组。跟 uid 一样,gid 也是从 1000 开始的。

#### 命令示例

  • 创建用户组
[root@localhost ~]# groupadd grpp1      //创建用户组
[root@localhost ~]# tail -n1 /etc/group      //查看用户组文件(group)的最后一行。(默认情况下每创建用户组,会在group文件的最后一行添加一行数据)。
grpp1❌1004:     //参照/etc/passwd的前三行解释
  • 在创建用户组的同时,自定义 gid(gid 必须在 1000 以上,1000 以内的是系统用户组)
[root@localhost ~]# groupadd -g 6666 grpp2
[root@localhost ~]# tail -n1 /etc/group
grpp2❌6666:
  • 删除用户组(groupdel)
[root@localhost ~]# groupdel grpp2
[root@localhost ~]# tail -n3 /etc/group
user2❌1002:
grp1❌1003:
grpp1❌1004:

从代码中可以看出,grpp2 已经被删除了。

注意: 当我们删除用户组的时候,前提是用户组里没有用户。


用户管理

1. 增加用户

  1. 命令语法
    useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]

  2. 命令描述
    添加用户

  3. 命令选项
    -u 表示自定义 UID。
    -g 表示使新增用户属于已经存在的某个组,后面可以跟组 id,也可以跟组名。
    -d 表示自定义用户的家目录
    -M 表示不建议家目录。
    -s 表示自定义 shell。

#### 命令示例

  • 创建用户
[root@localhost ~]# tail -n2 /etc/passwd   
user2❌1001:1002::/home/user2:/bin/bash   
dd1❌1002:1004::/home/dd1:/bin/bash  
  • 创建用户的同时自定义 uid, 自定义用户组(grp1)
[root@localhost ~]# tail -n 3 /etc/group   
user2❌1002:   
grp1❌1003:   
dd1❌1004:   
[root@localhost ~]# useradd -u 1005 -g grp1 user4     //-u 1005 指定uid为1005,-g grp1 指定us   er4用户属于grp1用户组,user4 用户   
[root@localhost ~]# tail -n3 /etc/passwd   
user2❌1001:1002::/home/user2:/bin/bash   
dd1❌1002:1004::/home/dd1:/bin/bash   
user4❌1005:1003::/home/user4:/bin/bash    //用户user4和grp1用户组的gid相同。   
  • 添加用户的同时,指定 uid(-u), 指定用户组 (-g),指定家目录(-d),指定 shell(-s)。
[root@localhost ~]# ls /home   
dd1  user1  user2  user4   
[root@localhost ~]# useradd -u 1010 -g grp1 -d /home/dd1 -s /sbin/nologin user5  //创建user5   的uid为1010,用户组为grp1,家目录为/home/dd1,shell为sbin/nlogin   
[root@localhost ~]# tail -n3 /etc/passwd   
dd1❌1002:1004::/home/dd1:/bin/bash   
user4❌1005:1003::/home/user4:/bin/bash   
user5❌1010:1003::/home/dd1:/sbin/nologin    // /sbin/nologin 这个shell意思是不让这用户登录。   
  • 创建用户的同时,不建立用户的家目录
[root@localhost ~]# useradd -M user11   
[root@localhost ~]# tail -n3 /etc/passwd   
user4❌1005:1003::/home/user4:/bin/bash   
user5❌1010:1003::/home/dd1:/sbin/nologin   
user11❌1011:1011::/home/user11:/bin/bash  //可以看出家目录为/home/user11,这个家目录只是没有创建   
[root@localhost ~]# ls /home/   
dd1  user1  user2  user4  //可以看出没有user11   
  • 当我们创建一个用户组并指定 gid 为 1010 的时候,那么当我们创建用户的时候用户的用户的 uid 会自增。
[root@localhost ~]# groupadd -g 1010 grp10   
[root@localhost ~]# useradd -g grp10 user12    
[root@localhost ~]# useradd user13   
[root@localhost ~]# tail -n5 /etc/passwd   
user4❌1005:1003::/home/user4:/bin/bash    
user5❌1010:1003::/home/dd1:/sbin/nologin   
user11❌1011:1011::/home/user11:/bin/bash   
user12❌1012:1010::/home/user12:/bin/bash   
user13❌1013:1013::/home/user13:/bin/bash    

2. 删除用户

  • 删除用户。当我们删除用户的时候,默认不会删除用户的家目录
[root@localhost ~]# userdel user13    
[root@localhost ~]# tail -n5 /etc/passwd    
dd1❌1002:1004::/home/dd1:/bin/bash    
user4❌1005:1003::/home/user4:/bin/bash    
user5❌1010:1003::/home/dd1:/sbin/nologin     
user11❌1011:1011::/home/user11:/bin/bash    
user12❌1012:1010::/home/user12:/bin/bash    
[root@localhost ~]# ls /home    
dd1  user1  user12  user13  user14  user2  user4

代码说明: 可以看出当我们删除 user13 的时候,/etc/passwd 的 user13 的数据被删除了, 但是它的家目录 user13 默认没有删除,需要自己删除 user13 的家目录。

  • 删除用户的同时删除用户的家目录
[root@localhost ~]# userdel -r user12  //使用-r选项   
[root@localhost ~]# tail -n5 /etc/passwd    
user2❌1001:1002::/home/user2:/bin/bash    
dd1❌1002:1004::/home/dd1:/bin/bash    
user4❌1005:1003::/home/user4:/bin/bash    
user5❌1010:1003::/home/dd1:/sbin/nologin    
user11❌1011:1011::/home/user11:/bin/bash     
[root@localhost ~]# ls /home     
dd1  user1  user14  user2  user4


usermod 命令,mkpasswd 命令及密码管理

一,usermod 命令

  1. 命令语法
    usermod [选项] [username]

  2. 命令描述
    usermod 命令用于修改用户的基本信息。
    usermod 命令不允许你改变正在线上的使用者帐号名称。
    当 usermod 命令用来改变 user id,必须确认这名 user 没在电脑上执行任何程序。

  3. 命令选项:
    -u:更改用户 uid
    -g:更改所属组(跟组名)
    -d:更改用户家目录
    -s:更改用户 shell
    -G: 让一个用户同时属于多个组
    注: 一个用户可以属于多个组,但是 gid 只有一个,除了 gid 之外的组叫做扩展组

二,用户密码管理

  • 设置密码规则:

  • 长度大于 10 个字符;

  • 密码中包含大小写字母、数字、以及特殊符号 *,&,% 等;
  • 不规则性 (不要出现 happy,love,linux,77585200,1232111 等单词或者数字);
  • 密码中不要带有自己的名字、公司名、电话、生日等等;
  1. 命令语法
    passwd [选项] [username]

  2. 命令描述
    为用户设定密码

  3. 命令选项
    -l:锁定某用户密码
    -u:解锁某用户密码
    -d:删除密码,仅有系统管理者才有此权限

  4. 说明:

  • 为用户设置密码时,使用该命令若后面什么都不加用户名字,则是为自己设定密码。
  • 如果你登录的是 root 账户,后面可以跟普通用户的名字,意思是修改指定账户的密码。
  • 需要注意的是: 只有 root 用户才可以更改其他用户密码,普通用户只能更改自己的密码。

三,mkpasswd 命令

  • 说明: mkpasswd 是 make password 的简写,用于生成密码,使用前需要安装一个包“expect”,#yum install -y expect
  1. 命令语法
    mkpasswd [选项]

  2. 命令描述
    用于生成密码

  3. 命令选项
    -l:指定密码长度
    -s:special 的简写,指定特殊字符个数
    -d:指定数字的个数
    注: mkpasswd 命令配合 echo、passwd 命令以及管道符“|”使用更加方便。

  4. 命令示例:
    eg: 一条命令修改用户密码(两种方法)

#echo -e "yourpasswd \n yourpasswd" | passwd user   //echo -e可以使用换行符\n,这样相当于回车了一次  
#echo "yourpasswd" | passwd --stdin user     //passwd --stdin直接设定密码   


id 命令查看用户 ID 和组 ID,su 切换当前用户身份详解

一,命令 id

  1. 命令语法
    id [-gGnru][–help][–version][用户名称]

  2. 命令描述
    id 命令可以显示真实有效的用户 ID(UID) 和组 ID(GID)。UID 是对一个用户的单一身份标识。组 ID(GID)则对应多个 UID。
    当我们想知道某个用户的 UID 和 GID 时 id 命令是非常有用的。一些程序可能需要 UID/GID 来运行。

  3. 命令选项
    -g 或–group   显示用户所属群组的 ID。
    -G 或–groups 显示用户所属附加群组的 ID。
    -n 或–name   显示用户,所属群组或附加群组的名称。
    -r 或–real   显示实际 ID。
    -u 或–user   显示用户 ID。

二,命令 su

  1. 命令语法
    su [-] username // 当我们使用 su 命令的时候最好加上 - ,这样才会彻底切换到该用户的家目录下(使用 pwd 查看当前目录)。

  2. 命令描述
    用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

  3. 命令选项
    -c 在不登录该用户的情况下,以该用户的身份去执行一条指令。
    -s 指定要执行的 shell;

  4. 命令示例

**-c 选项 ,在不登录 root 用户的状态下,在 user1 用户的 /tmp/ 下创建 dl.2222 **

[root@localhost ~]# su -  -c "touch /tmp/dl.2222" user1  //在不登录root用户的状态下,在user1用户的/tmp/下创建dl.2222        
[root@localhost ~]# su - user1 //登陆到user1
上一次登录:三 11月  1 15:27:01 CST 2017pts/0 上
[user1@localhost ~]$ ls -lt /tmp | head     
总用量 8        
-rw-rw-r--. 1 user1 user1   0 11月  1 15:27 dl.2222     //创建dl.2222成功       
drwx------. 3 root  root   17 11月  1 15:04 systemd-private-38e9f4c69cbc4912b43834c7fee705fd-vmtoolsd.service-eAIxdE        
drwx------. 3 root  root   17 10月 31 08:23 systemd-private-b72f816050104c8285beeb40a7064731-vmtoolsd.service-Zzhdk1      
-rw-r--r--. 1 user1 user1  25 10月 26 20:42 dll     
drwxr-xr-x. 3 root  root   30 10月 24 11:03 666     
drw-r--rw-. 2 root  root   19 10月 23 21:27 DL    
-rwx------. 1 root  root  836 10月 23 06:19 ks-script-aokVOX     
-rw-------. 1 root  root    0 10月 23 06:11 yum.log      


sudo 命令用其他身份来执行命令,限制 root 远程登录详解

一,命令 sudo

  1. 命令语法
    sudo(选项)(参数)

  2. 命令描述
    sudo 命令用来以其他身份来执行命令,预设的身份为 root。
    用户使用 sudo 时,必须先输入密码,之后有 5 分钟的有效期限,超过期限则必须重新输入密码。

  3. 命令选项
    -b:在后台执行指令;
    -H:将 HOME 环境变量设为新身份的 HOME 环境变量;
    -k:结束密码的有效期限,也就是下次再执行 sudo 时便需要输入密码;
    -l:列出目前用户可执行与无法执行的指令;
    -p:改变询问密码的提示符号;
    -s:执行指定的 shell;
    -u< 用户 >:以指定的用户作为新的身份。若不加上此参数,则预设以 root 作为新的身份;
    -v:延长密码有效期限 5 分钟;

  4. 命令示例

配置 sudo 必须通过编辑 /etc/sudoers 文件,而且只有超级用户才可以修改它,还必须使用 visudo 编辑。之所以使用 visudo 有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用 visudo 来检查一下语法。

设置 sudo 方法

  1. 在命令行输入 #visudo //visudo默认的是在vi里打开sudo配置文件。
  2. 进入配置文件大概在 90 列左右可以看到下面的命令 (小技巧: 在 vi 编辑器里使用 set nu // 查看行数)
90 ## Allow root to run any commands anywhere   // 翻译: 允许root用户在任何地方运行所有的命令    
91 root    ALL=(ALL)       ALL     
92 user1   ALL=(ALL)       /usr/bin/ls, /usr/bin/mv, /usr/bin/cat   //自己编写的    

命令说明:

  1. 92 列自己编写的,这条命令的作用是: 让 user 用户拥有 sudo 特权。

  2. 命令从左到右,第一段 user1 为一个用户,指定让哪个用户有 sudo 特权;

  3. 第二段 ALL=(ALL) 比较难理解,左边的 ALL 指的是所有的主机,右边的 ALL 指的是获取哪个用户的身份,

  4. 第二段几乎都不用配置;

  5. 第三段设定可以使用 sudo 的命令有哪些,这里我选择的是 ls,mv,cat 命令,注意这里编辑的时候要写绝对路径。也可以写 ALL 表示可以使用全部命令。也可以在第三段的最前面加上 #NOPASSWD: ,这样在使用 sudo 的时候就不用输入密码了。

  6. 编辑完成之后,#wq 保存退出。

  7. 当你在 visudo 中编辑错误的时候 wq 后会提醒你例如:

visudo: >>>/etc/sudoers: syntax error 在行 92 附近 <<

此时我们有三种选择:键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择 Q,那么 sudo 将不会再运行,直到错误被纠正。

上面步骤正常的情况下,切换到 user1 的用户下,使用 sudo 命令# sudo /usr/bin/ls /root
此条命令的意思是 在 user1 的用户下用 sudo 权限 ls 查看 /root 目录,当然可以使用 cat,mv 命令。