文章目录
- Linux系统目录结构
- Linux用户和用户组
- 用户管理概述
- 用户账号和用户组
- 用户概念
- 用户组概念
- Linux用户和组的关系
- Linux用户管理
- 添加用户 useradd
- 选项
- 修改用户 usermod
- 用户账号口令管理passwd
- 删除用户 userdel
- Linux用户组管理
- 添加新组groupadd
- 修改群组groupmod
- 删除群组groupdel
- Linux超级用户与伪用户
- 用户身份切换
- su
- sudo
Linux系统目录结构
文件系统组织结构
- /lib
系统开机所需要最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
- /lost+found
一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- /etc
所有系统管理所需要的配置文件和子目录。my.conf
- /usr
用户的很多应用程序和文件都放在这个目录下。
- /bin
是Binary的缩写,这个目录存放着经常使用的命令
- /sbin (usr/sbin、/usr/local/sbin)
sbin就是per user的意思,这里存放的是系统管理员使用的系统管理程序
- /home
存放普通用户的主目录,在Linux中的每个用户都有一个自己的目录,一般该目录一用户的账号名命名
- /root
该目录为系统管理员,超级权限者的用户目录
- /boot
存放的启动Linux时使用的一些核心文件,包括一些链接文件和镜像文件
- /proc
虚拟目录,是系统内存的映射,访问这个目录来获取系统信息。
- /srv
service 的缩写,该目录是存放一些服务启动之后需要提取的数据
- /sys
Linux2.6内核的一个很大变化,该目录安装了2.6内核中新出现的一个文件系统
- /tmp
存放临时文件
- /dev
类似于 windows的设备管理器,把所有的硬件用文件的形式存储
- /media
Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
- /mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。d:/ myshare
- /opt
这是给主机额外安装软件所摆放的目录。如安装 ORACLE数据库就可放到该目录下。默认为空。
- /usr/local
这是另个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
- /var
这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
- /selinux [security-enhanced linux] 类似 360
Selinux是一种安全子系统,它能控制程序只能访同特定文件。
登录系统后,在当前命令窗口下输入命令:
ls /
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
Linux用户和用户组
用户管理概述
Linux是一个多用户、多任务的操作系统。
用户账号和用户组
用户概念
通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)
用户组概念
用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的;
Linux用户和组的关系
用户和用户组的对应关系有以下 4 种:
- 一对一:一个用户可以存在一个组中,是组中的唯一成员;
- 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
- 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
- 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。
Linux用户管理
Linux 系统的管理员之所以是 root,是因为该用户的身 份号码即 UID的数值为 0,UID 就相当于我们的身份证号码一样具有唯一性,因此可通过用户的 UID 值来判断用户身份。
- 管理员 UID 为 0:系统的管理员用户。
- 系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提 权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏 范围。
- 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。 需要注意的是,UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000 开始的(即使前面有闲置的号码)。
添加用户 useradd
语法:
useradd (选项)(参数)
选项
-d 指定用户的家目录(默认为/home/username)
-e 账户的到期时间,格式为 YYYY-MM-DD.
-u 指定该用户的默认 UID
-g 指定一个初始的用户基本组(必须已存在)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的基本用户组
-s 指定该用户的默认 Shell 解释器
参数
用户名:要创建的用户名。
示例 1
下面我们创建一个普通用户并指定家目录的路径、用户的 UID 以及 Shell 解释器。在下 面的命令中,请注意/sbin/nologin,它是终端解释器中的一员,与 Bash 解释器有着天壤之别。 一旦用户的解释器被设置为 nologin,则代表该用户不能登录到系统中:
[root@linux *]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
[root@linux *]# id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)
修改用户 usermod
有些时候不小心在useradd的时候加入了错误的设定数据,此时我们当然可以直接到/etc/passwd或/etc/shadow中去修改相对应字段的数据。
语法
usermod (选项) (参数)
选项:
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s:修改用户登入后所使用的shell;
-u:修改用户ID;
-U:解除密码锁定。
示例1
来看一下账户 linuxprobe 的默认信息:
id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
然后将用户 linuxprobe 加入到 root 用户组中,这样扩展组列表中则会出现 root 用户组的 字样,而基本组不会受到影响:
[root@linux *]# usermod -G root linuxprobe
[root@linux *]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
再来试试用-u 参数修改 linuxprobe 用户的 UID 号码值。除此之外,我们还可以用-g 参数 修改用户的基本组 ID,用-G 参数修改用户扩展组 ID。
[root@linuxprobe *]# usermod -u 8888 linuxprobe
[root@linuxprobe *]# id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
用户账号口令管理passwd
passwd 命令用于修改用户密码、过期时间、认证信息等。
语法
passwd (选项) (参数)
选项:
-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-k:设置只有在密码过期失效后,方能更新;
-l:锁住密码;
-s:列出密码的相关信息,仅有系统管理者才能使用;
-u:解开已上锁的帐号。
示例1
用root帮linuxpro修改密码
passwd linuxpro
示例2
假设您有位同事正在度假,而且假期很长,那么可以使用 passwd 命令禁止该用户登录系统,等假期结束回归工作岗位时,再使用该命令允许用户登录系统,而不是将其删除。 这样既保证了这段时间内系统的安全,也避免了频繁添加、删除用户带来的麻烦。
[root@linux *]# passwd -l linuxprobe
Locking password for user linuxprobe.
passwd: Success
[root@linux *]# passwd -S linuxprobe
linuxprobe LK 2017-12-26 0 99999 7 -1 (Password locked.)
[root@linux *]# passwd -u linuxprobe
Unlocking password for user linuxprobe.
passwd: Success
[root@linux *]# passwd -S linuxprobe
linuxprobe PS 2017-12-26 0 99999 7 -1 (Password set, SHA512 crypt.)
删除用户 userdel
userdel 命令用于删除用户
语法:
userdel [选项] 用户名
选项:
-f 强制删除用户
-r 同时删除用户及用户家目录
这个命令的目的删除用户,与它相关的文件有:
- /etc/passwd
- /etc/shadow
- /home/username
语法:
[root@localhost*]#userdel [-r] username
参数:
-r : 连同用户的家目录也一起删除。
示例1
下面使用 userdel 命令将 linuxprobe 用户删除,其操作如下:
[root@linux *]# id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
[root@linux *]# userdel -r linuxprobe
[root@linux *]# id linuxprobe
id: linuxprobe: no such user
Linux用户组管理
添加新组groupadd
语法
groupadd (选项) (参数)
选项
-g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
-K:覆盖配置文件“/ect/login.defs”;
-o:允许添加组ID号不唯一的工作组。
示例1
建立一个新组,并设置组ID加入系统:
groupadd -g 334 bigdata
修改群组groupmod
语法
groupmod(选项)(参数)
选项
-g<群组识别码>:设置欲使用的群组识别码;
-o:重复使用群组识别码;
-n<新群组名称>:设置欲使用的群组名称。
示例1
把建立bigdata组改为bigdata2并设置GID改为506
groupmod -g 506 -n bigdata2 bigdata
删除群组groupdel
x
语法:
groupdel groupname
Linux超级用户与伪用户
Linux下用户分为三类:超级用户、普通用户、伪用户
- 超级用户:用户名为root,具有一切管理权限,UID为0,可以创建多个管理员。
- 普通用户:在默认情况下,普通用户UID是介于500*6000;
- 伪用户:这些用户的存在是为了方便系统管理,满足相应的系统进程对文件属主的要求。伪用户不能够登录,他的ID值介于1*499。
用户身份切换
由于超级权限在系统管理中的不可缺少的重要作用,为了完成系统管理任务,必须用到超级权限。
su
su命令就是切换用户的工具。
语法
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
参数说明:
- -c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
- - -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
示例1
[root@linux *]# id
uid=0(root) gid=0(root) groups=0(root)
[root@linux *]# su - linuxprobe
Last login: Wed Jan 4 01:17:25 EST 2017 on pts/0
[linuxprobe@linuxprobe *]$ id
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe) context=unconfined_
u:unconfined_r:unconfined_t:s0-s0:c0.c1023
注意:
上面的 su 命令与用户名之间有一个减号(-),这意味着完全切 换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强 烈建议在切换用户身份时添加这个减号(-)。
sudo
Sudo
的全称为:super user do
。 顾名思义:干超级用户才能干的事!所以Sudo最常用的功能就是提升一个命名的执行权限。
语法:
sudo [参数] 命令名称
参数:
-h 列出帮助信息
-l 列出当前用户可执行的命令
-u 用户名或 UID 值 以指定的用户身份执行命令
-k 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证
-b 在后台执行指定的命令
-p 更改询问密码的提示语
总结
sudo 命令具有如下功能:
- 限制用户执行指定的命令:
- 记录用户执行的每一条命令;
- 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
- 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码。
编辑配置文件命令: visudo 来配置用户权限。
按照下 面的格式将第 99 行(大约)填写上指定的信息:
谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表
注意:
编辑sudo的配置文件/etc/sudoers是一般不要直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如有错也保存了可能导致无法使用sudo工具,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错会有提示。
示例1
配置linux拥有root的权限
visudo
linux ALL=(ALL) ALL
示例2
在每次执行 sudo 命令后都会要求验证一下密码。
[root@location opt]$ touch a.info
#切换用户
[linux@location *]# su linux
#删除a.info文件
[linux@location *]# rm -rf a.info
rm: cannot remove ‘a.info/’: Permission denied
[linux@location *]# sudo rm -rf a.info
这样,当切换到普通用户后再执行命令时,就不用再频繁地验证密码了,我们在日常工 作中也就痛快至极了。
visudo
linux ALL=NOPASSWD: ALL