`
qindongliang1922
  • 浏览: 2189402 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117687
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126086
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60040
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71414
社区版块
存档分类
最新评论

跟散仙学shell命令(六)

阅读更多
继上篇散仙写的Linux下环境变量的配置与使用,本篇散仙要写的,依旧是一个非常普遍与常用的功能--Linux下的文件权限,以及用户的管理和一些文件系统管理的命令。


缺乏安全性的系统不是完整的系统,系统上必须要有一套傲虎文件不被非授权用户访问或修改的机制,Linux沿用了Unix文件权限的办法,即允许用户和组基于每个文件和目录的一组安全性设置来访问文件,这也是大多数情况下我们为什么会选择Linux系统作为我们的服务器,而不是选择Windows,重要的一点也是由于Linux比Windows更安全的权限保护机制。

Linux安全系统的核心是用户账户,每个登陆的用户都有一个唯一的用户ID,简称UID,linux系统会使用特定的文件盒工具来跟踪和管理系统上的用户账户。

Linux系统使用一个专门的文件来保存用户的信息,在/etc/passwd这个文件里,记载了一些跟用户相关的信息:
[root@h1 ~]# cat /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
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
search:x:500:500::/home/search:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
[root@h1 ~]# 


root账户是linux系统的超级管理员,通常分配给它的UID是0,linux为系统预留了500以下的UID值,为其他的账户分配500以上的UID。
上面的打印包含了如下的几个信息:
1,登陆用户名
2,用户密码
3,用户账户的UID
4,用户账户的GID
5,用户账户的文本描述
6,用户HOME目录的位置
7,用户默认的shell
上面的密码并不是真正的密码,真正的密码是存储/etc/shadow文件里经过加密的记录:
[root@h1 ~]# cat /etc/shadow
root:$6$Si8fYbVcr2.d4S0U$fic3QZmwpIxCKPuSdO9shq77OLDtEv3e2rAMTR4Q0nE0cGnhWPc8u2PyovZD22P515AeVYZziYW/o/qtT5Hc40:16234:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
mail:*:15980:0:99999:7:::
uucp:*:15980:0:99999:7:::
operator:*:15980:0:99999:7:::
games:*:15980:0:99999:7:::
gopher:*:15980:0:99999:7:::
ftp:*:15980:0:99999:7:::
nobody:*:15980:0:99999:7:::
vcsa:!!:16234::::::
saslauth:!!:16234::::::
postfix:!!:16234::::::
sshd:!!:16234::::::
search:$6$hVzb.NB0$GxpxEGyfRuoXTUGykWy78BhxocOz3dJDQ2Plg7qwzsdYbKQzd59cZ5CKCFJsqnjWfTe8PItQUXz/uW94eao.w1:16237:0:99999:7:::
mysql:!!:16279::::::
[root@h1 ~]# 

它包含的信息如下:
1,与/etc/passwd文件中登陆名对应的登录名
2,加密后的密码
3,自1970年1月1日到此刻的天数
4,多少天后才能更改密码
5,多少天后必须更改密码
6,密码过期前提前多少天提醒用户更改密码
7,密码过期后多少天禁用用户账户
8,用户账户被禁用的日期
9,预留的字段,给将来使用

为什么会使用shadow文件? 使用shadow密码系统后,方便linux更好的控制用户密码。


我们使用useradd -D命令,查看默认的环境信息:
[root@h1 ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@h1 ~]# 


添加一个用户 useradd 用户名
给用户添加密码 passwd 用户名
[root@h1 ~]# useradd solr
[root@h1 ~]# passwd solr
更改用户 solr 的密码 。
新的 密码:
无效的密码: 过短
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
[root@h1 ~]# 


删除一个账户使用userdel命令,如果后面跟上-r参数,会把用户的文件夹给删除掉,如果不加用户的文件夹还会存在。

[root@h1 ~]# cd /home/
[root@h1 home]# ll
总用量 8
drwx------. 7 search search 4096 8月   2 05:32 search
drwx------  2 solr   solr   4096 8月   6 00:31 solr
[root@h1 home]# userdel -r solr
[root@h1 home]# ll
总用量 4
drwx------. 7 search search 4096 8月   2 05:32 search
[root@h1 home]# 


修改用户信息,使用usermod命令,它能用来修改/etc/passwd文件里的大部分字段,
参数信息:
[root@h1 home]# man usermod
USERMOD(8)                                                          USERMOD(8)

名称
       usermod - 修 改 使 用 者 帐 号

语法
       usermod [-c comment] [-d home_dir [ -m]]
               [-e expire_date] [-f inactive_time]
               [-g initial_group] [-G group[,...]]
               [-l login_name] [-s shell]
               [-u uid [ -o]] login

描述
       usermod 命 令 会 参 照 你 命 令 列 上 指 定 的 部 份 修 改 系 统 帐号 档 。 下 列 为 usermod 可 选 用 的 参 数 。

       -c comment
              更 新 使 用 者 帐 号 password 档 中 的 注 解 栏, 一 般 是 使 用 chfn(1) 来 修 改 。

       -d home_dir
              更 新 使 用 者 新 的 登 入 目 录 。如 果 给 定 -m 选 项 , 使 用 者 旧 目 录 会 搬 到 新 的 目 录 去,如 旧 目 录 不 存 在 则 建 个 新 的 。

       -e expire_date
              加 上 使 用 者 帐 号 停 止 日 期 。 日 期 格 式 为 MM/DD/YY.

       -f inactive_days
              帐 号 过 期 几 日 后 永 久 停 权。当 值 为  0  时帐  号 则 立 刻 被 停 权 。 而 当 值 为 -1 时 则 关闭此功能。预 设 值 为 -1。

       -g initial_group
              更 新 使 用 者 新 的 起 始 登 入 群 组 。 群 组 名 须 已 存 在。群 组 ID 必 须 参 照 既 有 的 的 群 组 。 群 组 ID 预 设 值 为 1 。

       -G group,[...]
              定  义 使 用 者 为  一 堆 groups 的 成 员 。 每个 群 组 使 用 "," 区 格 开 来 , 不 可 以 夹 杂 空白 字 元 。 群 组 名 同 -g 选 项 的 限 制 。如
              果 使 用 者 现 在 的 群 组 不 再 此 列 , 则 将 使 用 者 由 该群 组 中 移 除 。

       -l login_name
              变 更 使 用 者 login 时 的 名 称 为 login_name 。其 于 不 变 。 特 别 是 , 使 用 者 目 录 名 应 该 也 会 跟 着 更 动 成 新的 登 入 名 。

       -s shell
              指 定 新 登 入 shell 。 如 此 栏 留 白 , 系 统 将 选 用 系 统 预 设 shell 。

       -u uid 使 用 者 ID 值 。必 须 为 唯 一 的 ID 值 , 除 非 用 -o 选 项 。 数字 不 可 为 负 值。预 设 为 最 小  不  得 小 于 999 而 逐 次增 加 。  0~  999
              传  统 上 是 保 留 给 系 统 帐 号 使 用 。使 用 者 目 录 树 下 所 有 的 档 案 目 录 其 user ID 会 自 动 改 变 。放 在 使 用 者 目 录 外 的 档 案
              则 要 自 行 手 动 更 动 。

警告
       usermod 不 允 许 你 改 变  正 在线 上 的 使 用 者 帐 号 名 称 。当 usermod 用 来 改 变 user ID, 必 须 确 认 这 名 user 没 在 电 脑 上 执行 任 何 程  序
       。你 需 手 动 更 改 使 用 者 的 crontab 档 。也 需 手 动 更 改 使 用 者 的 at 工 作 档 。采 用 NIS server 须 在 server 上 更 动 相 关 的 NIS 设 定 。

档案
       /etc/passwd - 使 用 者 帐 号 资 讯
       /etc/shadow - 使 用 者 帐 号 资 讯 加 密
       /etc/group - 群 组 资 讯

相关文件
   


几个有用的参数:
-l修改用户登陆名  例子: usermod -l  新用户名  旧用户名
-L参数用来锁定账户,这样用户无法登陆 例子: usermod -L 用户名
-p参数用来修改用户的密码  一般使用passwd来修改密码 例子: passwd  用户名
-U用来解除锁定 usermod -U 用户名

最后一个有用的命令时chage命令,用来帮助管理账户的有效期,这样以来我们就可以建一些临时账户了:
1,-d参数设置上次修改密码到现在的天数
2,-E参数设置密码过期的日期
3,-I设置密码过期到锁定账户的天数
4,-m设置修改密码最少要多少天
5,-W设置密码过期前多久开始出现提醒信息

下面看下如何在linux下使用组,组信息在存在/etc/group文件里:
[root@h1 ~]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
tty:x:5:
disk:x:6:
lp:x:7:daemon
mem:x:8:
kmem:x:9:
wheel:x:10:
mail:x:12:mail,postfix
uucp:x:14:
man:x:15:
games:x:20:
gopher:x:30:
video:x:39:
dip:x:40:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
floppy:x:19:
vcsa:x:69:
utmp:x:22:
utempter:x:35:
cdrom:x:11:
tape:x:33:
dialout:x:18:
saslauth:x:76:
postdrop:x:90:
postfix:x:89:
fuse:x:499:
sshd:x:74:
search:x:500:
mysql:x:27:
[root@h1 ~]# 

系统的组ID通常小于500,用户的GID会从500开始分配,group文件里的4个字段如下:
1,组名
2,组密码
3,GID
4,属于改组的用户列表

创建新组 groupadd  组名
添加用户到组里usermod -G 组名
修改组名 groupmod -n 新组名 旧组名

GID是一个重要的属性,名字不会影响权限,GID关联着各个权限的分配


下面着重说下,linux具体权限的分配:

[root@h1 ~]# ls -l
总用量 328468
-rw-r--r--  1 root   root 143775368 7月  28 19:30 abc1.txt
-rw-------. 1 root   root      1087 6月  13 19:06 anaconda-ks.cfg
-rw-r--r--  1 root   root        52 7月  31 21:29 count2.txt
-rw-r--r--  1 root   root        52 7月  31 19:46 count.txt
-rw-r--r--. 1 root   root  96183833 6月   9 17:27 hadoop-2.2.0.tar.gz
-rw-r--r--  1 root   root         1 7月  31 21:25 hh.txt
drwxr-xr-x  3 root   root      4096 7月  29 04:47 hivesrc
-rw-r--r--. 1 root   root      2111 6月  16 13:10 initserver.sh
-rw-r--r--. 1 root   root      7995 6月  13 19:06 install.log
-rw-r--r--. 1 root   root      3384 6月  13 19:06 install.log.syslog
drwxr-xr-x  2 root   root      4096 7月  31 21:19 intest
lrwxrwxrwx  1 root   root        12 7月  31 21:45 jdk -> jdk1.7.0_25/
drwxr-xr-x. 8 search  143      4096 6月   6 2013 jdk1.7.0_25
-rwx------. 1 root   root  96316511 11月 20 2013 jdk-7u25-linux-x64.gz
drwxr-xr-x  3 root   root      4096 7月  31 21:33 li
drwxr-xr-x  3 root   root      4096 7月   9 04:08 lo
drwxr-xr-x  3 root   root      4096 7月   9 04:08 login
-rw-r--r--  1 root   root      1048 6月  19 03:31 setlimit.sh
drwxr-xr-x  2 root   root      4096 8月   5 01:44 test
drwxr-xr-x  3 root   root      4096 6月  20 02:51 tsethadoop
[root@h1 ~]# 


如上
1,-代表文件
2,d代表目录
3,l代表链接
4,c代表字符型设备
5,b代表设备
6,n代表网络设备
之后有3组字符的码,每一组字符码表示三重的权限
r代表对象是可读的
w代表对象是可写的
x代表对象是可执行的
如果没有某种权限,该占位符会被替换成单破折线,每3个字符是一组,
分别代表,对象的属主,对象的属组,系统的其他用户。


默认的文件权限是由umask得来的。
[root@h1 ~]# umask 
0022
[root@h1 ~]# 


默认目录的权限是777读写执行,文件的权限是666读写,减去umask的值后,就是剩下的权限值。这个值可以在/etc/profile里面设定。


设置权限的命令
chomd 700 文件或目录
此外还有一些+-=等符号来设置一些权限
比如,赋值可执行权限 chmod u+x 文件或目录
移除可执行权限chmod u-x 文件名或目录
-X代表赋值可执行权限
-s运行时设置UID或GID
-t保留文件或目录
-u将权限设置属主一样
-g将权限设置属组一样
-o将权限设置跟其他用户一样

除了这些,还有一个非常常见的命令
chmod -R 文件或目录,递归的赋值权限。



如果想要改变属主关系:
chown -R  用户名:用户名 /文件名或目录



















0
0
分享到:
评论

相关推荐

    Android执行shell命令(转)

    在Android系统中,有时我们需要执行一些底层操作,如文件管理、系统调试或自动化测试,这时候就需要用到shell命令。本文将深入探讨如何在Android平台上执行shell命令,以及它在实际开发中的应用。 首先,Android...

    在python 中实现运行多条shell命令

    ### 在Python中实现运行多条Shell命令 在Python编程中,有时我们需要调用系统的Shell命令来完成特定的任务,比如文件操作、系统管理等。本文将详细介绍如何在Python中执行多条Shell命令,并探讨不同的实现方法及其...

    shell命令解释器

    **Shell命令解释器**是Linux操作系统中的核心组件之一,它是一个用户与系统交互的界面,让用户能够通过输入命令来执行各种系统操作。在Linux的世界里,shell不仅是一个命令行接口,还是一个强大的脚本编程语言,允许...

    android执行shell命令

    在Android系统中,有时我们需要执行一些底层操作,这时就可能会用到shell命令。shell命令是Linux或类Unix系统中的命令行工具,通过它们可以进行文件管理、系统控制、进程交互等众多操作。在Android这样的基于Linux...

    java调用shell命令.pdf

    Java 调用 Shell 命令 在 Java 中调用 Shell 命令是非常常见的操作,特别是在需要执行系统命令或脚本时。在这个例子中,我们将看到如何使用 Java 调用 Shell 命令,并介绍相关的知识点。 Java 调用 Shell 命令的...

    shell命令文档 中文版

    在IT领域,Shell命令是Linux和Unix操作系统中的一个强大工具,它允许用户通过文本界面与操作系统进行交互。这本书“shell命令文档 中文版”提供了一个全面的指南,涵盖了所有基本到高级的Shell命令,这对于系统管理...

    Linux下Shell命令解释步骤程序实现

    Linux Shell 命令解释步骤程序实现 Linux Shell 命令解释是 Linux 操作系统中最基本也是最重要的一部分,它负责处理用户与操作系统之间的交互动作,并且给出相应的操作系统的输出结果。 Shell 基本上是一个命令...

    ubuntu_shell命令学习

    ubuntu_shell命令学习

    shell命令常用shell命令

    Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是...

    shell命令的用法

    shell 命令的用法 Shell 命令是 Linux 操作系统中最基本也是最重要的工具之一,它提供了强大的命令行接口,能够帮助用户快速高效地完成各种任务。了解 shell 命令的用法是每一个 Linux 用户的必备知识。 1. cp ...

    Android程序中(APK程序)执行Adb shell 命令

    Android Debug Bridge(ADB)就是一个强大的工具,允许开发者从计算机上对连接的Android设备进行各种操作,包括发送shell命令。本篇将深入探讨如何在APK程序中执行Adb shell命令以及它与高级语言之间的调用关系。 ...

    c++builder的Android程序中执行Shell命令

    本单元实现了一个伪的Shell,可以用于在Android程序中执行Shell命令,如果需要Root权限,则在执行前,调用AskForRoot方法来获取用户的Root授权,如果不再需要在Root账号下执行命令,则调用ExitRoot方法来退出Root...

    Shell命令大全 PDF

    Linux Shell命令是Linux操作系统中用于执行各种操作的指令集,从文件管理到系统维护,Shell命令无所不包。学习Shell命令对于Linux系统管理员和程序员来说是基础而重要的技能。本篇内容将详细介绍Shell命令在Linux...

    python调用shell命令

    ### Python调用Shell命令知识点详解 #### 一、引言 在进行系统自动化运维或脚本编程时,经常需要从Python脚本中调用Shell命令来执行特定任务,如文件管理、网络操作等。本文将详细介绍如何使用Python来调用Shell...

    jenkins shell 命令,自动部署命令.txt

    放在Post Steps 的shell命令 ,一键自动部署(2021最新版)

    android 给app授权 执行shell命令

    在Android平台上,有时候开发者需要超越普通应用程序的权限范围,例如执行系统级别的操作,这就涉及到给APP授权和执行Shell命令。Android系统默认是以安全为优先,不允许应用无限制地执行shell命令,但通过获取Root...

    shell命令解析器

    Shell命令解析器是Linux操作系统中的一个核心组件,它充当用户与操作系统内核之间的接口,使得用户可以通过命令行界面执行各种操作。在本文中,我们将深入探讨shell命令解析器的工作原理,以及如何使用C语言编程来...

    ubuntu 学习shell 命令教程

    相信喜欢linux的同志会喜欢的 当然针对的是ubuntu 不过 我以后会提供更多的 呵呵

    Android-ExecuteShell是一个可以方便的执行shell命令的Android开源库

    1. **执行shell命令**: ExecuteShell提供了简洁的API,允许开发者在Android应用中执行各种shell命令,包括但不限于ls, cd, mkdir, rm等,极大地扩展了Android应用的功能。 2. **异步与同步执行**: 库支持同步和异步...

Global site tag (gtag.js) - Google Analytics