系列文章目录
容器学习Day02-VMware Workstation安装Ubuntu
文章目录
前言
本次继续熟悉了解Ubuntu操作系统的常用命令。
一、用户管理相关命令
Linux用户分为管理员用户、系统用户和普通用户。系统默认的管理员用户就是root,他的UID(用户ID)为0,系统用户的UID为1~999,系统安装时预设的一些低权限账户,用于系统服务的运行,普通用户的UID从1000开始,是管理员创建的用于日常工作的用户。
为了方便管理属于同一组的用户,Linux系统中还引入了用户组的概念。通过使用用户组号码(GID,Group IDentification),可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。
1、groupadd&groupdel&groupmod
- groupadd(创建群组)
- groupdel(删除群组)
- groupmod(修改群组属性)
用法:groupadd 群组名,创建一个群组。
groupadd -g GID 群组名,创建一个群组,并指定群组ID。
groupdel 群组名,删除一个群组。
groupmod -g GID 群组名,修改一个群组的ID号。
groupmod -n 新群组名 原群组名,修改群组名字。
普通用户使用命令需加上sudo。
###不指定GID创建群组group1,前面的一个群组ID为1000,ID默认顺延。
demo@docker:~$ sudo groupadd group1
demo@docker:~$ cat /etc/group | grep group1
group1:x:1001:
###指定GID创建群组group2,GID为1500。
demo@docker:~$ sudo groupadd -g 1500 group2
demo@docker:~$ cat /etc/group | grep group2
group2:x:1500:
###继续不指定GID创建群组group3,group3的GID顺延group2,GID为1501。
demo@docker:~$ sudo groupadd group3
demo@docker:~$ cat /etc/group | grep group3
group3:x:1501:
###删除group2,查看群组返回空,已被删掉。
demo@docker:~$ sudo groupdel group2
demo@docker:~$ cat /etc/group | grep group2
demo@docker:~$
###修改group3的GID为1002。
demo@docker:~$ cat /etc/group | grep group3
group3:x:1501:
demo@docker:~$ sudo groupmod -g 1002 group3
[sudo] password for demo:
demo@docker:~$ cat /etc/group | grep group3
group3:x:1002:
###修改group3群组名为group4。
demo@docker:~$ cat /etc/group | grep group3
group3:x:1002:
demo@docker:~$ sudo groupmod -n group4 group3
demo@docker:~$ cat /etc/group | grep group3
demo@docker:~$ cat /etc/group | grep group4
group4:x:1002:
2、useradd&userdel&usermod
- useradd
用法:useradd 用户名,创建用户,默认自动创建与该用户账号同名的群组。RedHat系的操作系统默认会创建用户主目录,Ubuntu默认不会创建。
useradd -d 目录名 -m 用户名,指定用户主目录位置。如果指定的目录不存在,可以使用-m选项创建主目录。
useradd -g 群组名 用户名,指定用户所属的群组。
useradd -G 群组名 用户名,指定用户附加群组。
useradd -u UID 用户名,指定用户的ID。
useradd -s shell 用户名,常见的shell:/bin/bash、/bin/sh、/sbin/nologin。
id 用户名,可以查看用户UID和GID的信息。
创建用户后,可以通过passwd命令设置用户密码。
普通用户使用命令需加上sudo。
###不加参数,默认创建用户及相关内容。
demo@docker:~$ sudo useradd user1
demo@docker:~$ id user1
uid=1001(user1) gid=1003(user1) groups=1003(user1)
demo@docker:~$ ls -l /home/
total 4
drwxr-x--- 5 demo demo 4096 Sep 10 10:50 demo
###加-d参数,指定用户主目录,-m创建用户主目录。
demo@docker:~$ sudo useradd -d /home/user3 -m user3
demo@docker:~$ ls -l /home/
total 8
drwxr-x--- 5 demo demo 4096 Sep 10 10:50 demo
drwxr-x--- 2 user3 user3 4096 Sep 11 12:36 user3
###-g和-G参数指定用户的主组和附加组
demo@docker:~$ sudo useradd -g group1 -G group4 user4
demo@docker:~$ id user4
uid=1004(user4) gid=1001(group1) groups=1001(group1),1002(group4)
###创建用户使用-u指定UID,并设置shell为/sbin/nologin。
demo@docker:~$ sudo useradd -u 1050 -s /sbin/nologin user5
demo@docker:~$ id user5
uid=1050(user5) gid=1050(user5) groups=1050(user5)
- userdel
用法:userdel 用户名,删除用户。
userdel -r 用户名,删除用户及用户主目录。
普通用户使用命令需加上sudo。
demo@docker:~$ sudo userdel -r user3
- usermod
用法:usermod -l 新用户名 原用户名,修改用户名为新用户名。
usermod -L 用户名,锁定用户。
usermod -U 用户名,解锁用户。
usermod -u UID 用户名,修改用户的用户ID。
usermod -g 群组名 用户名,修改用户的主群组。
usermod -G 群组名 用户名,修改用户的附加群组。
usermod -s shell 用户名,修改用户的登录shell。
普通用户使用命令需加上sudo。
###修改user1为user6。
demo@docker:~$ sudo usermod -l user6 user1
demo@docker:~$ id user1
id: ‘user1’: no such user
demo@docker:~$ id user6
uid=1001(user6) gid=1003(user1) groups=1003(user1)
###-L锁定与-U解锁,锁定user6,无法切换到user6登录,解锁用户后恢复。
demo@docker:~$ sudo usermod -L user6
demo@docker:~$ su - user6
Password:
su: Authentication failure
demo@docker:~$ sudo usermod -U user6
demo@docker:~$
demo@docker:~$ su - user6
Password:
su: warning: cannot change directory to /home/user1: No such file or directory
$ whoami
user6
###修改user6的UID为1005。
demo@docker:~$ id user6
uid=1001(user6) gid=1003(user1) groups=1003(user1)
demo@docker:~$ sudo usermod -u 1005 user6
demo@docker:~$ id user6
uid=1005(user6) gid=1003(user1) groups=1003(user1)
###修改用户的主群组和附加群组。
uid=1005(user6) gid=1003(user1) groups=1003(user1)
demo@docker:~$ sudo usermod -g group1 user6
demo@docker:~$ sudo usermod -G group4 user6
demo@docker:~$ id user6
uid=1005(user6) gid=1001(group1) groups=1001(group1),1002(group4)
###修改user5的登录shell。
demo@docker:~$ cat /etc/passwd |grep user5
user5:x:1050:1050::/home/user5:/sbin/nologin
demo@docker:~$ sudo usermod -s /bin/bash user5
demo@docker:~$ cat /etc/passwd |grep user5
user5:x:1050:1050::/home/user5:/bin/bash
3、用户管理相关的三个文件
- /etc/passwd
说明:/etc/passwd,用来存放用户信息,每行一条用户信息,每条信息包含7个字段。
1.用户名。
2.密码,x代表用户登录必须使用密码,如果为空,则表示登录无需密码,加密后的密码存放在/etc/shadow文件中。
3.UID,用户ID。
4.GID,主群组ID。
5.用户描述信息、备注。
6.用户家目录。
7.登录shell。
demo@docker:~$ 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:/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
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:104::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:105:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
pollinate:x:105:1::/var/cache/pollinate:/bin/false
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
usbmux:x:107:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
demo:x:1000:1000:demo:/home/demo:/bin/bash
user2:x:1002:1004::/home/user2:/bin/sh
user5:x:1050:1050::/home/user5:/sbin/nologin
user6:x:1005:1001::/home/user1:/bin/sh
- /etc/group
说明:/etc/group文件中是所有的组,每行表示一个组,每行有4段信息,中间以冒号分割。
1.群组名。
2.组密码,加密后的密码存放在/etc/gshadow文件中。
3.GID,群组ID号。
4.组中的用户,如果群组是该用户的主组,则该用户不会记录在里面。
demo@docker:~$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:demo
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:demo
floppy:x:25:
tape:x:26:
sudo:x:27:demo
audio:x:29:
dip:x:30:demo
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:demo
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
messagebus:x:104:
systemd-timesync:x:105:
input:x:106:
sgx:x:107:
kvm:x:108:
render:x:109:
lxd:x:110:demo
_ssh:x:111:
demo:x:1000:
ssl-cert:x:112:
group1:x:1001:
group4:x:1002:user6
user1:x:1003:
user2:x:1004:
user5:x:1050:
- /etc/shadow
说明:/etc/shadow 文件,用于存放Linux系统中用户的密码信息,使用冒号分隔,每行用户信息被划分为 9 个字段。
1.用户名。
2.加密的密码字串信息,*或!表示用户不能登录到系统,若为空,则用户不需要密码即可登录。
3.上次修改密码时间,表示从1970年1月1日算起到最近一次修改密码时间隔的天数。
4.密码最短有效天数,本次修改后间隔多长时间可以修改密码,默认是0,不做限制。
5.密码有效期,默认为99999(天)。
6.密码警告天数,提前多久发出密码即将过期的警告,默认是7天。
7.密码过期宽限期,在密码过期之后多少天禁用此用户,默认空表示不做此配置。
8.账户失效时间,1970 年1月1日以来的总天数作为账户的失效时间,默认空,表示永不失效。
9.保留字段,暂无用处。
demo@docker:~$ sudo cat /etc/shadow
root:$y$j9T$OMJS.U3UPIboZOe6cW/7y/$78UcPpabK8d9SYo1dzasMDM4Q2.sNaBvxlp6JU1W3W7:19236:0:99999:7:::
daemon:*:19213:0:99999:7:::
bin:*:19213:0:99999:7:::
........
二、文件权限管理相关命令
Linux系统中每个文件都有归属的所有者和所属组,并且规定了文件的所有者(u)、群组用户(g)以及其他用户(o)对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。
可读(r):对于文件,允许查看文件内容;对于目录,允许读取目录内的文件列表。
可写(w):对于文件,允许编辑文件内容;对于目录,允许在目录内创建、改、删文件。
可执(x):对于文件,允许运行程序或者脚本;对于目录,允许切换到目录内。
执行ls -l,可以显示文件的详细信息,其中包含文件的权限信息。
demo@docker:~$ ls -l
total 0
-rw-rw-r-- 1 demo demo 0 Sep 12 03:40 1.txt
命令列出的内容从左到右:
第1个字符代表的是文件类型,“-”代表一般文件,具体文件类型分类如下:
b:块设备,是一些提供系统存取数据的接口设备,例如硬盘设备。
c:字符设备,是一些串行端口的接口设备,如键盘。
d:目录。
l:链接。
s:套接字,用于进程间通信。
p:命名管道FIFO,用于进程间通信。
-:一般文件,可分为分文本文件和二进制文件。
第2到4个字符“rw-”,表示文件的所有者对文件的权限,可读和可写,不可执行。
第5到7个字符“rw-”,表示文件属组内的用户对文件的权限,可读和可写,不可执行。
第8到10个字符“r--”,表示其他用户对文件的权限,可读,不可写,不可执行。
1表示文件链接数为1.
demo demo,分别代表文件的属主和属组。
0表示文件的大小,因为是空文件显示0。
“Sep 12 03:40”表示文件的最后修改时间。
“1.txt”是文件名字。
文件权限的字符与数字表示:
权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
字符提示 | r | w | x | r | w | x | r | w | x |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
权限分配 | 文件所有者 | 文件所属组 | 其他用户 |
1、chmod
- chmod(授权命令)
用法:chmod 授权对象+权限 文件名,给属主、属组用户、其他用户增加权限。
chmod 授权对象-权限 文件名,移除属主、属组用户、其他用户的权限。
chmod 授权对象=权限 文件名,给属主、属组用户、其他用户授予权限。
授权对象的为u(属主),g(属组用户),o(其他用户),a(所有用户)。
权限为r(可读),w(可写),x(可执行)。
也可以根据上表计算出相应数字进行授权,如:
chmod 755 文件名,第一位数字代表属主的权限,7对应的是rwx;第二位数字代表
属组用户权限,5对应的是r-x;第三位数字代表其他用户的权限。
使用-R参数递归授权,如:
chmod -R 644 目录名, 对一个目录及其子目录所有文件添加644的权限。
###查看1.txt权限
demo@docker:~$ ls -l
total 4
-rw-rw-r-- 1 demo demo 74 Sep 7 17:47 1.txt
###给所有者增加执行权限。
demo@docker:~$ sudo chmod u+x 1.txt
[sudo] password for demo:
demo@docker:~$ ls -l
total 4
-rwxrw-r-- 1 demo demo 74 Sep 7 17:47 1.txt
###移除属组组内用户的可写权限。
demo@docker:~$ sudo chmod g-w 1.txt
demo@docker:~$ ls -l
total 4
-rwxr--r-- 1 demo demo 74 Sep 7 17:47 1.txt
###设置其他用户权限为可读、可写,rw。
demo@docker:~$ sudo chmod o=rw 1.txt
demo@docker:~$ ls -l
total 4
-rwxr--rw- 1 demo demo 74 Sep 7 17:47 1.txt
###所有者移除可执行权限,群组用户增加可写权限,其他用户移除可写权限,中间逗号隔开。
demo@docker:~$ sudo chmod u-x,g+w,o-w 1.txt
demo@docker:~$ ls -l
total 4
-rw-rw-r-- 1 demo demo 74 Sep 7 17:47 1.txt
###授予所有者可读可写可执行权限,群组用户可读权限,其他用户可读权限。
demo@docker:~$ sudo chmod u=rwx,g=r,o=r 1.txt
demo@docker:~$ ls -l
total 4
-rwxr--r-- 1 demo demo 74 Sep 7 17:47 1.txt
###授权文件755权限。
demo@docker:~$ sudo chmod 755 1.txt
demo@docker:~$ ls -l
total 4
-rwxr-xr-x 1 demo demo 74 Sep 7 17:47 1.txt
2、chown
- chown(修改属主和属组)
用法:chown 用户:群组 文件名,修改文件的所有者和群组。
chown 用户 文件名,修改文件的所有者。
chown :群组 文件名,只修改文件的群组。
chown -R 用户:群组 目录名,加-R参数可递归修改目录下所有文件。
###创建一个用户user7用于授权测试。
demo@docker:~$ sudo useradd user7
###修改1.txt的属主和属组为user7。
demo@docker:~$ ls -l
total 4
-rwxr-xr-x 1 demo demo 74 Sep 7 17:47 1.txt
demo@docker:~$ sudo chown user7:user7 1.txt
demo@docker:~$ ls -l
total 4
-rwxr-xr-x 1 user7 user7 74 Sep 7 17:47 1.txt
###修改1.txt的所有者为demo。
demo@docker:~$ sudo chown demo 1.txt
demo@docker:~$ ls -l
total 4
-rwxr-xr-x 1 demo user7 74 Sep 7 17:47 1.txt
###修改1.txt的群组为demo。
demo@docker:~$ sudo chown :demo 1.txt
demo@docker:~$ ls -l
total 4
-rwxr-xr-x 1 demo demo 74 Sep 7 17:47 1.txt
3、setfacl&getfacl
setfacl命令用于管理文件的ACL权限规则,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读、写、执行权限的控制,是在所有者、所属组、其他用户的读、写、执行权限之外的特殊权限控制。
- setfacl(设置文件访问控制列表)
用法:setfacl (-R) -m u:用户名:权限 文件名,将文件的读写执行权限授予某用户,-R参数对目录递归授权。
setfacl (-R)-m g:群组:权限 文件名,将文件的读写执行权限授予某组用户,-R参数对目录递归授权。
setfacl (-R)-x u:用户名 文件名,删除某用户的ACL权限。
setfacl (-R)-x g:群组 文件名,删除某群组的ACL权限。
setfacl -b 文件名,移除所有的ACL权限。
###系统最小化安装不包含acl的包,需要先进行安装。
demo@docker:~$ sudo apt search setfacl
Sorting... Done
Full Text Search... Done
acl/jammy 2.3.1-1 amd64
access control list - utilities
liblinux-acl-perl/jammy 0.05-1build4 amd64
Perl extension for reading and setting Access Control Lists for files
demo@docker:~$ sudo apt install -y acl/jammy
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Selected version '2.3.1-1' (Ubuntu:22.04/jammy [amd64]) for 'acl'
The following packages were automatically installed and are no longer required:
logrotate ssl-cert
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
acl
0 upgraded, 1 newly installed, 0 to remove and 5 not upgraded.
Need to get 38.5 kB of archives.
After this operation, 205 kB of additional disk space will be used.
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 acl amd64 2.3.1-1 [38.5 kB]
Fetched 38.5 kB in 0s (91.3 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package acl.
(Reading database ... 100670 files and directories currently installed.)
Preparing to unpack .../archives/acl_2.3.1-1_amd64.deb ...
Unpacking acl (2.3.1-1) ...
Setting up acl (2.3.1-1) ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 78.)
debconf: falling back to frontend: Readline
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
###新建user8,进行相关测试。
demo@docker:~$ sudo useradd user8
###创建一个文件2.txt,属主和属组修改为user8,权限设置为700。
demo@docker:~$ touch 2.txt
demo@docker:~$ ls -l
total 4
-rw-rw-r-- 1 demo demo 4 Sep 12 04:04 1.txt
-rw-rw-r-- 1 demo demo 0 Sep 13 02:57 2.txt
demo@docker:~$ sudo chown user8:user8 2.txt
demo@docker:~$ ls -l
total 4
-rw-rw-r-- 1 demo demo 4 Sep 12 04:04 1.txt
-rw-rw-r-- 1 user8 user8 0 Sep 13 02:57 2.txt
demo@docker:~$ sudo chmod 700 2.txt
demo@docker:~$ ls -l
total 4
-rw-rw-r-- 1 demo demo 4 Sep 12 04:04 1.txt
-rwx------ 1 user8 user8 0 Sep 13 02:57 2.txt
###使用setfacl对2.txt授权,使demo用户拥有此文件的读写权限。
demo@docker:~$ echo "abc" > 2.txt
-bash: 2.txt: Permission denied
demo@docker:~$ sudo setfacl -m u:demo:rw- 2.txt
demo@docker:~$ echo "abc" > 2.txt
demo@docker:~$ cat 2.txt
abc
###移除demo用户的ACL权限,对demo组进行授权,使demo组的用户拥有对文件的读写执行权限。
demo@docker:~$ sudo setfacl -x u:demo 2.txt
demo@docker:~$ echo "abcd" >> 2.txt
-bash: 2.txt: Permission denied
demo@docker:~$ sudo setfacl -m g:demo:rwx 2.txt
demo@docker:~$ echo "abcd" >> 2.txt
demo@docker:~$ cat 2.txt
abc
abcd
###移除所有的ACL权限。
demo@docker:~$ sudo setfacl -b 2.txt
demo@docker:~$ echo "abcde" >> 2.txt
-bash: 2.txt: Permission denied
- getfacl(查看文件的ACL权限)
用法:getfacl 文件名,查看文件的ACL权限。
###给2.txt设置ACL权限并查看。
demo@docker:~$ sudo getfacl 2.txt
# file: 2.txt
# owner: user8
# group: user8
user::rwx
group::---
other::---
##可以看到demo组有了文件的rwx权限。
demo@docker:~$ sudo setfacl -m g:demo:rwx 2.txt
demo@docker:~$ sudo getfacl 2.txt
# file: 2.txt
# owner: user8
# group: user8
user::rwx
group::---
group:demo:rwx
mask::rwx
other::---
总结
以上就是今天学习了解的内容,下一节主要看一下vi编辑器的使用。