一、参考资料
Ubuntu/Linux用户管理与权限管理(超详细解析)
二、关键指令
1. root用户
1.1 设置root用户密码
sudo passwd root
# 输出
yichao@yichao:~$ sudo passwd root
[sudo] yichao 的密码:
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码
1.2 进入root用户
su root
# 输出
yichao@yichao:~$ su root
密码:
root@yichao:/home/yichao#
2. 用户组
2.1 查看用户组
id 用户名
# 或者
cat /etc/group | grep UserName
yichao@yichao:~$ id yichao
uid=1000(yichao) gid=1000(yichao) 组=1000(yichao),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare),999(docker)
uid,用户id;
gid,用户所在的组id;
组,用户所在的组列表;
用户所在的主组为yichao;
同时也在 4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare),999(docker)用户组中;
2.2 创建用户组
很多时候在创建新用户的时候,希望把一些用户归为一个组,以便后续的管理,例如我就打算把学生的账号都放到StudentGroup里面去。在Ubuntu中,一个用户可以同时在几个组里,会指定一个主要组。
sudo groupadd [options] GroupName
2.3 删除用户组
sudo groupdel GroupName
2.4 修改用户组
sudo groupmod [options] GroupNameOld
-g NewID:为GroupNameOld用户组指定新的组id
-n NewGroupName:为GroupNameOld用户组指定新的组名称
# 将用户组group1改名为group2,同时组id设置为10001
sudo groupmod -g 10001 -n group2 group1
2.5 用户组管理
用户组管理的命令是gpasswd
,通常用来给用户组添加或移除用户,其基本语法如下:
gpasswd [option] GroupName
# 将用户user1添加到用户组Group2中
gpasswd -a user1 Group2
# 将用户user1从用户组Group1中移除
gpasswd -d user1 Group1
3. 创建新用户
创建新用户可以用两个命令,一个是 adduser
,一个是 useradd
。一个是通过系统提示配置密码等信息由系统以默认目录配置创建用户(adduser,会把用户主目录建立在\home目录下,仅配置密码和一些用户信息,其他的配置如权限用户组等都是默认的);一个是用户自己通过参数配置来添加用户(useradd,可以自行输入参数来确定用户的主目录、用户组等配置)。
为了避免搞混这两个命令,我是这么记的:
(系统)添加用户——System add user,add在前,user在后,由系统自动完成,system省略了,所以是adduser;
用户添加(用户)——User add user,用户添加用户,可以自定义参数配置,省略后面的users,所以是useradd。
3.1 adduser
系统创建新用户
默认建立一个新的用户组以及在\home目录下创建新的用户目录\home\abc\
。
sudo adduser UserName
3.2 useradd
用户创建新用户
useradd [options] UserName
# 常用的选项如下(注意严格区分大小写)
-d DirPath:指定DirPath为新用户的主目录;
-m:不需要带值,与-d合用,表示当上述DirPath目录不存在时,创建目录DirPath;
-g GroupName:指定新用户主要所在的用户组(指定的组不存在时会报错,需要先创建用户组;
-G GroupName1 GroupName2:指定新用户所在的用户组(可以列出多个);
-s ShellPath:指定用户的登录shell为文件ShellPath。
useradd -d /media/StudentGroup/stu1/ -m -g StudentGroup -G adm,root stu1
创建用户stu1,主用户组为StudentGroup(需要提前创建好),同时也属于用户组adm和root,主目录为/media/StudentGroup/stu1/。这样创建好的用户是没有密码的,可以在root用户下给它设置密码(passwd stu1命令,详见后面的用户修改部分)。
注意:需要先手动创建目录 /media/StudentGroup/
或者确保这个目录存在,因为这条命令中的创建目录是不支持多级目录同时创建的,好像mkdir这个命令。
4. 修改用户
4.1 切换用户组
有时候一个用户同时属于多个用户组的时候,默认是会使用主用户组的权限配置。
# 用户stu1同时在用户组StudentGroup和adm中,默认是StudentGroup,在stu1下,使用如下命令可以切换到adm组中:
newgrp adm
4.2 口令相关
如果只是当前用户修改自己的口令,则可以只用passwd
。如果是root用户或者其他管理员用户修改其他用户的口令配置,则需要管理员权限sudo或者root用户本身。
passwd [options] UserName
不使用任何选项:直接修改口令
-l:锁定口令,即禁用用户,用户可以通过ssh登录,但是不能修改口令
-u:解锁口令,即解除禁用
-d:清除口令,使账户不需要密码
4.3 配置相关
usermod [options] UserName
一个是-m选项,在修改用户配置的时候,同样需要和-d选项合用,此时的-m选项就不是创建用户主目录了,而是移动旧用户主目录的内容到-d所指定的新用户主目录中去。
另一个是-G选项,如果要将用户添加到一个或几个组里去,-G后面的用户组列表应当包含之前用户所在的组列表和新的组列表,否则,用户将从之前的组列表中移除。要查看用户在哪些组里面,可以通过命令 cat /etc/group | grep UserName
查看。(UserName是要查看的用户名)。
有时候用户所在组比较多,只用-G选项会比较麻烦,需要把之前所在的组都列出来,这时候可以添加-a选项(append)和-G选项合用,表示附加一个组,用的时候如下列命令所示:
usermod -a -G newGroup user1 #将user1添加到newGroup组中,即向user1原有的组列表中添加newGroup
5. 用户账户
5.1 查看用户
每个用户都在文件/etc/passwd中有一个对应的记录行,它记录了这个用户的一些基本属性。
cat /etc/passwd
yichao@yichao:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
messagebus:x:106:110::/var/run/dbus:/bin/false
uuidd:x:107:111::/run/uuidd:/bin/false
lightdm:x:108:114:Light Display Manager:/var/lib/lightdm:/bin/false
whoopsie:x:109:117::/nonexistent:/bin/false
avahi-autoipd:x:110:119:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:111:120:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
dnsmasq:x:112:65534:dnsmasq,,,:/var/lib/misc:/bin/false
colord:x:113:123:colord colour management daemon,,,:/var/lib/colord:/bin/false
speech-dispatcher:x:114:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
hplip:x:115:7:HPLIP system user,,,:/var/run/hplip:/bin/false
kernoops:x:116:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false
pulse:x:117:124:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:118:126:RealtimeKit,,,:/proc:/bin/false
saned:x:119:127::/var/lib/saned:/bin/false
usbmux:x:120:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false
yichao:x:1000:1000:yichao,,,:/home/yichao:/bin/bash
share:x:1001:1001::/home/share:
一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
5.2 查看用户组
每个用户组会对应文件/etc/group中的一行记录。
cat /etc/group
yichao@yichao:~$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,yichao
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:yichao
floppy:x:25:
tape:x:26:
sudo:x:27:yichao
audio:x:29:pulse
dip:x:30:yichao
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:yichao
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-timesync:x:102:
systemd-network:x:103:
systemd-resolve:x:104:
systemd-bus-proxy:x:105:
input:x:106:
crontab:x:107:
syslog:x:108:
netdev:x:109:
messagebus:x:110:
uuidd:x:111:
ssl-cert:x:112:
lpadmin:x:113:yichao
lightdm:x:114:
nopasswdlogin:x:115:
ssh:x:116:
whoopsie:x:117:
mlocate:x:118:
avahi-autoipd:x:119:
avahi:x:120:
bluetooth:x:121:
scanner:x:122:saned
colord:x:123:
pulse:x:124:
pulse-access:x:125:
rtkit:x:126:
saned:x:127:
yichao:x:1000:
sambashare:x:128:yichao
docker:x:999:yichao
share:x:1001:
一行记录对应着一个用户组,每行记录又被冒号(:)分隔为4个字段,其格式和具体含义如下:
组名:口令:组标识号:组内用户列表
6. 查看文件/目录权限
ls -l
ll
权限 | incode | 所属用户 | 所属用户组 | 文件大小 | 修改时间 | 名称 |
---|---|---|---|---|---|---|
drwxrwxrwx | 0 | user | group | 512 | 月日时间 | name |
其中第一个字段如drwxrwxrwx
或drwxr-xr-x
这种就表示该文件的权限,这个字段的值一共有10位字符,每一位的含义如下:
位置 | 含义 | 取值说明 |
---|---|---|
第1位 | 是否为目录 | d表示该文件为目录,-表示该文件不是目录 |
2~4位 | 所属用户对该文件的权限 | 2,3,4位分别对应读、写、执行权限,如果对应位置为“-”符号表示不具备该权限,为对应字母r、w、x则表示具备该权限 |
5~7位 | 所属用户组对该文件的权限 | 5,6,7位分别对应读、写、执行权限,如果对应位置为“-”符号表示不具备该权限,为对应字母r、w、x则表示具备该权限 |
8~10位 | 其他用户对该文件的权限 | 8,9,10位分别对应读、写、执行权限,如果对应位置为“-”符号表示不具备该权限,为对应字母r、w、x则表示具备该权限 |
7. 修改/设置权限
chmod 权限操作 文件名
chmod 777 -R 目录名
chmod 777 文件名
8. 修改所有权
chown yichao:yicaho -R 目录名
chown yichao:yichao 文件名
9. Ubuntu新增用户并赋予权限
ubuntu 增加一个用户 并赋予权限
9.1 新增用户(以yoyo为例)
sudo adduser yoyo
9.2 修改密码
sudo passwd yoyo
9.3 修改shell类型
sudo usermod -s /bin/bash yoyo
9.4 添加sudo权限
sudo gedit /etc/sudoers
# 找到这行 root ALL=(ALL) ALL,在他下面添加
yoyo ALL=(ALL:ALL) ALL
9.5 SSH远程登录
ssh yoyo@192.168.0.147