Linux认证 百分网手机站

Linux用户/文件系统管理详解(2)

时间:2017-06-02 15:13:53 Linux认证 我要投稿

Linux用户/文件系统管理详解

  # pwunconv

  4)、编辑每个用户的密码对照文件,范例文件passwd.txt内容如下:

  user001:密码

  user002:密码

  user003:密码

  user004:密码

  user005:密码

  user006:密码

  5)、以root身份执行命令/usr/sbin/chpasswd,创建用户密码,chpasswd会将经过/usr/bin/passwd命令编码过的密码写入/etc/passwd的密码栏。

  # chpasswd < passwd.txt

  6)、确定密码经编码写入/etc/passwd的密码栏后,执行命令/usr/sbin/pwconv将密码编码为shadow password,并将结果写入/etc/shadow。

  # pwconv

  这样就完成了大量用户的创建了,之后您可以到/home下检查这些用户宿主目录的权限设置是否都正确,并登录验证用户密码是否正确。

  (5)、赋予普通用户特殊权限

  在Linux系统中,管理员往往不止一人,若每位管理员都用root身份进行管理工作,根本无法弄清楚谁该做什么。所以最好的方式是:管理员创建一些普通用户,分配一部分系统管理工作给他们。

  我们不可以使用su让他们直接变成root,因为这些用户都必须知道root的密码,这种方法很不安全,而且也不符合我们的分工需求。一般的做法是利用权限的设置,依工作性质分类,让特殊身份的用户成为同一个工作组,并设置工作组权限。例如:要wwwadm这位用户负责管理网站数据,一般Apache Web Server的进程httpd的所有者是www,您可以设置用户wwwadm与www为同一工作组,并设置Apache默认存放网页目录/usr /local/httpd/htdocs的工作组权限为可读、可写、可执行,这样属于此工作组的每位用户就可以进行网页的管理了。

  但这并不是最好的解决办法,例如管理员想授予一个普通用户关机的权限,这时使用上述的办法就不是很理想。这时您也许会想,我只让这个用户可以以root身份执行shutdown命令就行了。完全没错,可惜在通常的Linux系统中无法实现这一功能,不过已经有了工具可以实现这样的功能——sudo。

  sudo通过维护一个特权到用户名映射的数据库将特权分配给不同的用户,这些特权可由数据库中所列的一些不同的命令来识别。为了获得某一特权项,有资格的用户只需简单地在命令行输入sudo与命令名之后,按照提示再次输入口令(用户自己的口令,不是root用户口令)。例如,sudo允许普通用户格式化磁盘,但是却没有赋予其他的root用户特权。

  1)、sudo工具由文件/etc/sudoers进行配置,该文件包含所有可以访问sudo工具的用户列表并定义了他们的特权。一个典型的/etc/sudoers条目如下:

  #visudo -f /etc/sudoers

  liming ALL=(ALL) ALL

  这个条目使得用户liming作为超级用户访问所有应用程序,如用户liming需要作为超级用户运行命令,他只需简单地在命令前加上前缀sudo。因此,要以root用户的身份执行命令ueradd可以输入如下命令:

  # sudo /usr/sbin/useradd sam

  注意:命令要写绝对路径,/usr/sbin默认不在普通用户的搜索路径中,或者加入此路径:PATH=$PATH:/usr/sbin;export PATH。另外,不同系统命令的路径不尽相同,可以使用命令“whereis 命令名”来查找其路径。

  2)、允许gem用户在主机sun上执行reboot和shutdown命令,在/etc/sudoers中加入:

  gem sun=/usr/sbin/reboot,/usr/sbin/shutdown –h now

  注意:命令一定要使用绝对路径,以避免其他目录的同名命令被执行,从而造成安全隐患。

  然后保存退出,gem用户想执行reboot命令时,只要在提示符下运行下列命令:

  $ sudo /usr/sbin/reboot

  输入正确的密码,就可以重启服务器了。

  如果您想对一组用户进行定义,可以在组名前加上%,对其进行设置,如:

  %cuug ALL=(ALL) ALL

  3)、另外,还可以利用别名来简化配置文件。别名类似组的概念,有用户别名、主机别名和命令别名。多个用户可以首先用一个别名来定义,然后在规定他们可以执行什么命令的时候使用别名就可以了,这个配置对所有用户都生效。主机别名和命令别名也是如此。注意使用前先要在/etc/sudoers中定义:User_Alias, Host_Alias, Cmnd_Alias项,在其后面加入相应的名称,也以逗号分隔开就可以了,举例如下:

  Host_Alias SERVER=no1

  User_Alias ADMINS=liming,gem

  Cmnd_Alias SHUTDOWN=/usr/sbin/halt,/usr/sbin/shutdown,/usr/sbin/reboot

  ADMINS SERVER=SHUTDOWN

  4)、ADMINS ALL=(ALL) NOPASSWD: ALL

  表示允许ADMINS不用口令执行一切操作,其中“NOPASSWD:”项定义了用户执行操作时不需要输入口令。

  5)、$ sudo –l这个参数可以使用户查看自己目前可以在sudo中执行哪些命令。

  6)、在命令提示符下键入sudo命令会列出所有参数,其他一些参数如下:

  -V 显示版本编号。

  -h 显示sudo命令的使用参数。

  -v 因为sudo在第一次执行时或是在N分钟内没有执行(N预设为5)会询问密码。这个参数是重新做一次确认,如果超过N分钟,也会问密码。

  -k 将会强迫使用者在下一次执行sudo时询问密码(不论有没有超过N分钟)。

  -b 将要执行的命令放在背景执行。

  -p prompt 可以更改问密码的提示语,其中%u会替换为使用者的账号名称,%h会显示主机名称。

  -u username/#uid 不加此参数,代表要以root的身份执行命令,而加了此参数,可以以username的身份执行命令(#uid为该username的UID)。

  -s 执行环境变量中的 SHELL 所指定的 Shell ,或是 /etc/passwd 里所指定的 Shell。

  -H 将环境变量中的HOME(宿主目录)指定为要变更身份的使用者的宿主目录。(如不加-u参数就是系统管理者root。)

  二、文件管理

  1、当创建一个文件的时候,系统保存了有关该文件的全部信息,包括:

  " 文件的位置。

  " 文件类型。

  " 文件长度。

  " 哪位用户拥有该文件,哪些用户可以访问该文件。

  " i节点。

  " 文件的修改时间。

  " 文件的权限位。

  2、现在用ls -l命令查看该目录下文件的属性

  [root@Linux_chenwytemp]# ls -l

  总用量 36

  -rw-r--r-- 1 root root 0 10月 19 20:16 temp

  总用量 36:是ls所列出的入口占用空间的字节数(以K为单位)。

  1该文件硬链接的数目。

  root:文件属主。

  root:文件属组(一般是文件属主所在的缺省组。)

  34890:字节来表示的文件长度,记住,不是K字节!

  10月 19 20:17:件的更新时间。

  temp:件名。

  -rw-r--r--:这是该文件的权限位。

  第一个横杠:指定文件类型,表示该文件是一个普通文件。(所创建的文件绝大多数都是普通文件或符号链接文件)。

  除去最前面的横杠,一共是9个字符,他们分别对应9个权限位。通过这些权限位,可以设定用户对文件的访问权限。对这两个文件的精确解释是:

  rw-:前三位,文件属主可读、写

  r--:中间三位,组用户可读

  r--:最后三位,其他用户只可读

  在创建的时候并未给属主赋予执行权限,在用户创建文件时,系统不会自动地设置执行权限位。这是出于加强系统安全的考虑。

  3、文件类型

  前面提到的第一条横杠,表示该文件是普通文件型

  文件类型有七种,它可以从ls -l命令所列出的结果的第一位看出.

  七种类型:

  d 目录。

  l 符号链接(指向另一个文件)。

  s 套接字文件。

  b 块设备文件。

  c 字符设备文件。

  p 命名管道文件。

  - 普通文件,或者更准确地说,不属于以上几种类型的文件。

  4、文件的权限位中中每一组字符中含有三个权限位:

  r 读权限

  w 写/更改权限

  x 执行该脚本或程序的权限

  5、使用chmod来改变权限位

  (1)、符号模式

  chmod命令的一般格式为:

  chmod[who] operator [permission] filename

  w h o的含义是:

  u 文件属主权限。

  g 属组用户权限。

  o 其他用户权限。

  a 所有用户(文件属主、属组用户及其他用户)。

  o p e r at o r的含义:

  + 增加权限。

  - 取消权限。

  = 设定权限。

  p e r m is s i o n的含义

  r 读权限。

  w 写权限。

  x 执行权限。

  s 文件属主和组set-ID。

  t 粘性位*。

  l 给文件加锁,使其他用户无法访问。

  *在列文件或目录时,有时会遇到“ t”位。“t”代表了粘性位。如果在一个目录上出现“t”位,这就意味着该目录中的文件只有其属主才可以删除,即使某个属组用户具有和属主同等的权限。不过有的系统在这一规则上并不十分严格。

  特殊权限:

  a、t权限是粘着位,例:TMP目录下,任何人都有读写执行权限,但是不是任何人对里边的可写权限的文件就可以删除呢,当然不是了,这个就是粘着位的做用,只有所有者才有权删除自已的文件,当然,ROOT除外

  b、关文件安全的另一种权限,

  i权限 也就是不可修改权限 例:chattr u+i aaa 则aaa文件就不可修改,无论任何人,如果删除就用u-i就好了

  a权限 也就是只追加权限,对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。方法和i权限一样加。

  如果想要看某个文件是不是有这个权限,用lsattr filename就行了

  例如:

  chmod a+x temp 在temp上给所有用户执行权限。

  (2)、绝对模式

  文件属主:r w x:4 + 2 + 1

  属组用户:r w x:4 + 2 + 1

  其他用户:r w x:4 + 2 + 1

  temp文件具有这样的权限:

  r wx r - - r - -

  4+2+1 4 4

  7 4 4

  把相应权限位所对应的值加在一起,就是7 4 4。

  通过使用- R选项连同子目录下的文件一起设置:

  chmod -R 664/temp/*

  6、目录权限

  目录的权限位和文件有所不同。目录的读权限位意味着可以列出其中的内容。写权限位意味着可以在该目录中创建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位。执行权限位则意味着搜索和访问该目录。

  7、suid/guid

  (1)、为什么要使用这种类型的脚本?

  例如有几个着几个大型的数据库系统,对它们进行备份需要有系统管理权限。可以写几个脚本,并设置了它们的g u i d,这样就可以指定的一些用户来执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其他管理任务,但是在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限

  (2)、设置suid/guid

  设置s u i d:将相应的权限位之前的那一位设置为4;

  设置g u i d:将相应的权限位之前的那一位设置为2;

  两者都置位:将相应的权限位之前的那一位设置为4+2=6。

  设置了这一位后x的位置将由s代替。

  记住:在设置s u i d或g u i d的同时,相应的执行权限位必须要被设置。

  例如,如果希望设置g u i d,那么必须要让该用户组具有执行权限。

  如果想要对文件l o g i n[它当前所具有的权限为rwx rw- r-- (741)]设置s u i d,,可在使用c h m o d命令时在该权限数字的前面加上一个4,即chmod 4741,这将使该文件的权限变为r w s rw- r - -。

  #chmod4741 login

  (3)、还可以使用符号方式来设置s u i d / g u i d。如果某个文件具有这样的权限: rwx r-x r- x,那么可以这样设置其s u i d: