Linux添加用户
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux添加⽤户
添加⽤户
useradd或者adduser。
其实adduser是useradd的⼀个软连接。
以useradd为例,其⽤法为 useradd [option] USERNAME
1 [root@compute ~]# ll `which adduser`
2 lrwxrwxrwx. 1 root root 7 5⽉ 26 14:21 /usr/sbin/adduser -> useradd
-u 指定新添加⽤户的UID,不过根据规定,普通⽤户的UID必须⼤于499且不能和已存在的UID重复。
1 [root@compute ~]# useradd -u 1010 user1
2 [root@compute ~]# tail -1 /etc/passwd
3 user1:x:1010:1010::/home/user1:/bin/bash
-g 指定新添加⽤户的基本组,可以使⽤GID也可以使⽤组名来为其指明基本组(可以⽤id命令来查看⽤户信息)
1 [root@compute ~]# useradd -g root user2
2 [root@compute ~]# id user2
3 uid=1011(user2) gid=0(root) 组=0(root)
-G 指定新添加的⽤户的附加组,附加组可以有多个,多个附加组之间⽤逗号隔开。
1 [root@compute ~]# useradd -G user1,root user3
2 [root@compute ~]# id user3
3 uid=1012(user3) gid=1012(user3) 组=1012(user3),0(root),1010(user1)
-d 为新添加的⽤户指定家⽬录,默认情况下家⽬录是/home下的与⽤户名同名的⽬录。
-M 不为新⽤户创建家⽬录。
-s 为新添加的⽤户指定默认的shell。
(系统中有⼀个nologin的shell可以禁⽌某账户登⼊)
1 [root@compute ~]# useradd -s /sbin/nologin user4
2 [root@compute ~]# su user4
3 This account is currently not available.
可以使⽤ echo $SHELL 来查看当前⽤户的shell
-r 添加新⽤户为系统⽤户,系统⽤户的UID在1-499之间,⼀般不能登⼊,没有家⽬录。
注:该命令添加的⽤户的部分默认参数(⽐如⽤户的默认shell)在/etc/default/useradd⽂件中。
查看⽤户信息
⽤id命令可以查看⽤户信息,⽤法:id [option] [USERNAME],不指定⽤户名时默认⽤户为当前⽤户。
-u 查看UID
-g 查看基本组的GID
-G 查看所有组的GIO
-n 和上⾯的选项组合使⽤,⽤于显⽰名称,⽽⾮id号
1 [root@compute ~]# id -u user1
2 1010
3 [root@compute ~]# id -un user1
4 user1
5 [root@compute ~]# id -G user3
6 1012 0 1010
7 [root@compute ~]# id -Gn user3
8 user3 root user1
finger命令也可以查看⽤户相关信息
1 [root@compute ~]# finger user1
2 Login: user1 Name:
3 Directory: /home/user1 Shell: /bin/bash
4 Never logged in.
5 No mail.
6 No Plan.
删除⽤户
使⽤userdel命令来删除⽤户,不过值得注意的是userdel命令默认情况下是不会删除⽤户的家⽬录。
userdel的⽤法:userdel [option] USERNAME
-r 同时删除⽤户的家⽬录。
1 [root@compute ~]# ls /home
2 boost compute EasyDrcom libpcap lost+found user1 user2 user
3 user4
3 [root@compute ~]# userdel user1
4 userdel:组“user1”没有移除,因为它包含其它成员。
5 [root@compute ~]# userdel -r user2
6 [root@compute ~]# ls /home
7 boost compute EasyDrcom libpcap lost+found user1 user3 user4
修该⽤户信息
使⽤usermod来修改⽤户的账户信息,其⽤法同useradd。
具体实例如下:
1 [root@compute ~]# id user3
2 uid=1012(user3) gid=1012(user3) 组=1012(user3),0(root),1010(user1)
3 [root@compute ~]# usermod -u 505 user3
4 [root@compute ~]# id user3
5 uid=505(user3) gid=1012(user3) 组=1012(user3),0(root),1010(user1)
6 [root@compute ~]# finger user3
7 Login: user3 Name:
8 Directory: /home/user3 Shell: /bin/bash
9 Never logged in.
10 No mail.
11 No Plan.
12 [root@compute ~]# usermod -g 0 -s /bin/tcsh user3 #这⾥该的基本组必须事先存在
13 [root@compute ~]# !id
14 id user3
15 uid=505(user3) gid=0(root) 组=0(root),1010(user1)
16 [root@compute ~]# !fing
17 finger user3
18 Login: user3 Name:
19 Directory: /home/user3 Shell: /bin/tcsh
20 Never logged in.
21 No mail.
22 No Plan.
-l 参数⽤于修改⽤户名
1 [root@compute ~]# usermod -l u3 user3
2 [root@compute ~]# id u3
3 uid=505(u3) gid=0(root) 组=0(root),1010(user1)
注:如果使⽤-G为⽤户修改附加组的话,默认情况下会覆盖原有的附加组,如果只想追加新的附加组可以使⽤ -aG 其中a表⽰追加。
使⽤ -d 修改⽤户家⽬录的时候最好⽤再配合 -m 使⽤,其意思是修改家⽬录的同时把原来家⽬录下的⽂件复制⼀份到⽬的家⽬录。
修改⽤户的登⼊shell还可以使⽤ chsh (change shell)命令。
其⽤法为 chsh USERNAME
可以⽤pwck来检查⽤户账号的完整性。
修改⽤户密码
使⽤passwd命令来修改⽤户的密码,⽤法:passwd [USERNAME]
对于普通⽤户来说,只能使⽤passwd命令,⽤来修改⾃⼰的密码。
对于管理员来说,不仅可以使⽤passwd来修改⾃⼰的密码,还可以使⽤passwd USERNAME 命令来修改别⼈的密码。
passwd可以使⽤ --stdin 参数来指明从标准输⼊来获取密码。
1 [root@compute ~]# passwd user3
2 更改⽤户 user
3 的密码。
3 新的密码:
4 ⽆效的密码:密码未通过字典检查 - 过于简单化/系统化
5 重新输⼊新的密码:
6 passwd:所有的⾝份验证令牌已经成功更新。
7 [root@compute ~]# echo "123456789" | passwd user3 --stdin
8 更改⽤户 user3 的密码。
9 passwd:所有的⾝份验证令牌已经成功更新。
-d 参数可以删除⽤户的密码。
组的创建
组的创建使⽤groupadd命令,可以使⽤ -g 指定GID,-r表明改组为系统组。
具体⽤法和useradd类似,以下关于组的操作命令的⽤法均可参考关于⽤户操作的命令的⽤法。
组信息修改
groupmod 命令⽤于修改组信息,-g 修改GID,-n 修改组名。
组的删除
groupdel 命令⽤于删除⼀个组
组添加密码
使⽤ gpasswd 命令⽤于修改组密码。
组密码主要⽤于临时改变⽤户所属的组。
⽐如下⾯的代码中,user3⽤户临时使⽤了user4组创建了⼀个b.txt⽂件
1 [root@compute ~]# usermod -l user3 u3
2 [root@compute ~]# gpasswd user4
3 正在修改 user
4 组的密码
4 新密码:
5 请重新输⼊新密码:
6 [root@compute ~]# su - user3
7 上⼀次登录:五 7⽉ 28 06:29:18 CST 2017pts/1 上
8 [user3@compute ~]$ touch a.txt
9 [user3@compute ~]$ id
10 uid=505(user3) gid=0(root) 组=0(root),1010(user1) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
11 [user3@compute ~]$ ll
12 总⽤量 0
13 -rw-r--r--. 1 user3 root 0 7⽉ 28 06:30 a.txt
14 [user3@compute ~]$ newgrp user4
15 密码:
16 [user3@compute ~]$ touch b.txt
17 [user3@compute ~]$ id
18 uid=505(user3) gid=1013(user4) 组=1013(user4),0(root),1010(user1) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
19 [user3@compute ~]$ ll
20 总⽤量 0
21 -rw-r--r--. 1 user3 root 0 7⽉ 28 06:30 a.txt
22 -rw-r--r--. 1 user3 user4 0 7⽉ 28 06:31 b.txt
23 [user3@compute ~]$ exit
24 exit
25 [user3@compute ~]$ id
26 uid=505(user3) gid=0(root) 组=0(root),1010(user1) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
27 [user3@compute ~]$ exit
28 logout
29 [root@compute ~]#
注:上⾯的newgrp⽤于临时切换基本组,当这个临时组⽤完要退出时使⽤exit命令。
⼿动创建⽤户
这部分需要了解linux保存⽤户的⼏个配置⽂件。
/etc/passwd —— 账号⽂件
/etc/shadow —— 密码⽂件
/etc/group—— 组信息⽂件
/etc/gshadow —— 组密码⽂件
/etc/skel —— ⽤户默认家⽬录的备份⽂件
1 [root@compute demo]# tail -1 /etc/passwd
2 user3:x:505:0::/home/user3:/bin/tcsh
passwd⽂件中的配置规则如下:
⽤户名:密码占位符:⽤户ID:组ID:⼀般的信息:家⽬录:默认登⼊shell
1 [root@compute demo]# tail -1 /etc/shadow
2 user3:$6$W58G6w9w$W7qYMrf5U9TF3yAfdqZhlluiiCgfd5eyDGaRbs0j5eVCGgisA8aEYGvmitpAraHC1MppdmiD9jGLgHWADQ3nK0:17374:0:99999:7:::
shadow⽂件的配置规则如下:
账号
加密的密码,注意前三个字符 &6& 代表着密码的加密⽅式,后⾯会⽤到。
最后⼀次修改密码的⽇期,该位是从1970年1⽉1号开始到上次密码修改的天数,0表⽰⽤户下⼀次登⼊需要改密码,空⽩表⽰密码年龄功能被禁⽤。
密码最⼩年龄,0或空⽩表⽰没有最⼩年龄。
密码最⼤年龄,空⽩表⽰没有密码最⼤年龄。
超过密码最⼤年龄还未改密码将进⼊密码警告时间段。
密码警告时间段,该阶段会提⽰⽤户修改密码,0或空⽩表⽰没有密码警告时间段,超过密码警告时间段将密码禁⽤期。
密码禁⽤期,该阶段会强制⽤户修改密码,不修改就⽆法登⼊。
空⽩表⽰没有禁⽤期,超过将进⼊账户过期期。
账户过期期,账户过期后该账户将⽆法登⼊,该位与上⾯的密码禁⽤期有所不同,密码禁⽤期超过后⽤户只要修改密码后就可以重新登⼊,⽽账户过期永远⽆法登⼊,除⾮管理员解封。
保留位,该字段保留未⽤。
group⽂件的配置规则如下:
[root@compute demo]# tail -1 /etc/group
user4:x:1013:
组名:密码占位符:组ID:以该组为额外组的组内⽤户
有上⾯这些基本知识后现在正式开始⼿动添加⽤户
⾸先添加账户:
1 [root@compute demo]# echo "user5:x:5000:5000::/home/user5:/bin/bash" >> /etc/passwd
2 [root@compute demo]# tail -1 !$
3 tail -1 /etc/passwd
4 user5:x:5000:5000::/home/user5:/bin/bash
添加账户密码(不同的Linux发⾏版系统使⽤的密码加密⽅式不同,加密⽅式的查看⽅式见上⾯红⾊字体,在我的电脑上为6号加密⽅式即SHA-512加密):
⽬前我还没找到能加密sha512(带salt)的加密⼯具,于是⾃⼰⽤c写了⼀个加密程序。
1 #define _XOPEN_SOURCE
2 #include <unistd.h>
3 #include <stdio.h>
4 #include <string.h>
5 int main()
6 {
7 char salt[20]={0};
8 char key[100]={0};
9 char tmp[20];
10 int id;
11 int length=0;
12 printf("please choose the encrypt algorithm:\n");
13 printf("1 : MD5\n"
14 "5 : SHA-256\n"
15 "6 : SHA-512\n");
16 scanf("%d",&id);
17 salt[0]='$';
18 salt[2]='$';
19 salt[1]=id+'0';
20
21 printf("please input salt(no more than 8 characters):");
22 scanf("%s",tmp);
23 length=strlen(tmp);
24 strcpy(salt+3, tmp);
25 salt[3+length]='$';
26
27 printf("please input the key:");
28 scanf("%s",key);
29
30 printf("%s\n",crypt(key, salt));
31 return 0;
32 }
编译命令:
[root@compute demo]# gcc encrypt.c -o encrypt -lcrypt
注:上⾯的encrypt.c为源⽂件,encrypt为输出程序,-lcrypt为⽤到的加密库。
现在可以⽤这个程序来⽣成密码了。
[root@compute demo]# ./encrypt
please choose the encrypt algorithm:
1 : MD5
5 : SHA-256
6 : SHA-512
6
please input salt(no more than 8 characters):1234abcd
please input the key:password
$6$1234abcd$RQ0et4pXYf990f./lJNcInZtANef5Mw0GSA0ftwDYKZEViukdnf9bM/PALLnGuSv91L/9bWBkFBQM4Os8CMYk/
这⾥我们运⽤⾃⼰写的加密⼯具⽣成了⼀个salt为1234abcd,密码为password的采⽤SHA-512加密的加密密码
$6$1234abcd$RQ0et4pXYf990f./lJNcInZtANef5Mw0GSA0ftwDYKZEViukdnf9bM/PALLnGuSv91L/9bWBkFBQM4Os8CMYk/ 。
1 [root@compute demo]# echo 'user5:$6$1234abcd$RQ0et4pXYf990f./lJNcInZtANef5Mw0GSA0ftwDYKZEViukdnf9bM/PALLnGuSv91L/9bWBkFBQM4Os8CMYk/:17374:0:99999:7:::' >> /etc/shadow
2 [root@compute demo]# tail -1 !$
3 tail -1 /etc/shadow
4 user5:$6$1234abcd$RQ0et4pXYf990f./lJNcInZtANef5Mw0GSA0ftwDYKZEViukdnf9bM/PALLnGuSv91L/9bWBkFBQM4Os8CMYk/:17374:0:99999:7:::
到此为⽌添加密码这⼀步已经做完。
在group中加⼊其基本组
[root@compute demo]# echo "user5:x:5000:" >> /etc/group
[root@compute demo]# tail -1 /etc/group
user5:x:5000:
最后在gshadow中添加组信息(为了⽅便起见,我们暂时不添加组密码,有兴趣的同学可以⾃⼰添加,添加⽅式和添加⽤户密码相同,把加密后的密码替换!即可):
1 [root@compute demo]# echo "user5:!::" >> /etc/gshadow
2 -bash: :: unrecognized history modifier
3 [root@compute demo]# echo 'user5:!::' >> /etc/gshadow
4 [root@compute demo]# tail -1 /etc/gshadow
5 user5:!::
注:上⾯可以看到我使⽤echo "user5:!::" >> /etc/gshadow命令时报错了,原因是bash⽀持命令展开,⽽ ! 是展开的⼀种修饰前缀,因此bash试图将 :: 进⾏展开,这⾥我们将双引号改为单引号即可,因为单引号为强引⽤,明确告诉bash不需要对字符串中的内容进⾏展开。
最后⼀步,复制家⽬录:
1 [root@compute demo]# cp -r /etc/skel /home/user5
2 [root@compute demo]# ll /home/
3 总⽤量 496
4 drwx------. 3 user3 root 4096 7⽉ 28 06:31 user3
5 drwx------. 3 user4 user4 409
6 7⽉ 28 00:29 user4
6 drwxr-xr-x. 3 root root 4096 7⽉ 30 01:48 user5
7 [root@compute demo]# chown -R user5:user5 /home/user5
8 [root@compute demo]# chmod -R --reference=/home/user4 /home/user5
9 [root@compute demo]# ll /home/
10 总⽤量 496
11 drwx------. 3 user3 root 4096 7⽉ 28 06:31 user3
12 drwx------. 3 user4 user4 4096 7⽉ 28 00:29 user4
13 drwx------. 3 user5 user5 4096 7⽉ 30 01:48 user5
到此为⽌,user5⽤户就添加完成了,现在可以⽤user5⽤户登⼊了,密码就是刚才设置的password
1 [root@compute demo]# su -l user5
2 上⼀次登录:⽇ 7⽉ 30 01:53:57 CST 2017pts/1 上
3 [user5@compute ~]$ touch hello.c
4 [user5@compute ~]$ ll
5 总⽤量 0
6 -rw-rw-r--. 1 user5 user5 0 7⽉ 30 01:54 hello.c
7 [user5@compute ~]$ pwd
8 /home/user5。