??xml version="1.0" encoding="utf-8" standalone="yes"?>
1?span style="line-height: 27.2px;">service iptables off
参考命令:(x)
service iptables stop
service iptables start
service iptables restart
2、yum install vsftpd -y
3、yum install db4 -y
q两个文件可以说?/span>linuxpȝ中最重要的文件之一?/span>如果没有q两个文件或者这两个文g出问题,则你是无法正常登?/span>linuxpȝ?/span>?/span>
/etc/passwd?/span>’:’分割?/span>7个字D,每个字段的具体含义是Q?/span>
1Q用户名Q如W一行中?/span>root是用户名)(j)Q代表用戯̎L(fng)字符?/span>?/span>用户名字W可以是大小写字?/span>?/span>数字?/span>减号Q不能出现在首位Q?/span>?/span>点以?qing)下划线Q其他字W不合法?/span>虽然用户名中可以出现点,但不使用Q尤其是首位为点Ӟ另外减号也不使用Q因为容易造成h?/span>
2Q存攄是该̎L(fng)口o(h)Qؓ(f)什么是’x’呢?早期?/span>unixpȝ口o(h)实是存攑֜q里Q但Z安全因素Q后来就其存放?/span>/etc/shadow中了(jin)Q在q里只用一?/span>’x’代替?/span>
3Q这个数字代表用h识号Q也叫做uid?/span>pȝ识别用户w䆾是通过q个数字来的Q?/span>0是rootQ也是说你可以修改test用户?/span>uid?/span>0Q那么系l会(x)认ؓ(f)root?/span>test为同一个̎?/span>?/span>通常uid的取D围是0~65535Q?/span>0是超U用ProotQ的标识P1~499ql保留,作ؓ(f)理账号Q普通用L(fng)标识号从500开始,如果我们自定义徏立一个普通用P你会(x)看到该̎L(fng)标识h大于或等?/span>500?/span>?/span>
4Q表C组标识P也叫?/span>gid?/span>q个字段对应着/etc/group 中的一条记录,其实/etc/group?/span>/etc/passwd基本上类?/span>?/span>
5Q注释说明,该字D|有实际意义,通常记录该用L(fng)一些属性,例如姓名?/span>?sh)?/span>?/span>地址{等?/span>不过Q当你?/span>finger的功能时׃(x)昄q些信息的(E后做介l)(j)?/span>
6Q用L(fng)家目录,当用L(fng)录时处在这个目录下。root的家目录?/span>/rootQ普通用L(fng)家目录则?/span>/home/usernameQ这个字D|可以自定义的Q比如你建立一个普通用?/span>test1Q要惌test1的家目录?/span>/data目录下,只要修改/etc/passwd文g?/span>test1那行中的该字Dؓ(f)/data卛_?/span>
7Q?/span>shellQ用L(fng)录后要启动一个进E,用来用户下辄指o(h)传给内核Q这是shell。Linux?/span>shell有很多种sh, csh, ksh, tcsh, bash{,?/span>Redhat/CentOS?/span>shell是bash?/span>查看/etc/passwd文gQ该字段中除?/span>/bin/bash外还?/span>/sbin/nologin比较多,它表CZ允许该̎L(fng)?/span>?/span>如果你想建立一个̎号不让他dQ那么就可以把该字段Ҏ(gu)/sbin/nologinQ默认是/bin/bash?/span>
再来看看/etc/shadowq个文gQ和/etc/passwdcMQ用”:”分割?/span>9个字D?/span>?/span>
1Q用户名Q跟/etc/passwd对应?/span>
2Q用户密码,q个才是该̎L(fng)真正的密码,不过q个密码已经加密q了(jin)Q但是有些黑客还是能够解密的?/span>所以ؓ(f)?jin)安全,该文件属性设|ؓ(f)600Q只允许rootd?/span>
3Q上ơ更改密码的日期Q这个数字是q样计算得来的,距离1970q?/span>1?/span>1日到上次更改密码的日期,例如上次更改密码的日期ؓ(f)2012q?/span>1?/span>1日,则这个值就?/span>365*Q?/span>2012-1970Q?/span>+1=15331?/span>
4Q要q多天才可以更改密码,默认?/span>0Q即不限?/span>?/span>
5Q密码多天后到?/span>?/span>卛_多少天内必须更改密码Q例如这里设|成30Q则30天内必须更改一ơ密码,否则不能登录系l,默认?/span>99999Q可以理解ؓ(f)永远不需要改?/span>
6Q密码到期前的警告期限,若这个D|成7Q则表示?/span>7天后密码q期Ӟpȝ发?gu)告告诉用P提醒用户他的密码在7天后到期?/span>
7Q̎号失效期?/span>?/span>你可以这L(fng)解,如果讄q个gؓ(f)3Q则表示Q密码已l到期,然而用户ƈ没有在到期前修改密码Q那么再q?/span>3天,则这个̎号就失效?jin),即锁定?jin)?/span>
8Q̎L(fng)生命周期Q跟W三D一P是按距离1970q?/span>1?/span>1日多天的?/span>它表C的含义是,账号在这个日期前可以使用Q到期后账号作废?/span>
9Q作Z留用的,没有什么意?/span>?/span>
?/strong>新增/删除用户和用L(fng)?/strong>
a. 新增一个组 groupadd [-g GID] groupname
不加-g 则按照系l默认的gid创徏l,跟用户一Pgid也是?/span>500开始的
-g选项可以自定?/span>gid
b. 删除l?/span> gropudel groupname
没有Ҏ(gu)选项?/span>
c. 增加用户 useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]
-u 自定?/span>UID
-g 使其属于已经存在的某?/span>GID
-d 自定义用L(fng)家目?/span>
-M 不徏立家目录
-s 自定?/span>shell
你会(x)发现Q创?/span>test11Ӟ加上?/span>-M选项后,?/span>/etc/passwd文g?/span>test11那行的第六字D依然有/home/test11Q可?/span>ls查看该目录时Q会(x)提示该目录不存在?/span>
-M选项的作用就是不创徏用户的家目录?/span>
-d. 删除用户 userdel [-r] username
-r 选项的作用是删除用户Ӟq同用户的家目录一起删?/span>?/span>
【chfn 更改用户?/strong>finger Q不常用Q?/strong>?/strong>
前面内容中提C(jin)findgerQ即?/span>/etc/passwd文g中的W?/span>5个字D中所昄的信息,那么如何去设定这个信息呢Q?/span>
是chfnq个命o(h)?/span>?/span>修改完后Q就?x)?/span>/etc/passwd文g中的test的那一行第五个字段中看到相关信息了(jin)Q默认是I的?/span>
?/strong>创徏/修改一个用L(fng)密码 “passwd [username]”?/strong>
{创建完账户后,默认是没有设|密码的Q虽然没有密码,但该账户同样d不了(jin)pȝ?/span>只有讄好密码后方可dpȝ?/span>
为用户创建密码时Qؓ(f)?jin)安全v见,请尽量设|复杂一?/span>?/span>你可以按照这L(fng)规则来设|密码:(x)a. 长度大于10个字W;b. 密码中包含大写字母数字以及(qing)Ҏ(gu)字符Q?/span>*&{)(j)Q?/span>c. 不规则性(不要出现root, happy, love, linux, 123456, 111111{等单词或者数字)(j)Q?/span>d. 不要带有自己名字?/span>公司名字?/span>自己?sh)?/span>?/span>自己生日{?/span>?/span>
passwd 后面不跟用户名则是更改当前用L(fng)密码Q当前用户ؓ(f)rootQ所以此时修改的?/span>root的密码,后面?/span>test则修改的?/span>test的密?/span>?/span>
?/strong>用户w䆾切换?/strong>
Linuxpȝ中,有时候普通用h些事情是不能做的Q除非是root用户才能做到?/span>q时需要(f)时切换到rootw䆾来做事了(jin)?/span>
?/span>test账号dlinuxpȝQ然后?/span>su - 可以切换成rootw䆾Q前提是知道root的密?/span>?/span>
你可以?/span>echo $LOGNAME来查看当前登录的用户?/span>
su 的语法ؓ(f)Q?/span> su [-] username
后面可以?/span>”-”也可以不跟,普通用?/span>su不加username时就是切换到root用户Q当?/span>root用户同样可以su到普通用?/span>?/span>
?/span>”-“后会(x)q同用户的环境变量一起切换过?/span>。su test 后虽然切换到?/span>test用户Q但是当前目录还是切换前?/span>/root目录Q然后当?/span>su - test时切换用户后则到?/span>test的家目录/home/test?/span>当用root切换普通用hQ是不需要输入密码的?/span>q也体现?/span>root用户至高无上的权?/span>?/span>
?/span>su是可以切换用戯n份,如果每个普通用户都能切换到rootw䆾Q如果某个用户不心(j)泄漏?/span>root的密码,那岂不是pȝ非常的不安全Q没有错Qؓ(f)?jin)改q这个问题,产生?/span>sudoq个命o(h)?/span>使用sudo执行一?/span>root才能执行的命令是可以办到的,但是需要输入密码,q个密码q不?/span>root的密码而是用户自己的密?/span>?/span>默认只有root用户能?/span>sudo命o(h)Q普通用h要?/span>sudoQ是需?/span>root预先讑֮的,卻I使用visudo命o(h)ȝ辑相关的配置文g/etc/sudoers?/span>如果没有visudoq个命o(h)Q请使用” yum install -y sudo”安装?/span>
默认root能够sudo是因个文件中有一?/span>” root ALL=(ALL) ALL” 在该行下面加?/span>” test ALL=(ALL) ALL”可以让test用户拥有?/span>sudo的权?/span>?/span>如果每增加一用户p|一行,q样太麻?ch)?jin)?/span>所以你可以q样讄?/span>
把这一行前面的”#”LQ让q一行生?/span>?/span>它的意思是Q?/span>wheelq个l的所有用户都拥有?/span>sudo的权?/span>?/span>接下来就需要你把想让有sudo权利的所有用户加入到wheelq个l中卛_?/span>
你不妨跟W者试一下,非常有意?/span>?/span>
Docker 官方提供?docker registry 的构建方?docker-registry
快速构?docker registry 通过以下两步:
q种Ҏ(gu)通过 Docker hub 使用官方镜像 official image from the Docker hub
$ sudo apt-get install build-essential python-dev libevent-dev python-pip liblzma-dev
sudo pip install docker-registry
或?使用 github clone 手动安装
$ git clone https://github.com/dotcloud/docker-registry.git $ cd docker-registry/ $ cp config/config_sample.yml config/config.yml $ mkdir /data/registry -p $ pip install .
docker-registry
使用gunicorn控制:
gunicorn -c contrib/gunicorn_config.py docker_registry.wsgi:application
或者对外监听开?
gunicorn --access-logfile - --error-logfile - -k gevent -b 0.0.0.0:5000 -w 4 --max-requests 100 docker_registry.wsgi:application
$ docker tag ubuntu:12.04 U有库IP:5000/ubuntu:12.04 $ docker push U有库IP:5000/ubuntu
更多的配|选项推荐阅读官方文档:
docker 允许把多个容器连接在一P怺交互信息。docker 链接?x)创ZU容器父子别的关系Q其中父容器可以看到其子容器提供的信息?
在创建容器时Q如果不指定容器的名字,则默认会(x)自动创徏一个名字,q里推荐l容器命名:(x)
可以通过--name选项l容器自定义命名Q?
$ sudo docker run -d -t -i --name test ubuntu:14.04 bash $ sudo docker inspect --format="{{ .Nmae }}" test /test
注:(x)容器名称必须唯一Q即你只能命名一个叫test的容器。如果你惛_用容器名Q则必须在创建新的容器前通过docker rm删除旧的容器或者创建容器时d--rm选项?
链接允许容器间安全通信Q?-link选项创徏链接?
$ sudo docker run -d --name db training/postgres
Z training/postgres 镜像创徏一个名?db 的容器,然后下面创徏一个叫?web 的容器,q且它?db 怺q接在一?
$ sudo docker run -d -P --name web --link db:db training/webapp python app.py
--link <name or id>:alias选项指定链接到的容器?
查看 web 容器的链接关p?
$ sudo docker inspect -f "{{ .HostConfig.Links }}" web [/db:/web/db]
可以看到 web 容器被链接到 db 容器?web/dbQ这允许 web 容器讉K db 容器的信息?
容器之间的链接实际做?jin)什么?一个链接允怸个源容器提供信息讉Kl一个接收容器。在本例中,web 容器作ؓ(f)一个接收者,允许讉K源容?db 的相x(chng)务信息。Docker 创徏?jin)一个安全隧道而不需要对外公开M端口l外部容器,因此不需要在创徏容器的时候添?p?P指定对外公开的端口,q也是链接容器的最大好处,本例?PostgreSQL 数据库?
Docker 主要通过以下两个方式提供q接信息l接收容器:(x)
当两个容器链接,Docker ?x)在目标容器上设|一些环境变量,以获取源容器的相关信息?
首先QDocker ?x)在每个通过--link选项指定别名的目标容器上讄一?lt;alias>_NAME环境变量。如果一个名?web 的容器通过--link db:webdb被链接到一个名?db 的数据库容器Q那?web 容器上会(x)讄一个环境变量ؓ(f)WEBDB_NAME=/web/webdb.
以之前的ZQDocker q(sh)(x)讄端口变量:
$ sudo docker run --rm --name web2 --link db:db training/webapp env . . . DB_NAME=/web2/db DB_PORT=tcp://172.17.0.5:5432 DB_PORT_5432_TCP=tcp://172.17.0.5:5432 # <name>_PORT_<port>_<protocol> 协议可以?TCP ?UDP DB_PORT_5432_TCP_PROTO=tcp DB_PORT_5432_TCP_PORT=5432 DB_PORT_5432_TCP_ADDR=172.17.0.5 . . .
注:(x)q些环境变量只设|给容器中的W一个进E,cM一些守护进E?(?sshd ) 当他们派?shells 时会(x)清除q些变量
除了(jin)环境变量QDocker ?x)在目标容器上添加相关主机条目?etc/hosts中,上例中就?web 容器?
$ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash root@aed84ee21bde:/opt/webapp# cat /etc/hosts 172.17.0.7 aed84ee21bde . . . 172.17.0.5 db
/etc/host文g在源容器被重启之后会(x)自动更新 IP 地址Q而环境变量中?IP 地址则不?x)自动更新的?
docker理数据的方式有两种Q?
数据h一个或多个容器专门指定l过Union File System的目录,为持l性或׃n数据提供一些有用的功能Q?
你可以?v选项d一个数据卷Q或者可以用多?v选项Z?docker 容器q行挂蝲多个数据南?
$ sudo docker run --name data -v /data -t -i ubuntu:14.04 /bin/bash # 创徏数据L(fng)定到到新建容器,新徏容器中会(x)创徏 /data 数据?bash-4.1# ls -ld /data/ drwxr-xr-x 2 root root 4096 Jul 23 06:59 /data/ bash-4.1# df -Th Filesystem Type Size Used Avail Use% Mounted on ... ... ext4 91G 4.6G 82G 6% /data
创徏的数据卷可以通过docker inspect获取宿主机对应\?
$ sudo docker inspect data ... ... "Volumes": { "/data": "/var/lib/docker/vfs/dir/151de401d268226f96d824fdf444e77a4500aed74c495de5980c807a2ffb7ea9" }, # 可以看到创徏的数据卷宿主\?... ...
或者直接指定获?
$ sudo docker inspect --format="{{ .Volumes }}" data map[/data: /var/lib/docker/vfs/dir/151de401d268226f96d824fdf444e77a4500aed74c495de5980c807a2ffb7ea9]
-v选项除了(jin)可以创徏P也可以挂载当前主机的一个目录到容器中?
$ sudo docker run --name web -v /source/:/web -t -i ubuntu:14.04 /bin/bash bash-4.1# ls -ld /web/ drwxr-xr-x 2 root root 4096 Jul 23 06:59 /web/ bash-4.1# df -Th ... ... ext4 91G 4.6G 82G 6% /web bash-4.1# exit
默认挂蝲h可读写的Q可以在挂蝲时指定只?
$ sudo docker run --rm --name test -v /source/:/test:ro -t -i ubuntu:14.04 /bin/bash
如果你有一些持久性的数据q且惛_容器间共享,或者想用在非持久性的容器上,最好的Ҏ(gu)是创Z个数据卷容器Q然后从此容器上挂蝲数据?
创徏数据卷容?
$ sudo docker run -t -i -d -v /test --name test ubuntu:14.04 echo hello
使用--volumes-from选项在另一个容器中挂蝲 /test 南不?test 容器是否q行Q其它容器都可以挂蝲该容器数据卷Q当然如果只是单独的数据h没必要运行容器的?
$ sudo docker run -t -i -d --volumes-from test --name test1 ubuntu:14.04 /bin/bash
d另一个容?
$ sudo docker run -t -i -d --volumes-from test --name test2 ubuntu:14.04 /bin/bash
也可以承其它挂载有 /test L(fng)容器
$ sudo docker run -t -i -d --volumes-from test1 --name test3 ubuntu:14.04 /bin/bash
$ sudo docker run --rm --volumes-from test -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/test.tar /test tar: Removing leading `/' from member names /test/ /test/b /test/d /test/c /test/a
启动一个新的容器ƈ且从test容器中挂载卷Q然后挂载当前目录到容器中ؓ(f) backupQƈ备䆾 test 卷中所有的数据?test.tarQ执行完成之后删除容?-rmQ此时备份就在当前的目录下,名ؓ(f)test.tar?
$ ls # 宿主机当前目录下产生?test L(fng)备䆾文g test.tar test.tar
你可以恢复给同一个容器或者另外的容器Q新建容器ƈ解压备䆾文g到新的容器数据卷
$ sudo docker run -t -i -d -v /test --name test4 ubuntu:14.04 /bin/bash $ sudo docker run --rm --volumes-from test4 -v $(pwd):/backup ubuntu:14.04 tar xvf /backup/test.tar -C / # 恢复之前的文件到新徏卷中Q执行完后自动删除容?test/ test/b test/d test/c test/a
Volume 只有在下列情况下才能被删除:(x)
否则Q会(x)?var/lib/docker/vfs/dir目录中遗留很多不明目录?
参考文档:(x)