欢迎各位兄弟 发布技术文章
这里的技术是共享的
权限管理:
r:
w:
x:
三类用户
u: 属主
g: 属组
o: 其它用户
chown: 改变文件属主 (只有管理员才可以改变文件属主)
chown USERNAME file,........
-R: recursion 递归 修改目录入其内部文件或子目录的属主
--reference=/path/to/somefile file,....... (不需要 USERNAME) 引用,参考 把file等等文件的属主修改为与reference引用的文件一样 (事实上是属主和属组同时改的)
chown USERNAME:GRPNAME file,...... 同时改属主和属组 (USERNAME省掉 直接 :属组 ,此时只改属组)
chown -R USERNAME:GRPNAME directory 支持递归修改
chown USERNAME.GRPNAME file,...... 同时改属主和属组 (USERNAME省掉 直接 .属组 ,此时只改属组) 此时把冒号换成点号
chgrp:改变文件属组 与chown用法差不多一样 (只有管理员才可以改变文件属主)
chgrp GRPNAME file,........
-R: recursion 递归 修改目录入其内部文件或子目录的属组
--reference=/path/to/somefile file 引用,参考 把file等等文件的属组修改为与reference引用的文件一样
#man chown
# tail /etc/passwd
# ls /tmp -lt | more
# chown /tmp/hadoop abc
# ls -lt abc
# ls -lt /tmp |more
# chown hadoop /tmp/aaaa (同样,也可目录)
# ls -lt /tmp |more
# ls -ld /tmp/aaaa |more (由于是目录 加d选项,否则看到的是目录下的文件)
# ls -la /tmp/aaaa |more
# chown -R hadoop /tmp/aaaa/
# ls -ld /tmp/aaaa |more
# ls -la /tmp/aaaa |more
# ls -lt |more
# chown --reference=/tmp/abc ccc.txt
# ls -lt |more
# ls -lt |more
# chgrp mygroup /tmp/abc
# ls -lt |more
# chgrp -R mygroup /tmp/aaaa/
# ls -ld /tmp/aaaa |more
# ls -la /tmp/aaaa |more
# ls -lt |more
# chown root:root abc
# ls -l /tmp/abc
# chown :hadoop abc
# ls -l /tmp/abc
# ls -l /tmp/ |more
# chown --reference=aaaa 6379.conf 事实上 --reference 是属主属组一起改的
chmod: 修改文件的权限 权限模式叫mode
修改三类用户的权限
chmod MODE file,....
-R
--reference=/path/to/somefile file,...... 它也支持 -R
修改某类用户或某些类用户权限:
u,g,o,a a表示所有类别
chmod 用户类别=MODE file,......
修改某类用户的某位或某些位权限:
u,g,o,a
chmod 用户类别 +|- MODE file,......
# ls -l /tmp/ |more
# chmod 750 /tmp/abc
# ls -la /tmp/abc rwxr-x---
# chmod 75 /tmp/abc 75 就是 075
# ls -la /tmp/abc
# chmod 5 /tmp/abc 5 就是 005
# ls -la /tmp/abc
# ls -la /tmp/ |more
# chmod --reference=6379.conf abc
# ls -la /tmp/ |more
# ls -l /tmp |more
# chmod u=rwx /tmp/abc
# ls -l /tmp/abc
# chmod g=7 /tmp/abc
# chmod g=rw /tmp/abc 当然也可以写成 rw-
# ls -l /tmp/abc
# chmod o=rx /tmp/abc 当然也可以写成 r-x
# ls -l /tmp/abc
# chmod g=r,o=r /tmp/abc
# ls -l /tmp/abc
# chmod go=rw /tmp/abc g,o 可以合并写
# ls -l /tmp/abc
# chmod g=rx,o= /tmp/abc
# ls -l /tmp/abc
三类用户一样的话 就是 a=某某某 或 ugo=某某某
# chmod u-x /tmp/abc
# ls -l /tmp/abc
# chmod u+x,g-x /tmp/abc
# ls -l /tmp/abc
# chmod u-x /tmp/abc
# ls -l /tmp/abc
# chmod a+x /tmp/abc a其实是可以省略的 变为 +x
# ls -l /tmp/abc
# chmod -x /tmp/abc a其实是可以省略的 变为 -x
# ls -l /tmp/abc
# chmod +x /tmp/abc
# ls -l /tmp/abc
# chmod u-wx /tmp/abc
# ls -l /tmp/abc
练习:
1,新建一个没有家目录的用户 openstack
# useradd -M openstack
下面几步是验证
# finger openstack 看这个用户的信息
# ls /home 看有没有openstack目录
# id openstack 看用户和组有没有添加成功
2,复制 /etc/skel为 /home/openstack
# cp -r /etc/skel /home/openstack
下面几步是验证
# ls -l /home 看看 /home/openstack 目录,属主属组其它,目录权限
# ls -la /home/openstack (可以 ls -l /home/openstack -a )看内部文件 属主属组其它,目录权限
3,改变 /home/openstack及其内部文件的属主属组均为openstack
# chown -R openstack:openstack /home/openstack/ (chown -R openstack.openstack /home/openstack/)
下面几步是验证
# ls -ld /home/openstack/ 看看 /home/openstack 目录,属主属组是否改过来
# ls -la /home/openstack/ (可以 ls -l /home/openstack -a )看内部文件 属主属组属主属组是否改过来
4,/home/openstack及其内部的文件,属组和其它用户没有任何访问权限
# chmod -R 700 /home/openstack/ 这样子不好,改了属主权限
# chmod -R go= /home/openstack 这样子比较好,属主权限不动
# ls -l /home 看看 /home/openstack 目录权限
# ls -la /home/openstack (可以 ls -l /home/openstack -a )看内部文件权限 (原属主权限不动)
# su - openstack 看看进来是不是一切正常
$ exit
# ls -l /etc/shadow
虽然它什么权限都没有,但是权限对于管理员是无效的
# ls -l `which passwd`
在管理员的情况下
# nano /etc/shadow
是可以编辑这个文件的
修改文件的方式 建一个用户 hive
手动添加用户live(5000),基本组hive(5000),附加组mygroup
一)
# nano /etc/group
# nano /etc/passwd
# date +%s
# bc 计算器
quit 退出
# cp -r /etc/skel /home/hive
# chown -R hive.hive /home/hive
# chmod -R go= /home/hive
# ls -ld /home/hive/
# ls -la /home/hive/
# su - hive (没有密码管理员可以su过去)
# id
# passwd hive (管理员passwd 可以改密码) (它没有密码,管理员也可以改)
# openssl passwd 可以生成密码
# whatis passwd
# man sslpasswd
# openssl passwd -1 -salt '12345678' 这是数字1 不是字母l
# nano /etc/shadow
管理员
# cd /tmp
# touch hellosa 文件默认权限 644
# ls -l hellosa
# mkdir testdir 目录默认权限 755
# ls -ld testdir/
普通用户
$ touch test 文件默认权限 664
$ mkdir testdir 目录默认权限 775
$ ls -la
为了安全文件默认没有执行权限 (linux 内在的安全法则)
umask 遮罩码 反向掩码 第一个0,不用管它
文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限加1
666-umask 创建文件的时候
777-umask 创建目录的时候
管理员的
# umask
普通用户的
$ umask
$ umask 022 设定反向掩码
$ umask
$ touch hello
$ mkdir hellsa
$ ls -l
umask: 023
文件: 666-023=643 文件默认权限 (而文件默认应该没有执行权限,一旦有了就加1即 3+1=4)
目录: 777-023=754 目录默认权限
$ umask 023
$ umask
$ touch abc
$ mkdir dir
$ ls -lt 发现文件是 644 不是 643 啥意思 因为3具有执行权限
(而文件默认应该没有执行权限,一旦有了就加1即 3+1=4)
$ umask 027 其它用户没有任何权限
$ umask
文件 666-027=640 (6-7为0不是-1)
目录 777-027=750
[hive@ebs-22618 ~]$ touch hello1
[hive@ebs-22618 ~]$ mkdir dirhello1
[hive@ebs-22618 ~]$ ls -lt
退出 (不管是 exit 还是 logout )重新登录系统 普通用户的 umask 仍然变成 0002
站在用户登录的角度来说, SHELL的类型:
登录式shell:
正常通过某终端登录的shell
su - USERNAME
或 su -l USERNAME
非登录式shell:
su USERNAME
图形终端下打开命令行窗口
自动执行的shell脚本
bash的配置文件
全局配置
/etc/profile,/etc/profile.d/*.sh, /etc/bashrc
个人配置
~/.bash_profile,~/.bashrc
作用范围小的优先
profile类的文件
设定环境变量
运行命令或脚本(用户登录前的准备工作 登录时执行的命令)
bashrc类的文件
设定本地变量 (它与环境变量的作用域不同)
定义命令别名
登录式shell如何读取配置文件
/etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc
非登录式shell如何读取配置文件
~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh
# su - hadoop
$ alias cls=clear
$ logout
# su - hadoop
$ cls
$ nano .bashrc
$ cls (只有在下次登录的时候才有生效 因为只有在登录的时候才会读取配置文件)
$ logout
# su - hadoop
$ cls (此时有效了)
$ nano .bash_profile
$ logout
# su - hadoop
$ nano $ $ $ $ nano .bash_profile
$ logout
# su - hadoop
$ umask
$ cat /etc/profile
$ id
bash: 脚本解释器
$ echo $PATH
$ logout
# echo $PATH
# chmod -R og=--- root/ 其它用户没有任何权限