用户ID=>UserID=>UID
/etc/passwd
文件当中包含了与用户相关的信息。
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
nginx:x:996:994:nginx user:/var/cache/nginx:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:Percona Server:/var/lib/mysql:/bin/false
root
用户是linux
系统的管理员,固定分配给他的UID是0。这些用户账户也不全都是真的用户,一部分是系统账户,是系统上运行的各种服务进程访问资源用的特殊账户。所有运行在后台的服务都需要用一个系统用户账户登录到linux
系统上。
linux系统为这些系统服务留下了500以下的ID
,而一切服务更是需要特定的UID
才能正常工作。所以创建用户的时候,基本上都会从500开始分配。
这些用户信息是用冒号隔开的。分别表示
- 登录用户名
- 用户密码
- 用户账户的UID(数字形式)
- 用户账户的组ID(GID)(数字形式)
- 用户账户的文本描述(称为备注字段)
- 用户HOME目录的位置
- 用户的默认shell
用户密码都是
X
并不代表这些用户的密码都是X,而是因为保存在这个文件当中容易被访问有风险,所以把密码保存在了/etc/shadow
文件当中。
adminSSH:$1$ULq5bC1q$.8aQTqhQAhb3BAoTCWUva0:17715:0:99999:7:::
不过这里的面膜也不是明文,而是加密过的。不然被侵略就完了。同样他们的信息也是用冒号隔开。
- 与/etc/passwd文件中的登录名字段对应的登录名
- 加密后的密码
- 自上次修改密码后过去的天数密码(自1970年1月1日开始计算)
- 多少天后才能更改密码
- 多少天后必须更改密码
- 密码过期前提前多少天提醒用户更改密码
- 密码过期后多少天禁用用户账户
- 用户账户被禁用的日期(用自1970年1月1日到当天的天数表示)
- 预留字段给将来使用
用来向Linux系统添加新用户的主要工具是useradd
。这个命令简单快捷,可以一次性创建 新用户账户及设置用户HOME目录结构。所以不要自己到那些文件里添加,会出事情的。
useradd
使用系统默认值以及命令参数来设置用户账户。可以到/etc/default/useradd
或者useradd -D
来查看默认值。
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
一些Linux发行版会把Linux用户和组工具放在/usr/sbin目录下,这个目录可能不在PATH环 境变量里。如果你的Linux系统是这样的话,可以将这个目录添加进PATH环境变量,或者 用绝对文件路径名来使用这些工具
- 新用户会被添加到GID为100的公共组;
- 新用户的HOME目录将会位于/home/loginname;
- 新用户账户密码在过期后不会被禁用;
- 新用户账户未被设置过期日期;
- 新用户账户将bash shell作为默认shell;
- 系统会将/etc/skel目录下的内容复制到用户的HOME目录下;
- 系统为该用户账户在mail目录下创建一个用于接收邮件的文件。
倒数第二个值很有意思。useradd
命令允许管理员创建一份默认的HOME目录配置,然后把它作为创建新用户HOME目录的模板。这样就能自动在每个新用户的HOME目录里放置默认的系统文件。
比如创建一个test用户useradd -m test
,然后查看test目录
total 20
drwx------ 2 test test 4096 Dec 25 16:37 .
drwxr-xr-x. 5 root root 4096 Dec 25 16:37 ..
-rw-r--r-- 1 test test 18 Sep 7 2017 .bash_logout
-rw-r--r-- 1 test test 193 Sep 7 2017 .bash_profile
-rw-r--r-- 1 test test 231 Sep 7 2017 .bashrc
根据之前学过的,这些点文件都是bash shell环境的标准启动文件。
运行本章中提到的用户账户管理命令,需要以root用户账户登录或者通过sudo命令以root 用户账户身份运行这些命令。
useradd命令行参数
参数 | 描述 |
---|---|
-c | comment 给新用户添加备注 |
-d | home_dir 为主目录指定一个名字(如果不想用登录名作为主目录名的话) |
-e | expire_date 用YYYY-MM-DD格式指定一个账户过期的日期 |
-f | inactive_days 指定这个账户密码过期后多少天这个账户被禁用;0表示密码一过期就立即禁用,1表示 禁用这个功能 |
-g | initial_group 指定用户登录组的GID或组名 |
-G | group ... 指定用户除登录组之外所属的一个或多个附加组 |
-k | 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录 |
-m | 创建用户的HOME目录 |
-M | 不创建用户的HOME目录(当默认设置里要求创建时才使用这个选项) |
-n | 创建一个与用户登录名同名的新组 |
-r | 创建系统账户 |
-p | passwd 为用户账户指定默认密码 |
-s | shell 指定默认的登录shell |
-u | uid 为账户指定唯一的UID |
可以在-D选项后跟上一个指定的值来修改系统默认的新用户设置。
参数 | 描述 |
---|---|
-b | default_home 更改默认的创建用户HOME目录的位置 |
-e | expiration_date 更改默认的新账户的过期日期 |
-f | inactive 更改默认的新用户从密码过期到账户被禁用的天数 |
-g | group 更改默认的组名称或GID |
-s | shell 更改默认的登录shell |
能创建就能删除,命令userdel
就是完成这样的工作。
在有大量用户的环境中使用-r参数时要特别小心。你永远不知道用户是否在其HOME目 录下存放了其他用户或其他程序要使用的重要文件。记住,在删除用户的HOME目录之 前一定要检查清楚
命令 | 描述 |
---|---|
usermod | 修改用户账户的字段,还可以指定主要组以及附加组的所属关系 |
passwd | 修改已有用户的密码 |
chpasswd | 从文件中读取登录名密码对,并更新密码 |
chage | 修改密码的过期日期 |
chfn | 修改用户账户的备注信息 |
chsh | 修改用户账户的默认登录shell |
usermod有一些参数
- -l修改用户账户的登录名。
- -L锁定账户,使用户无法登录。
- -p修改账户的密码。
- -U解除锁定,使用户能够登录
修改密码不添加用户默认修改自己的密码,只有root权限才能修改其他人的密码。
用户账户在控制单个用户安全性方面很好用,但涉及在共享资源的一组用户时就捉襟见肘 了。为了解决这个问题,Linux系统采用了另外一个安全概念——组(group)。
组的信息可以到/etc/group
文件当中查看。
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
四个字段分别代表
- 组名
- 组密码
- GID (groupID)
- 属于该组的用户列表
我们可以使用groupadd
命令创建一个新的组。修改组的话用groupmod
。
当我们用ls -al
查看文件的时候,前面总是会出现字符
-rw-r--r-- 1 root root 0 Jul 26 2017 .autorelabel
lrwxrwxrwx. 1 root root 7 Jul 26 2017 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Mar 3 2018 boot
drwxr-xr-x 20 root root 3040 Nov 14 02:06 dev
drwxr-xr-x. 83 root root 4096 Dec 25 16:52 etc
drwxr-xr-x. 4 root root 4096 Dec 25 16:45 home
lrwxrwxrwx. 1 root root 7 Jul 26 2017 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jul 26 2017 lib64 -> usr/lib64
drwx------. 2 root root 16384 Jul 26 2017 lost+found
drwxr-xr-x. 2 root root 4096 Nov 5 2016 media
drwxr-xr-x. 2 root root 4096 Nov 5 2016 mnt
前面这一段这些字符代表什么?第一个字符跟后面九个字符是分开的。 第一个字符
- -代表文件
- d代表目录
- l代表链接
- c代表字符型设备
- b代表块设备
- n代表网络设备
之后有3组三字符的编码。每一组定义了3种访问权限:
- r代表对象是可读的
- w代表对象是可写的
- x代表对象是可执行的
若没有某种权限,在该权限位会出现单破折线。这3组权限分别对应对象的3个安全级别:
- 对象的属主
- 对象的属组
- 系统其他用户
权限 | 二进制 | 八进制 | 描述 |
---|---|---|---|
--- | 000 | 0 | 没有任何权限 |
--x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 有写入和执行权限 |
r-- | 100 | 4 | 只有读取权限 |
r-x | 101 | 5 | 有读取和执行权限 |
rw- | 110 | 6 | 有读取和写入权限 |
rwx | 111 | 7 | 有全部权限 |
改变权限用chmod
,格式是chmod options mode file
改变的方式有两种,一种是用八进制来改变chmod 760 newfile
另一种则标胶复杂一些格式[ugoa…][[+-=][rwxXstugo…]
- u代表用户
- g代表组
- o代表其他
- a代表上述所有 下一步,后面跟着的符号表示你是想在现有权限基础上增加权限(+),还是在现有权限基础 上移除权限(),或是将权限设置成后面的值(=)。 后,第三个符号代表作用到设置上的权限。你会发现,这个值要比通常的rwx多。额外的 设置有以下几项。
- X:如果对象是目录或者它已有执行权限,赋予执行权限。
- s:运行时重新设置UID或GID。
- t:保留文件或目录。
- u:将权限设置为跟属主一样。
- g:将权限设置为跟属组一样。
- o:将权限设置为跟其他用户一样。
chmod o+r newfile
个人更习惯用第一种方便。
改变所属关系用chown
,格式是chown options owner[.group] file
chown dan newfile
文件的所有者就变成了dan
。
假如想改变所有者以及组,可以chmod dan.zu newfile
,所有者是dan
,组是zu
。
只想改变组chmod .zu newfile
组和所有者同样chmod dan. newfile
只有root用户能够改变文件的属主。任何属主都可以改变文件的属组,但前提是属主必须 是原属组和目标属组的成员。
改变组也可以用chgrp
,格式是 chgrp shared newfile
关于文件共享,没有实验,所以还没有学……
Linux操作系统中引入的早的文件系统叫作扩展文件系统(extended filesystem,简记为ext)。 它为Linux提供了一个基本的类Unix文件系统:使用虚拟目录来操作硬件设备,在物理设备上按 定长的块来存储数据。 ext文件系统采用名为索引节点的系统来存放虚拟目录中所存储文件的信息。索引节点系统 在每个物理设备中创建一个单独的表(称为索引节点表)来存储这些文件的信息。存储在虚拟目 录中的每一个文件在索引节点表中都有一个条目。ext文件系统名称中的extended部分来自其跟踪 的每个文件的额外数据,包括:
- 文件名
- 文件大小
- 文件的属主
- 文件的属组
- 文件的访问权限
- 指向存有文件数据的每个硬盘块的指针
Linux通过唯一的数值(称作索引节点号)来引用索引节点表中的每个索引节点,这个值是 创建文件时由文件系统分配的。文件系统通过索引节点号而不是文件全名及路径来标识文件。
早的ext文件系统有不少限制,比如文件大小不得超过2 GB。在Linux出现后不久,ext文件 系统就升级到了第二代扩展文件系统,叫作ext2。
ext2的索引节点表为文件添加了创建时间值、修改时间值和后访问时间值来帮助系统管理 员追踪文件的访问情况。ext2文件系统还将允许的大文件大小增加到了2 TB(在ext2的后期版 本中增加到了32 TB),以容纳数据库服务器中常见的大文件。
日志文件系统为Linux系统增加了一层安全性。它不再使用之前先将数据直接写入存储设备 再更新索引节点表的做法,而是先将文件的更改写入到临时文件(称作日志,journal)中。在数 据成功写到存储设备和索引节点表之后,再删除对应的日志条目。
2001年,ext3文件系统被引入Linux内核中,直到近都是几乎所有Linux发行版默认的文件 系统。它采用和ext2文件系统相同的索引节点表结构,但给每个存储设备增加了一个日志文件, 以将准备写入存储设备的数据先记入日志。
扩展ext3文件系统功能的结果是ext4文件系统(你可能也猜出来了)。ext4文件系统在2008年 受到Linux内核官方支持,现在已是大多数流行的Linux发行版采用的默认文件系统,比如Ubuntu。
略…………
软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问。这些服务 器称为仓库(repository)。可以用PMS工具来搜索新的软件包,或者是更新系统上已安装软件包。
基于Debian的系统,工具有:
- apt-get
- apt-cache
- aptitude
基于Red Hat的系统 常见的有:
- yum:在Red Hat和Fedora中使用。
- urpm:在Mandriva中使用。
- zypper:在openSUSE中使用
这些前端都是基于rpm(RedHat Package Manager)命令行工具的。yum是我常用的一种。也是我重点介绍的一种。
yum list installed
列出已经安装的包。
如果需要找出系统上的某个特定文件属于哪个软件包,yum provides file_name
用来下载yum install package_name
在上面的例子中,我们在运行yum命令之前使用了su-命令。这个命令允许你切换到root 用户。在Linux系统上,#表明你是以root用户身份登录的。应该只有在运行管理性的任务 时才临时切换到root用户(比如安装和更新软件)。也可以使用sudo命令。
更新已安装的包yum update
,更新特定的包yum update package_name
,列出可用更新的已安装包yum list update
卸载软件yum remove package_name
,要删除软件和所有文件yum erase package_name
有时在安装多个软件包时,某个包的软件依赖关系可能会被另一个包的安装覆盖掉。这叫作 损坏的包依赖关系(broken dependency)。
可以尝试yum clean all
,然后试着update,假如解决不了可以试试yum deplist package_name
这个命令显示了所有包的库依赖关系以及什么软件可以提供这些库依赖关系。一旦知道某个 包需要的库,你就能安装它们了。
如果还是没有解决,那么久忽略他。yum update --skip-broken
类似于aptitude系统,yum也是在安装发行版的时候设置的软件仓库。这些预设的仓库就 能很好地满足你的大部分需求。
聪明的系统管理员会坚持使用通过审核的仓库。通过审核的仓库是指该发行版官方网站 上指定的库。如果你添加了未通过审核的库,就失去了稳定性方面的保证,可能陷入损 坏的依赖关系惨剧中。
rpm默认安装路径
路径 | 描述 |
---|---|
/etc | 一些设置文件放置的目录如/etc/crontab |
/usr/bin | 一些可执行文件 |
/usr/lib | 一些程序使用的动态函数库 |
/usr/share/doc | 一些基本的软件使用手册与帮助文档 |
/usr/share/man | 一些man page文件 |
两种都要就想源码安装,请自行百度。
To be continue……