Linux系统是一个多用户多任务的操做系统.php
用户的帐号一方面能够帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另外一方面也能够帮助用户组织文件,并为用户提供安全性保护。linux
每一个用户帐号都拥有一个惟一的用户名和各自的密码。shell
用户在登陆时键入正确的用户名和密码后,就可以进入系统和本身的主目录。ubuntu
要想实现用户帐号的管理:vim
注意三个文件:centos
命令 | 做用 | 说明 |
---|---|---|
useradd -m -g 组 新建用户名 | 添加新用户 | -m 自动创建用户家目录 -g 指定用户所在的组,不然会创建一个和同名的组 |
passwd 用户名 |
设置用户密码 | 若是是普通用户,直接用 passwd 能够修改本身的帐户密码 |
userdel -r 用户名 | 删除用户 | -r 选项会自动删除用户家目录 |
cat /etc/passwd | grep 用户名 |
确认用户信息 | 新建用户后,用户信息会保存在 /etc/passwd 文件中 |
useradd 选项 用户名
复制代码
经常使用选项:数组
示例:建立用户zhangsan,不带任何选项安全
useradd zhangsan
复制代码
验证是否成功:bash
验证/etc/passwd的最后一行,查看是否有zhangsan的信息app
Last login: Sat Jun 8 22:28:50 2019 from 49.92.240.220
root@toby:~# useradd zhangsan
root@toby:~# useradd zhangsan
useradd: user 'zhangsan' already exists
root@toby:~# tail -1 /etc/passwd
zhangsan:x:1000:1000::/home/zhangsan:
root@toby:~#
复制代码
验证是否存在家目录(在Centos下建立好用户以后随之产生一个同名家目录);
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
ntp:x:108:114::/home/ntp:/bin/false
复制代码
上图中依次顺序为
用户名:密码:用户ID:用户组ID:注释:家目录:解释器shell
注意:
在不添加选项的时候,执行useradd以后会执行一系列的操做
示例:添加选项,建立用户lisi,让lisi属于501主组,自选靓号666,而且要求不能登陆到系统,能够写注释为“user lisi”。
root@toby:/home# useradd -g 1000 -u 666 -s /sbin/nologin -c "user lisi" lisi
root@toby:/home# tail -1 /etc/passwd
lisi:x:666:1000:user lisi:/home/lisi:/sbin/nologin
root@toby:/home#
复制代码
注意:
linux123行的含义:
在linux123的组里(组id是500)有一个组内用户lisi(lisi的附加组就是500,附加组的名字是linux123)。
若是须要为一个用户指定多个附加组,只须要将多个附件组的id经过英文逗号“,”分割便可。
【主组只能有1个,附加组能够多个,也能够没有附加组
【主组必须有】
【文档的属组指的是主组】
复制代码
usermod
能够用来设置 用户 的 主组 / 附加组 和 登陆 Shell,命令格式以下:etc/passwd
的第 4 列 GID
对应的组etc/group
中最后一列表示该组的用户列表,用于指定 用户的附加权限提示:设置了用户的附加组以后,须要从新登陆才能生效!
usermod 选项 用户名
# 修改用户的主组(passwd 中的 GID)
usermod -g 组 用户名
# 修改用户的附加组
usermod -G 组 用户名
# 修改用户登陆 Shell
usermod -s /bin/bash 用户名
复制代码
Usermod:user modify,用户修改
经常使用选项:
选项 | 含义 |
---|---|
-g | 表示指定用户的用户主组,选项的值能够是用户组的id,也能够是组名 |
-G | 表示指定用户的用户附加组,选项的值能够是用户组的id,也能够是组名 |
-u | uid,用户的id(用户的标识符),系统默认会从500以后按顺序分配uid,若是不想使用系统分配的,能够经过该选项自定义 |
-l | 修改用户名 |
-c<备注> | 修改用户账号的备注文字 |
-d<登入目录> | 修改用户登入时的目录 |
-s | 修改用户登入后所使用的shell |
示例:修改zhangsan用户主组为500,附加组改成501
usermod -g 500 -G 501 zhangsan
复制代码
示例:修改zhangsan用户用户名,改成wangerma
usermod -l wangerma zhangsan 这里的竖杠是 英文字母 l
复制代码
注意:默认使用
useradd
添加的用户是没有权限使用sudo
以root
身份执行命令的,可使用如下命令,将用户添加到sudo
附加组中
usermod -G sudo 用户名
复制代码
Linux不容许没有密码的用户登陆到系统,所以前面建立的用户目前都处于锁定状态,须要设置密码以后才能登陆计算机。
passwd [用户名] 【若是不指定用户名则修改本身的密码】
复制代码
示例:设置wangerma用户的密码
passwd wangerma
复制代码
注意:
这里能够先写要修改的用户, 中间插入选项和值
设置密码以后shadow文件中的体现:可以看出lisi用户没有密码的。
sshd:*:17616:0:99999:7:::
zhangsan:$6$Z7HX/.94$F78gf4VkGCSPADb/aA4lFhWwOYXyLuG.LWHjX7D.d4684d/oXIouzwoE0TvIX.JkjlgV4KLdisjvm1hf19vEJ/:18056:0:99999:7:::
lisi:!:18055:0:99999:7:::
复制代码
在设置用户密码以后能够登陆账号,例如此处须要登陆zhangsan
提示
/etc/passwd
是用于保存用户信息的文件/usr/bin/passwd
是用于修改用户密码的程序
which
命令能够查看执行命令所在位置,例如:
which ls
# 输出
# /bin/ls
which useradd
# 输出
# /usr/sbin/useradd
复制代码
Linux
中,绝大多数可执行文件都是保存在 /bin
、/sbin
、/usr/bin
、/usr/sbin
/bin
(binary
)是二进制执行文件目录,主要用于具体应用/sbin
(system binary
)是系统管理员专用的二进制代码存放目录,主要用于系统管理/usr/bin
(user commands for applications
)后期安装的一些软件/usr/sbin
(super user commands for applications
)超级用户的一些管理程序提示:
cd
这个终端命令是内置在系统内核中的,没有独立的文件,所以用which
没法找到cd
命令的位置
序号 | 命令 | 做用 | 说明 |
---|---|---|---|
01 | su - 用户名 | 切换用户,而且切换目录 | - 能够切换到用户家目录,不然保持位置不变 |
02 | exit | 退出当前登陆帐户 |
su
不接用户名,能够切换到 root
,可是不推荐使用,由于不安全exit
快捷键为 control+d
示意图以下:su [用户名](switch user)
复制代码
若是用户名不指定则表示切换到root用户
root@toby:~# su zhangsan
zhangsan@toby:/root$
zhangsan@toby:/root$ su
Password:
root@toby:~#
复制代码
切换用户须要注意的事项:
用户删除
userdel 选项 用户名
复制代码
经常使用选项:
示例:删除zhangsan用户
root@toby:~# userdel -r zhangsan
userdel: user zhangsan is currently used by process 22089
root@toby:~# ps -ef | grep 22089
zhangsan 22089 22088 0 20:51 pts/0 00:00:00 bash
root 22092 22089 0 20:51 pts/0 00:00:00 su
root 22115 22093 0 20:57 pts/0 00:00:00 grep --color=auto 22089
root@toby:~# su zhangsan
# 这里使用control+d 会自动退出
zhangsan@toby:/root$ exit
复制代码
解决办法:
简单粗暴,
kill
对应用户的所有进程
提示:
全部跟用户操做的命令(除passwd外,只能修改本身的密码,即不指定用户名)只有root超级管理员有权限执行。
备注:
也能够在登陆须要删除的用户以后,按下快捷键
ctrl+d
进行对当前用户的注销,随后退回到上一个用户(root)此时就能够对须要删除的用户进行删除操做。
每一个用户都有一个用户组,系统能够对一个用户组中的全部用户进行集中管理。不一样Linux 系统对用户组的规定有所不一样,如Linux下的用户属于与它同名的用户组,这个用户组在建立用户时同时建立。
用户组的管理涉及用户组的添加、删除和修改。组的增长、删除和修改实际上就是对 /etc/group 文件的更新。
root@toby:~# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
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:
floppy:x:25:
tape:x:26:
sudo:x:27:
audio:x:29:
dip:x:30:
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:
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:
mlocate:x:112:
ssh:x:113:
ntp:x:114:
lpadmin:x:115:
stapdev:x:116:
stapusr:x:117:
stapsys:x:118:
root@toby:~#
复制代码
上面内容的文件结构:
用户组名:密码:用户组ID:组内用户名
密码:X表示占位符,虽然用户组能够设置密码,可是绝大部分的状况下不设置密码; 组内用户名:表示附加组是该组的用户名称;
groupadd 选项 用户组名
复制代码
经常使用选项:
示例:使用groupadd指令建立一个新的用户组,命名为admins
#groupadd admins
root@toby:~# cat /etc/group
...
admins:x:1001:
root@toby:~#
复制代码
groupmod 选项 用户组名
复制代码
经常使用选项:
案例:修改admins用户组,将组ID改为520,将名称改成admin123
root@toby:~# groupmod -g 520 -n admingroup admins
root@toby:~# cat /etc/group
...
admingroup:x:520:
root@toby:~#
复制代码
groupdel 用户组名
复制代码
案例:删除admingroup组
groupdel admingroup
复制代码
注意:
当若是须要删除一个组,可是这个组是某个用户的主组时,则不容许删除(附加组是能够的);若是确实须要删除,则先从组内移出全部用户。
提示:
针对用户和用户组的管理指令,除了passwd指令以外,其余指令通常状况下只有root用户能够执行。
在Linux中分别有读、写、执行权限:
读权限:
写权限:
执行权限:通常都是对于文件来讲,特别脚本文件。
Root用户(超级用户)
Owner身份(文档全部者,默认为文档的建立者)
Group身份(与文件全部者同组的用户)
Others身份(其余人,相对于全部者与同组用户)
要设置权限,就须要知道文件的一些基本属性和权限的分配规则。在Linux
中,ls
命令经常使用来查看文档的属性,用于显示文件的文件名和相关属性。
#ls -l 路径 【ls -l 等价于 ll】
复制代码
root@toby:~# ll /
total 92
drwxr-xr-x 22 root root 4096 Jun 3 16:38 ./
drwxr-xr-x 22 root root 4096 Jun 3 16:38 ../
drwxr-xr-x 2 root root 4096 Apr 8 2018 bin/
drwxr-xr-x 3 root root 4096 Apr 8 2018 boot/
drwxr-xr-x 19 root root 3740 Jun 3 16:38 dev/
drwxr-xr-x 88 root root 4096 Jun 9 21:23 etc/
drwxr-xr-x 2 root root 4096 Apr 13 2016 home/
lrwxrwxrwx 1 root root 33 Mar 26 2018 initrd.img -> boot/initrd.img-4.4.0-117-generic
lrwxrwxrwx 1 root root 33 Mar 26 2018 initrd.img.old -> boot/initrd.img-4.4.0-116-generic
drwxr-xr-x 20 root root 4096 Mar 26 2018 lib/
drwxr-xr-x 2 root root 4096 Mar 26 2018 lib64/
drwx------ 2 root root 16384 Mar 26 2018 lost+found/
drwxr-xr-x 4 root root 4096 Mar 26 2018 media/
drwxr-xr-x 2 root root 4096 Aug 1 2017 mnt/
drwxr-xr-x 2 root root 4096 Aug 1 2017 opt/
dr-xr-xr-x 96 root root 0 Jun 3 16:38 proc/
drwx------ 7 root root 4096 Jun 8 23:08 root/
drwxr-xr-x 19 root root 640 Jun 9 21:06 run/
drwxr-xr-x 2 root root 12288 Apr 8 2018 sbin/
drwxr-xr-x 2 root root 4096 Aug 1 2017 srv/
dr-xr-xr-x 13 root root 0 Jun 3 16:50 sys/
drwxrwxrwt 7 root root 4096 Jun 9 22:17 tmp/
drwxr-xr-x 10 root root 4096 Mar 26 2018 usr/
drwxr-xr-x 11 root root 4096 Mar 26 2018 var/
lrwxrwxrwx 1 root root 30 Mar 26 2018 vmlinuz -> boot/vmlinuz-4.4.0-117-generic
lrwxrwxrwx 1 root root 30 Mar 26 2018 vmlinuz.old -> boot/vmlinuz-4.4.0-116-generic
root@toby:~#
复制代码
上图标红的部分就是Linux的文档权限属性信息。
Linux中存在用户(owner)、用户组(group)和其余人(others)概念,各自有不一样的权限,对于一个文档来讲,其权限具体分配以下:
十位字符表示含义:
“d表示文件夹”、“-表示文件”
、“l表示软链接”、“s表示套接字”、“c表示字符设备”、“b表示块状设备”等等;全部者
的权限状况,第2位表示读权限的状况,取值有r、-;第3位表示写权限的状况,w表示可写,-表示不可写,第4位表示执行权限的状况,取值有x、-。同在一个组的用户
的权限状况,第5位表示读权限的状况,取值有r、-;第6位表示写权限的状况,w表示可写,-表示不可写,第7位表示执行权限的状况,取值有x、-。其余用户
的权限状况,第8位表示读权限的状况,取值有r、-
;第9位表示写权限的状况,w表示可写,-表示不可写,第10位表示执行权限的状况,取值有x、-
。注意:
除了权限位上的
rwx
以及-
以外,还有一些特殊的权限代码“s”、“t”
,这些不在本次考虑范围内。(黏贴位,特殊权限位)
权限分配中,均是rwx
的三个参数组合,且位置顺序不会变化。没有对应权限就用 –
代替。
chmod [选项] 权限模式 文档路径
复制代码
经常使用选项:
权限模式:
文档:
注意点:
若是想要给文档设置权限,操做者要么是root用户,要么就是文档的全部者。
给谁设置:
什么权限-权限字符:
如何设置-权限分配方式:
设置多个身份的权限时候,每一个身份之间须要经过英文逗号分开。
例如:
须要给/root/anaconda-ks.cfg文件(-rw-------.)设置权限,要求全部者拥有所有的权限,同组用户拥有读和写权限,其余用户只读权限。
答案:
#chmod u+x,g+rw,o+r /root/anaconda-ks.cfg
或者:
#chmod u=rwx,g=rw,o=r /root/anaconda-ks.cfg
复制代码
提示:
当文档拥有执行权限(任意部分),则其颜色在终端中是绿色。
#chmod ug=rwx 形式,若是有两部分权限同样则能够合在一块儿写的
等价于:
#chmod u=rwx,g=rwx
复制代码
例如:若是anaconda-ks.cfg文件什么权限都没有,可使用root用户设置全部的人都有执行权限,则能够写成
什么权限都没有应该是:----------
目标的效果:---x--x--x
#chmod a=x anaconda-ks.cfg
#chmod a+x anaconda-ks.cfg
#chmod u+x,g+x,o+x anaconda-ks.cfg
#chmod ugo=x anaconda-ks.cfg
#chmod ugo+x anaconda-ks.cfg
#chmod +x anaconda-ks.cfg
复制代码
案例:
设置文件“~/php/php.txt”权限,要求全部者所有权限,同组用户拥有读权限、写权限,其余人拥有读权限
#chmod u=rwx,g=rw,o=r ~/php/php.txt
更改要求:
全部者所有权限,同组用户拥有读权限、写权限,其余人拥有读权限、写权限
#chmod o+w ~/php/php.txt
复制代码
练习:
1. 设置文件夹/tmp/php的权限(若是文件夹不存在,自行建立),要求权限为递归权限,而且全部者有所有权限,同组用户有读执行权限,其余用户只读权限;
#mkdir /tmp/php
#chmod -R u=rwx,g=rx,o=r /tmp/php
2. 设置文件/tmp/php/class.sh权限,文件若是不存在则自行建立,要求权限为全部者所有权限,同组用户读和执行权限,其余用户没有权限;
#touch /tmp/php/class.sh
#chmod u=rwx,g=rx,o=--- /tmp/php/class.sh
3. 使用普通用户在/tmp/php目录下建立test目录,设置目录权限为全部者拥有所有权限,同组用户只读,其余用户只读;(建立不了test用户)
复制代码
常常会在一些技术性的网页上看到相似于#chmod 777 a.txt 这样的一个权限,这种形式称之为数字形式权限(777)。
权限 | 表明字母 | 数字值 |
---|---|---|
读 | r | 4 |
写 | w | 2 |
执行 | x | 1 |
没有任何权限
-
:0
注意:
组合权限数字的时候遵循,最短路径要求,而且最多只能出现一次。
例如:
须要给anaconda-ks.cfg设置权限,权限要求全部者拥有所有权限,同组用户拥有读执行权限,其余用户只读。
分析:
全部者(第1位):所有权限 = 读 + 写 + 执行 = 4 + 2 + 1 = 7
同组用户(第2位):读执行 = 读 + 执行 = 4 + 1 = 5
其余用户(第3位):读 = 4
组合: 754
最终得出的结果是754
#chmod 754 anaconda-ks.cfg
复制代码
例题:
用超级管理员设置文档的权限命令是#chmod -R 731 aaa,请问这个命令有没有什么不合理的地方?
全部者 = 7 = 4 + 2 + 1 = 读 + 写 + 执行
同组用户 = 3 = 2 + 1 = 写 + 执行
其余用户 = 1 = 执行
问题在权限731中3表示写+执行权限,可是写又没必要须须要能打开以后才能够写,所以必须须要具有读权限,所以权限不合理。之后建议各位在设置权限的时候不要设置这种“奇葩权限”。
复制代码
注意:
在写权限的时候千万不要设置相似于上面的这种
奇葩权限
。若是一个权限数字中但凡出现2与3的数字,则该权限有不合理的状况。
是否能够删除文件属于文件夹的权限
扩展:
在Linux系统中,建立文档的权限有一个默认值,以当前的系统为例,其建立文件夹以后的默认权限是755,建立文件以后的权限是644。
之因此会这样是受到了系统中umask(掩码)的值的影响,其是用于指定文档建立好以后的权限,umask默认为022。
计算方式:
对于文件:文件的权限 = 666 – umask掩码
对于文件夹:文件夹的权限 = 777 - umask掩码
复制代码
为何文件是
666
不是777
呢? 由于文件包含了可执行文件. linux系统处于安全的考虑. 默认建立的文件是不给执行的权限x
的.
这两项信息在文档建立的时候会使用建立者的信息(用户名、用户所属的主组名称)。
之因此须要设置这个:若是有时候去删除某个用户,则该用户对应的文档的属主和属组信息就须要去修改(相似离职以前的工做交接)。
更改文档的所属用户(change owner)
chown [-R] 新的username 文档路径
复制代码
注意:
修改全部者的人必须是root或者全部者本身,其余人无权修改全部者。
更改文档的所属用户组(change group)
chgrp [-R] groupname 文档的路径
复制代码
案例:将刚才oo目录的全部用户组名改成admin
#chgrp -R admin /oo
复制代码
思考? 如何经过一个命令实现既能够更改所属的用户,也能够修改所属的用户组呢?
答:能够实现的,经过chown命令
语法:#chown [-R] username:groupname 文档路径
复制代码
问题? reboot、shutdown、init、halt,在普通用户身份上都是操做不了,可是有些特殊的状况下又须要有执行权限。又不可能让root用户把本身的密码告诉普通用户,这个问题该怎么解决?
该问题是能够被解决的,可使用sudo(switch user do)命令来进行权限设置。Sudo可让管理员(root)事先定义某些特殊命令谁能够执行。
复制代码
默认sudo中是没有除root以外用户的规则,要想使用则先配置sudo。
Sudo配置文件:/etc/sudoers 该文件默认只读,不容许修改,所以不能直接修改。
sudo
文件请使用visudo
,打开以后其使用方法和vim一致上图的98行说明:
案例:使用admin这个用户,赋予其添加用户权限。
注意:在写sudo规则的时候不建议写直接形式的命令,而是写命令的完整路径。
路径可使用which(whereis亦可)命令来查看
语法:#which 指令名称
Whereis会找出一些非可执行文件,建议使用which
复制代码
root@toby:~# which useradd
/usr/sbin/useradd
root@toby:~# whereis useradd
useradd: /usr/sbin/useradd /usr/share/man/man8/useradd.8.gz
root@toby:~#
复制代码
因此whereis
指令返回的内容比较多, 咱们使用which
指令便可
若是须要更多的命令, 后面的用,
分隔便可
在添加好对应的规则以后就能够切换用户,切换到普通用户admin,再去执行:
此时要想使用刚才的规则,则以如下命令进行:
sudo 须要执行的指令(就是放权的指令名称)
复制代码
此时输入的密码是当前执行sudo指令的用户的密码,而非root密码。
在输入sudo指令以后须要输入当前的用户密码进行确认的操做(不是root用户密码),输入以后在接下来5分钟内再次执行sudo指令不须要密码。
补充:
在普通用户下怎么查看本身具备哪些特殊权限呢?
sudo -l 表示list
复制代码
最后:sudo不是任何Linux分支都有的命令,常见centos与ubuntu都存在sudo命令。