内容源于: 鸟哥的linux私房菜
链接如下:
账号与组群
[passwd文件][shadow文件][group文件][groups][newgrp]
使用者标识符: UID 与 GID
- 使用者 ID (User ID ,简称 UID)
- 群组 ID (Group ID ,简称 GID)
/etc/passwd 文件
[root@www ~]# head -n 4 /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
- 账号名称:就是账号名称
- 密码:账户密码字段
- UID:使用者标识符.通常 Linux 对于 UID 有几个限制如下:
id 范围 该 ID 使用者特性 0
(系统管理员)当 UID 是 0 时,代表这个账号是『系统管理员』! 所以当你要让其他的账号名称也具有 root 的权限时,将该账号的 UID 改为 0 即可。 这也就是说,一部系统上面的系统管理员不见得只有 root 喔! 不过,很不建议有多个账号的 UID 是 0 啦~ 1~499
(系统账号)保留给系统使用的 ID,其实除了 0 之外,其他的 UID 权限与特性并没有不一样。默认 500 以下的数字让给系统作为保留账号只是一个习惯。
由于系统上面启动的服务希望使用较小的权限去运行,因此不希望使用 root 的身份去运行这些服务, 所以我们就得要提供这些运行中程序的拥有者账号才行。这些系统账号通常是不可登陆的, 所以才会有我们在第十一章提到的 /sbin/nologin 这个特殊的 shell 存在。
根据系统账号的由来,通常系统账号又约略被区分为两种:
1~99:由 distributions 自行创建的系统账号;
100~499:若用户有系统账号需求时,可以使用的账号 UID。500~65535
(可登陆账号)给一般使用者用的。事实上,目前的 linux 核心 (2.6.x 版)已经可以支持到 4294967295 (2^32-1) 这么大的 UID 号码喔! - GID:登陆时候默认的用户组 ID
- 用户信息说明栏:这个字段基本上并没有什么重要用途,只是用来解释这个账号的意义而已
- 家目录:这是用户的家目录登陆时候的进入的默认目录和每个用户自己的工作目录
- Shell:登入时候取得的 Shell 环境
/etc/shadow 文件
[root@www ~]# head -n 4 /etc/shadow
root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7::: <==底下说明用
bin:*:14126:0:99999:7:::
daemon:*:14126:0:99999:7:::
adm:*:14126:0:99999:7:::
- 账号名称:密码对应的账户
- 密码:经过加密的密码
- 最近更动日期:更动密码那一天的日期,注释:计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 而累加的日期,如 1971 年 1 月 1 日则为 366 )
- 不更动的天数(与第 3 字段相比):在一次密码变更后要几天才可以变更密码
- 需重新变更天数(与第 3 字段相比):强制性要求用户在多少天内必须变更一次密码
- 需变更期限前警告天数(与第 5 字段相比):在密码需要重新变更的前几天内会发出要求用户变更密码的警告
- 宽限时间 / 密码失效日(与第 5 字段相比):在需要变更密码的天数内若没有没有修改密码则时,然后若在宽限时间修改密码则账号还可以继续使用,但若在宽限时间内没更改密码的话账号就会失效,即无法在使用
- 账号失效日期:这个字段表示: 这个账号在此字段规定的日期之后,将无法再使用
- 保留:
/etc/group 文件
[root@www ~]# head -n 4 /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
- 组名:用户组名称
- 群组密码:给『群组管理员』使用的,同样的,密码已经移动到 /etc/gshadow 去
- GID:群组的 ID
- 此群组支持的账号名称
UID / GID 与口令之间的关系
groups: 有效与支持群组的观察
[dmtsai@www ~]$ groups
dmtsai users
newgrp: 有效群组的切换
[dmtsai@www ~]$ newgrp users
[dmtsai@www ~]$ groups
users dmtsai
[dmtsai@www ~]$ touch test2
[dmtsai@www ~]$ ll
-rw-rw-r-- 1 dmtsai dmtsai 0 Feb 24 17:26 test
-rw-r--r-- 1 dmtsai users 0 Feb 24 17:33 test2newgrp 这个命令,这个命令可以变更目前用户的有效群组, 而且是以一个 shell 来提供这个功能的, 输入 exit 来退出
例行工作
两种工作排程的方式:
- 一种是例行性的,就是每隔一定的周期要来办的事项(crontab,anacron)
- 一种是突发性的,就是这次做完以后就没有的那一种 (at)
at:
at 是个可以处理仅运行一次就结束排程的命令,不过要运行 at 时, 必须要有 atd 这个服务,不过并非所有的 Linux distributions 都默认会把它打开的
[root@www ~]# /etc/init.d/atd restart
正在停止 atd: [ 确定 ]
正在启动 atd: [ 确定 ]# 再配置一下启动时就启动这个服务,免得每次重新启动都得再来一次!
[root@www ~]# chkconfig atd onat 的运行方式
我们使用 at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,并且系统会将该项 at 工作独立出你的 bash 环境中,所以at 的运行与终端机环境无关,而所有 standard output/standard error output 都会传送到运行者的 mailbox 中,而不会在终端显示信息,该工作便能等待 atd 这个服务的取用与运行了,即使系统离线后 at 的工作仍能继续运行
限制 at 的使用权限
利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制,加上这两个文件后, at 的工作情况其实是这样的:
- 先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
- 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯;
- 如果两个文件都不存在,那么只有 root 可以使用 at 这个命令
at 基本语法
[root@www ~]# at [-mldv] TIME
[root@www ~]# at -c 工作号码
选项与参数:
-m :当 at 的工作完成后,即使没有输出信息,亦以 email 通知使用者该工作已完成.
-l :at -l 相当於 atq,列出目前系统上面的所有该使用者的 at 排程;
-d :at -d 相当於 atrm ,可以取消一个在 at 排程中的工作;
-v :可以使用较明显的时间格式列出 at 排程中的工作列表;
-c :可以列出后面接的该项工作的实际命令内容.TIME:时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有:
HH:MM ex> 04:00
在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作.
HH:MM YYYY-MM-DD ex> 04:00 2009-03-17
强制规定在某年某月的某一天的特殊时刻进行该工作!
HH:MM[am|pm] [Month] [Date] ex> 04pm March 17
也是一样,强制在某年某月某日的某时刻进行!
HH:MM[am|pm] + number [minutes|hours|days|weeks]
ex> now + 5 minutes ex> 04pm + 3 days
就是说,在某个时间点『再加几个时间后』才进行.
crontab:
crontab 这个命令所配置的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等.crontab 除了可以使用命令运行外,亦可编辑 /etc/crontab 来支持.至於让 crontab 可以生效的服务则是 crond 这个服务!
限制 crontab 的权限
- /etc/cron.allow:
将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;- /etc/cron.deny:
将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab .以优先顺序来说, /etc/cron.allow 比 /etc/cron.deny 要优先, 而判断上面,这两个文件只选择一个来限制而已,因此,建议你只要保留一个即可, 免得影响自己在配置上面的判断!一般来说,系统默认是保留 /etc/cron.deny , 你可以将不想让他运行 crontab 的那个使用者写入 /etc/cron.deny 当中,一个帐号一行!
当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的喔!举例来说, dmtsai 使用 crontab 后, 他的工作会被纪录到 /var/spool/cron/dmtsai 里头去!但请注意,不要使用 vi 直接编辑该文件, 因为可能由於输入语法错误,会导致无法运行 cron 喔!另外, cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中,所以罗,如果你的 Linux 不知道有否被植入木马时,也可以搜寻一下 /var/log/cron 这个登录档!
基本语法
[root@www ~]# crontab [-u username] [-l|-e|-r]
选项与参数:
-u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e :编辑 crontab 的工作内容
-l :查阅 crontab 的工作内容
-r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑.范例一:用 dmtsai 的身份在每天的 12:00 发信给自己
[dmtsai@www ~]$ crontab -e
# 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行.
0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
#分 时 日 月 周 |<==============命令串========================>|
默认情况下,任何使用者只要不被列入 /etc/cron.deny 当中,那么他就可以直接下达『 crontab -e 』去编辑自己的例行性命令了!整个过程就如同上面提到的,会进入 vi 的编辑画面, 然后以一个工作一行来编辑,编辑完毕之后输入『 :wq 』储存后离开 vi 就可以了! 而每项工作 (每行) 的格式都是具有六个栏位,这六个栏位的意义为:
代表意义 分钟 小时 日期 月份 周 命令 数字范围 0-59 0-23 1-31 1-12 0-7 呀就命令啊 比较有趣的是那个『周』喔!周的数字为 0 或 7 时,都代表『星期天』的意思!另外, 还有一些辅助的字符,大概有底下这些:
特殊字符 代表意义 *(星号) 代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * , 就代表著『不论何月、何日的礼拜几的 12:00 都运行后续命令』的意思! ,(逗号) 代表分隔时段的意思.举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是: 0 3,6 * * * command时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用!-(减号) 代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作: 20 8-12 * * * command仔细看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都适用的意思!/n(斜线) 那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则:
*/5 * * * * command很简单吧!用 * 与 /5 来搭配,也可以写成 0-59/5 ,相同意思!
anacron:
在处理非 24 小时一直启动的 Linux 系统的 crontab 的运行!所以 anacron 并不能指定何时运行某项任务, 而是以天为单位或者是在启动后立刻进行 anacron 的动作,他会去侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务运行一遍后,anacron 就会自动停止了
anacron 其实也是透过 crontab 来运行的!因此 anacron 运行的时间通常有两个,一个是系统启动期间运行,一个是写入 crontab 的排程中基本语法
[root@www ~]# anacron [-sfn] [job]..
[root@www ~]# anacron -u [job]..
选项与参数:
-s :开始一连续的运行各项工作 (job),会依据时间记录档的数据判断是否进行
-f :强制进行,而不去判断时间记录档的时间戳记
-n :立刻进行未进行的任务,而不延迟 (delay) 等待时间;
-u :仅升级时间记录档的时间戳记,不进行任何工作
job :由 /etc/anacrontab 定义的各项工作名称。