1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
|
#==========================================
**/ - основной раздел
/bin - основные исполняемые файлы системы
/boot - файлы необходимые для загрузки системы
/dev - представления для подключенных устройств
/etc - конфигурационные системные файлы
/home - пользовательские папки и файлы (лучше выносить на другой физический диск!)
/lib - библиотеки ядра ОС
/opt - дополнительные програмные пакеты
/proc - раздел для монтирования виртуальной файловой системы
/sbin - исполняемые файлы ROOTa
/tmp - временные файлы
/usr - системные файлы
/var - журналы, буферные или заблокированные файлы (лучше выносить на другой физический диск!)
Swap - раздел подкачки
Если /home и /var вынесены на отдельные диски, то для корневого каталога хватит 3Gb, но можно и больше.
#==================================
`sudo apt update
Собрать зависимости:
`sudo apt build-dep имя_программы
Если вы не хотите реально устанавливать пакеты, а только посмотреть, что будет
устанавливаться, го можно использовать ключ -s (simulate, симулировать установку):
`sudo apt-get -s install me
Для проверки зависимостей нужно выполнить команду:
`sudo apt-get check
Если нужно исправить зависимости:
`sudo apt-get -f install
Если нужно исправить зависимости:
`sudo apt-get -f install
Для удаления программы или пакета используем:
`sudo apt remove имя_программы
Если какая-то программа была удалена, но остались зависимости, то можно авто
матически удалить все лишнее:
`sudo apt-get autoremove
Для установки обновлений уже установленных программ выполняем следующую
команду:
`sudo apt-get upgrade
Чтобы обновить саму ОС, выполняем команду:
`sudo apt-get dist-upgrade
Следующую тройку команд желательно выполнять регулярно для установки об
новлений:
`sudo apt-get update
`sudo apt-get upgrade
`sudo apt-get dist-upgrade
Все эти команды позволят вам содержать вашу копию релиза Ubuntu и установлен
ных программ в обновленном состоянии, но на новый релиз автоматически вы так
не перейдете.
Если вышел новый релиз, а не просто обновление существующего, то
на него можно перейти командой:
`sudo do-release-upgrade
Чтобы узнать, какие вообще в системе уже установлены пакеты, можно выполнить
следующую команду
`sudo apt list —installed
*which* - определить где находится программа:
`which ls`
#==========================================
### GRUB2
В Linux сейчас самым популярным загрузчиком является GRUB2. Конфигурация
этой программы чаще всего содержится в файле
`/boot/grub/grub.cfg`
но можно встретить дистрибутивы, где этот путь выглядит так:
`/boot/grub2/grub.cfg.
В файле загрузчика записаны настройки, определяющие, нужно ли показывать меню выбора варианта загрузки, и каким должно быть это меню, а также указываются сами варианты
загрузки и предписывается, какую версию ядра следует загрузить (мы уже говори
ли, что в Linux может быть более одного ядра).
После этого может формироваться `initrd` — виртуальный диск в оперативной памя
ти (ramdisk) для временной файловой системы, используемой ядром Linux при на
чальной загрузке. Дело в том, что если ядро скомпилировано в минимальном вари
анте и все его возможности подключаются в дальнейшем с помощью модулей, то
в этот момент у ядра не будет возможности работать со специфичными жесткими
дисками, и оно не сможет загружать дальнейшие данные. Поэтому сначала грузит
ся диск /boot/initrd.xxxx, который загружает критически важные модули, и, если я не
ошибаюсь, именно он и загружает красивую картинку, которую показывает ОС во
время старта системы.
Теперь у ядра есть все необходимое для загрузки самой системы. Появляется кра
сивая картинка, которая прячет выводимый в консоль лог дальнейшей загрузки,
и управление передается программе /sbin/init.
Программа init загружает файл /etc/inittab — конфигурационный файл, в котором
прописан процесс инициализации ОС Linux, и выполняет все предусмотренные
в нем операции.
#==========================================
### Работа с модулями ядра
Система должна загружаться только с теми модулями, которые применяются. Все
остальные следует подгружать по мере необходимости и отключать, когда они не
используются.
модули ядра — это немного другое. Они выполняются на более низком уровне, который в основном позволяет работать с устройствами, управлять памятью и т. п. При модульной
компиляции вы можете включать и выключать функции уровня ядра с помощью
следующих команд:
`lsmod` — эта команда выведет список загруженных модулей.
`modinfo` — очень трудно разобраться, какие модули нужны в системе, а какие
нет. А ведь необходимо загружать только то, что действительно используется,
иначе увеличивается время старта системы, понапрасну расходуются ресурсы
компьютера и т. д. Так как же в этом разобраться? Необходимо знать каждый
модуль «в лицо» и понимать, для чего он нужен.
Получить информацию о модуле и помогает команда modinfo. В качестве пара
метра нужно передать ей имя интересующего модуля, и на экран будет выведена
информация о нем. Например, следующая команда запрашивает у системы ин
формацию о модуле ext3:
`modinfo ext3
В ответ на это мы увидим примерно следующее:
filename:
/lib/modules/2.4.18-5asp/kernel/fs/ext3/ext3.о
description: "Second Extended Filesystem with journaling extensions"
author:
"Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger,
Theodore Ts’o and others"
license:
"GPL"
parm:
do_sync_supers int, description "Write superblocks
synchronously"
Таким образом, нам становятся известными имя и расположение файла, его опи
сание, автор, лицензия и т. д. Количество отображаемой информации сильно
зависит от модуля, и, если честно, в некоторых случаях она настолько скудна,
что предназначение модуля остается непонятным;
`modprobe` — эта команда в основном используется системой для загрузки уста
новленных модулей, но можно это делать и самостоятельно. В качестве един
ственного параметра нужно передать команде имя модуля, который надо за
грузить.
Например, следующая команда загружает модуль `iptabie_nat`
`modprobe iptable_nat
`rmmod` — эта команда выгружает модуль, имя которого указано в качестве пара
метра. Если вы воспользовались модулем для выполнения определенных дейст
вий, то не забудьте по окончании работы его выгрузить.
#==========================================
### Переменная $РАТН
`echo $РАТН
В результате вы должны увидеть список папок, разделенных двоеточиями:
`/usr/local/bin:/bin:/usr/bin
Соответственно, когда мы отдаем в командной строке команду is, то система нахо
дит ее исполняемый файл в каталоге `/bin` и запускает его.
При запуске программ из командной строки Linux нужно обязательно указывать **./**
перед именем программы или скрипта. Например, допустим, что в текущем катало
ге есть исполняемый файл publish — тогда для его запуска нужно в консоли выпол
нить следующую команду:
./publish
В Windows и в Linux точка указывает на текущий каталог, а, значит, приведенная
команда просит запустить publish именно из текущего каталога. Впрочем, в Windows при запуске программ из текущего каталога можно ничего не указывать, по
тому что эта ОС сначала ищет файлы в текущей папке, а потом уже в системных.
Но из-за этого у Windows были проблемы с безопасностью.
ОС Linux ведет себя немного иначе, и из текущего каталога по умолчанию ничего
не запускает, а ищет в папках, указанных в переменной $PATH
Linux можно заставить «смотреть» и в текущую папку — просто для этого точку
нужно добавить в переменную $PATH:
`PATH = $РАТН:.
Не уверен, что в реальности делать что-то подобное — хорошая идея. Но я привел
этот пример, для того чтобы показать, как добавлять папку к переменной $PATH.
Если у вас есть программа `/usr/local/myprogram/publish` и вы не хотите при каждом
запуске писать этот полный путь, то можно добавить путь /usr/local/myprogram/
в переменную $PATH:
`РАТН=$РАТН:/usr/local/myprogram/
Смысл этой команды в том, что мы присваиваем переменной новое значение, кото
рое состоит из уже существующего, плюс двоеточие и новая папка. Если просто
написать:
PATH=/usr/local/myprogram/
то текущее значение $PATH будет потеряно, и теперь $PATH станет равна лишь
/usr/local/myprogram/.
#==========================================
### Права на файлы и папки
Права можно задавать и последовательностью нулей и единиц. Если в определен
ном месте стоит 1 (указан один из символов г, w или х), то операция разрешена, а
если 0 (указан дефис) — действие запрещено. Давайте попробуем записать права
rwxr-xr— в виде нулей и единиц. Запишите вместо букв единицы, а вместо дефи
сов — нули. Должно получиться 111101100. Разобьем эту комбинацию на три час
ти: 111, 101 и 100. Теперь каждую тройку переведем в восьмеричную систему по
следующей формуле:
Цифра1 ★ 4 + Цифра2 ★ 2 + ЦифраЗ
У нас получатся три цифры: 7, 5 и 4, которые можно рассматривать как десятичное
число 754. Запомните его, оно нам пригодится при назначении прав на файлы и ка
талоги. Чтобы вам в дальнейшем было проще регламентировать доступ, предлагаю
все возможные варианты значений для отдельного разряда числа:
□ О — запрещено все;
□ 1 — разрешено выполнение;
П 2 — разрешена запись;
□ 3 — разрешены запись и выполнение;
□ 4 — разрешено чтение;
□ 5 — разрешены чтение и выполнение;
□ 6 — разрешены чтение и запись;
□ 7 — разрешено все.
#### chmod
chmod параметры права файл
Компонент параметры может включать комбинацию следующих значений:
□ и — изменить права владельца;
□ g — изменить права группы;
□ о — изменить права остальных пользователей;
□ а — изменить все права (то же самое, что передать значение: ugo).
**Внимание!
Если вы решили использовать символьные ссылки, то всегда помните особенность
формирования прав доступа на файлы. Можете даже выбить на мониторе надпись:
«Ссылки на файлы создаются с полными правами!!!»
#==========================================
### Редактирование пользователя
Для редактирования параметров учетной записи можно напрямую корректировать
файл /etc/passwd, но я советую использовать команду `usermod`. У нее такие же клю
чи, что и у `useradd`, но она не создает пользователя, а изменяет параметры уже су
ществующего.
С помощью `usermod` вы можете добавлять уже имеющегося пользователя в ранее
созданную группу. Давайте проделаем такую процедуру с учетной записью robert и
определим ее в группу root. Это позволит пользователю robert выполнять некото
рые административные функции:
`usermod -G root robert
Здесь мы выполняем команду с ключом -G. Этот ключ позволяет указать, членом
каких групп должен быть пользователь. Можно указать несколько групп, разделен
ных запятыми. В нашем случае мы добавляем пользователя только в одну группу
root. Для получения более подробной информации о команде `usermod` выполните
команду:
`man usermod
### Удаление пользователя
Для удаления пользователя служит команда `userdel`. В качестве параметра ей пере
дается только имя учетной записи, которую надо удалить, и можно распрощаться
с ней навсегда. Например:
`userdel Denver
Если пользователь в этот момент находится в системе, будет выдано сообщение об
ошибке.
Необходимо учитывать, что удаление пользователя не уничтожает его домашний
каталог — вы должны сделать это вручную. Если же указать в команде ключ -г, то
вместе с пользователем будут удалены и его файлы в домашнем каталоге:
`userdei -г Denver
**Совет
Никогда не указывайте этот ключ. Выполняйте операцию только вручную, просмотрев
содержимое каталога и убедившись, что там нет нужных файлов.
#==========================================
### Порты / протоколы
HTTP 80
HTTPS 443
SMTP 25
SMTPS 465
LDAP 329
LDAPS 636
TELNET 23
TELNETS 992
SHELL 514
SSH 22
FTP 21
FTPS 990
FTP-DATA 20
FTPS-DATA 989
IMAP 143
IMAPS 993
POP3 110
POP3S 995
IRC 194
IRCS 994
#==========================================
### Шифрование файлов
В качестве примера зашифруем список паролей `/etc/passwd` в файл `/home/passwd` по
алгоритму DES. Для этого выполним команду:
`/usr/bin/openssl des -in /etc/passwd -out /home/passwd
В ответ на эту директиву программа попросит вас указать пароль и затем повторить
его ввод, чтобы исключить возможные ошибки.
Выполните команду: `cat /home/passwd` и убедитесь в том, что содержимое этого
файла нечитаемо.
Для расшифровки файла выполните команду:
`/usr/bin/openssl des -d -in /home/passwd -out /etc/passwd
Таким нехитрым способом мы можем безопасно хранить копию файла с паролями.
#==========================================
### Основные параметры конфигурации сервера SSH
```sh
#Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress : :
# HostKey for protocol version 1
# Ключ для первой версии протокола
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
# Ключи для второй версии протокола
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
# Lifetime and size of ephemeral version 1 server key
# Время жизни и размер регенерируемого серверного ключа версии 1
#KeyRegenerationInterval 3600
#ServerKeyBits 768
# Logging
# Ведение логов
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
```
Рассмотрим основные параметры, которые вам могут пригодиться:
□ Port — порт, на котором ожидаются подключения. По умолчанию — 22. Неко
торые администраторы любят изменять значение по умолчанию, перенося сер
вер на другой порт. В какой-то степени это оправданно. Например, если у вас
нет веб-сервера, то можно поместить SSH на порт 80. Хакеры будут думать, что
это веб-сервер, и не станут его ломать;
□ Protocol — поддерживаемые протоколы. Обратите внимание, что первым идет
число 2, а затем 1. Это значит, что сервер будет сначала пытаться подключиться
по второй версии протокола, и только затем по первой. Я рекомендую убрать
знак комментария с этой строки и удалить число 1, чтобы использовалась только
последняя версия. Уже давно пора обновить клиентское программное обеспече
ние и перейти на более безопасные технологии. Зацикливание на старых про
граммах приносит только убытки;
□ ListenAddress — адрес для прослушивания подключения. У вашего сервера мо
жет быть несколько сетевых карт. По умолчанию идет прослушивание всех ин
терфейсов. Вы должны указать только те, с которых будете подключаться по
SSH. Например, очень часто одна сетевая карта смотрит во внутреннюю сеть, а
другая — в Интернет. Если вы будете подключаться по SSH-протоколу лишь из
внутренней сети, то следует прослушивать только этот адрес (задается в формате
адрес:порт). Разрешается включать несколько таких записей, чтобы указать тре
буемые интерфейсы;
□ HostKey — путь к файлам, содержащим ключи шифрования. Нужно прописывать
только закрытые ключи, которые использует сервер для расшифровки пакетов;
□ KeyRegenerationintervai — интервал времени, через который сервер обновляет
ключи. В версии 1 во время сессии ключи могут регенерироваться. Это позволяет сделать невозможным раскрытие пакетов за счет смены ключей, которые по
умолчанию меняются каждые 3600 секунд. Если установить 0, то регенерации
не будет. Так как мы отказались от первой версии протокола (см. параметр
Protocol), то этот атрибут не влияет на работу;
□ serverKeyBits — длина серверного ключа. По умолчанию установлено 7 68, мини
мальное значение — 512;
□ SysiogFaciiity — тип сообщений, которые будут сохраняться в журнале;
□ LogLevei — уровень событий, которые будут попадать в журнал. Возможные
уровни соответствуют системным, которые мы будем рассматривать в разд. 12.5;
□ LoginGraceTime— интервал времени, в течение которого пользователь должен
ввести правильный пароль, иначе соединение будет разорвано;
□ РеrmitRootLogin— флаг, определяющий, разрешено (yes) или запрещено (по)
входить в систему по протоколу SSH под пользователем root. Мы уже говорили,
что root — это бог в системе, и его возможности нужно использовать аккуратно.
Если в систему нельзя входить с такими правами, то и по SSH тем более. Срочно
меняйте этот параметр на по;
□ strictModes — флаг, регламентирующий необходимость проверки состояния
файлов и их владельцев, пользовательских файлов и домашнего каталога до ввода
пароля. Желательно установить yes, потому что многие начинающие пользовате
ли делают все свои файлы доступными для записи;
□ RSAAuthentication— разрешена ли аутентификация по алгоритму RSA. Пара
метр действует для первой версии протокола;
□ PubkeyAuthentication— дозволена ли аутентификация по публичному ключу.
Параметр действует для второй версии протокола;
□ AuthorizedKeysFile — файл с публичным ключом, который может использовать-
ся для аутентификации;
□ RhostsAuthentication — флаг, разрешающий аутентификацию по файлам $НОМЕ/
.rhosts и /etc/hosts.equiv. По умолчанию стоит по, и без особой надобности менять
этот параметр не стоит, потому что это небезопасно;
□ ignoreRhosts — флаг, запрещающий читать файлы -/.rhosts и -/.shosts. Без необ
ходимости значение лучше не изменять, потому что это может повлиять на
безопасность;
□ AuthorizedKeysFile— файл для хранения списка авторизованных ключей. Если
пользователь входит в систему с имеющимся в этом файле ключом, то его пус
тят автоматически без ввода дополнительных паролей;
□ RhostsRSAAuthentication— флаг, регламентирующий использование при аутен
тификации ключа хоста из каталога /etc/ssh/ssh_known_hosts. Параметр применя
ется в первой версии SSH;
□ ignoreUserKnownHosts — параметр, указывающий на необходимость игнориро
вания пользовательских списков доверенных компьютеров. Если он равен по, то необходимо доверять компьютерам из списка ~/.ssh/known_hosts при аутентифика
ции RhostsRSAAuthentication. Не верьте никому, поэтому параметр лучше всего
изменить на yes;
□ PasswordAuthentication — требование пароля. Если значение равно yes, то будет
требоваться пароль. При использовании авторизации через ключи параметр
можно отключить;
□ РеrmitEmptyPasswords — разрешение пустых паролей. По умолчанию установле
но по, что запрещает использование пустых паролей, и изменять это значение не
стоит;
□ KerberosAuthentication— использование проверки подлинности по протоколу
Kerberos. В последнее время именно эта аутентификация набирает большую по
пулярность благодаря своей безопасности;
□ KerberosOrLocaiPasswd— если пароль Kerberos не был принят, то включается
проверка локального файла паролей из файла /etc/shadow;
□ KerberosTicketcieanup— удаление билета Kerberos из кэша при выходе из сис
темы;
□ Banner— позволяет указать файл, в котором находится текст приветствия, ото
бражаемого пользователям.
#### Параметры доступа к серверу sshd
Кроме директив, можно использовать следующие:
□ AllowGroups — позволить вход в систему только пользователям указанных групп
(указываются через пробел в одной строке);
□ Allowusers — разрешить вход в систему пользователям, имена которых указаны
через пробел;
□ DenyGroups— запретить вход в систему пользователям указанных через пробел
групп;
□ DenyUsers — запретить вход в систему пользователям, имена которых указаны
через пробел. Этот параметр бывает удобен, когда дано разрешение на вход
группе, но нужно отказать в подключении к SSH-серверу одному из ее пользо
вателей.
Я рекомендую вам явно прописать группы или имена пользователей, которые мо
гут входить в систему по SSH.
#### Конфигурирование клиента SSН
Настройки SSH-клиента содержат еще меньше параметров. В файле `/etc/ssh/ssh_config` находятся глобальные настройки для всех пользователей в системе. Но вы
можете для любого из них переопределить произвольный параметр в файле
`ssh_config` из каталога пользователя.
#### Вход по ключу
```sh
ssh-keygen
# -t - тип ключа (rsa, dsa, rsa1)
# -f - файл в котором будет сохранен закрытый ключ
# -b - длина ключа (не менее 512. по умолч = 1024)
ssh-keygen -t rsa -f ~/.ssh/mykey
cd /home/vlapa
mkdir .ssh
```
Получив ключи, вы должны отправить файл `~/.ssh/mykey.pub` на удаленный ком
пьютер, чтобы SSH-сервер мог использовать его для аутентификации.
Администратор сервера должен добавить содержимое публичного ключа в файл
`ssh/authorized_keys`. Для этого можно выполнить на сервере следующую команду:
`cat myrsakey.pub » .ssh/authorized_keys`
Теперь можно подключаться к серверу, используя публичный ключ для подтвер
ждения личности. Но перед этим убедитесь, что в конфигурационном файле серве
ра включены следующие директивы:
RSAAuthentication yes
PubkeyAuthentication yes
Для подключения к серверу выполните команду:
`ssh -i ~/.ssh/myrsakey`
С помощью параметра -i мы указываем файл публичного ключа. Если этого не
сделать, то будет использоваться id_rsa— файл по умолчанию, его имя задает
директива identityFile в конфигурационном файле SSH-клиента.
Теперь сервер будет запрашивать у вас не пароль, а слово (фразу), которое вы ука
зали при генерации публичного ключа:
`Enter passphrase for key`
Если в конфигурационном файле SSH-сервера изменить параметр PasswordAuthen-
tication на по, то пароль проверяться не будет, а связь станет устанавливаться
только на основании ключей. Для обеспечения безопасной связи этого достаточно.
#==========================================
### Анализ безопасности дистрибутива
```sh
sudo apt-get install lynis
sudo lynis audit system
# -c - выполнить все проверки (check all)
```
#==========================================
### SAMBA
Основным конфигурационным файлом для Samba является `smb.conf`, который мож
но найти в каталоге `/etc/samba/` (в некоторых дистрибутивах это может быть каталог
`/etc`). Кроме него, в этом каталоге находится файл `Imhosts`, с помощью которого про
исходит сопоставление IP-адресов и имен компьютеров, — аналогично файлам
`/etc/hosts` в Linux и `[Диск:]\Windows\System32\dnvers\etc\lmhosts.sam` в Windows.
Дополнительно в этом же каталоге можно создать следующие файлы (некоторые из
них могут существовать):
□ smbusers — список пользователей, которым разрешено подключаться к серверу
Samba;
□ smbpasswd — пароли пользователей из файла smbusers.
Как видите, у Samba — свои конфигурационные файлы для хранения списка
пользователей. Если вы создаете их вручную, то убедитесь, что права на чтение и
запись установлены правильно. Файл должен быть доступен только администра
тору, т. е. владельцем может быть лишь root и никто иной.
Конфигурационный файл `smb.conf` содержит не так много директив
#### Основные настройки
Конфигурационный файл разбит на секции. Самой первой идет секция
[global],
в которой описываются глобальные настройки сервера. В ней можно увидеть сле
дующие директивы:
□ workgroup = имя — имя группы, в которую входит сервер. Когда в Windows вы
входите в сетевое окружение, то можете увидеть все доступные ресурсы, разби
тые на категории. В каждой группе могут быть свои компьютеры или серверы;
□ netbios name = имя — имя, которое пользователи будут видеть в сетевом окру
жении для этого сервера, оно не должно совпадать с именем рабочей группы;
□ server string = описание — Свободный ТеКСТ, КОТОрЫЙ МОЖНО будет увидеть В
поле Description (Комментарий) свойств сервера или окне сетевого окружения
в режиме Details (Таблица). В этом поле вы можете поместить комментарий,
описывающий содержимое сервера, — например: Файловый архив Сергея;
□ hosts allow = адреса — указание (через пробел) IP-адресов или сетей, которым
разрешен доступ к Samba-серверу. Например, чтобы открыть доступ всем компьютерам сети 192.168.1.x и одному компьютеру с адресом 192.168.2.2 из другой
сети, надо написать следующую строку:
hosts allow = 192.168.1. 192.168.2.2
□ printcap name = файл — файл описания принтеров, подключенных к системе. По
умолчанию это `/etc/printcap`
□ load printers = yes — установка режима (yes) автоматического включения
принтеров в список открытых ресурсов. Если в этом нет надобности, то укажи
те по;
□ printing = система— тип системы печати. Здесь можно использовать одно из
Следующих Значений: bsd, sysv, pip, lprng, aix, hpux ИЛИ qnx.
#### Безопасность
□ guest account = имя — определяет учетную запись, с правами которой пользо
ватель сможет входить в систему. Если ваш сервер не содержит секретной ин
формации и используется для открытого обмена файлами, то можно завести гос
тевую учетную запись, иначе такой вход небезопасен;
□ log file = файл — задает название файла-журнала. Например, можно написать:
/var/iog/samba/%m. log. Обратите внимание, что в имени присутствует символ
процента, за которым следует буква т. Эта комбинация во время работы будет
заменена именем пользователя, активность которого сохраняется. Так, напри
мер, для пользователя robert будет создан журнал /var/log/samba/robert.log;
□ max log size = n— определяет максимальный размер журнала в килобайтах.
Укажите значение о, если ограничения не должно быть;
□ sysiog only — предписывает использовать для журналирования только syslog;
□ security = уровень — определяет степень доступа. Параметр уровень может
принимать одно из следующих значений:
• user — доступ на уровне пользователя;
• share — аутентификация на основе имени и пароля;
• server— проверка пароля производится сторонним smb-сервером. Имя сер
вера, на котором хранятся пароли, задается с помощью директивы:
password server = ИмяСервера
что позволяет держать пароли на другом smb-сервере, который и будет осу
ществлять проверку пароля;
• domain — включает сервер в домен Windows NT, а пароль для доступа указы
вается в файле, определенном с помощью директивы:
smb passwd file = ИмяФайла
□ encrypt passwords = yes — позволяет шифровать пароли, передаваемые по сети.
Если вы работаете в режиме с шифрованными паролями, то при авторизации
будет использоваться файл /etc/samba/smbpasswd (это можно изменить с помощью
директивы: smb passwd file). Такой файл необходим из-за различий в шифрова
нии Windows и Linux;
***Совет
Не применяйте открытые пароли без особой надобности. Не забывайте о существова
нии программ-снифферов, которые анализируют сетевой трафик и позволяют найти
пароли, передаваемые по сети. Если они не зашифрованы, то злоумышленник сможет
проникнуть в вашу систему.***
□ smb passwd file = файл— указывает на расположение файла с паролями. По
умолчанию он находится в том же каталоге, где расположены конфигурацион
ные файлы Samba;
□ ssi с а certFile = файл— задает файл сертификата, необходимый для работы
протокола SSL, гарантирующего безопасность передачи данных;
□ unix password sync = yes — разрешает пользователям Windows менять пароль
Samba, одновременно обновляя системные пароли в Linux. Если в этом нет необходимости, установите значение параметра по. Для работы этой директивы
нужно указать программы, которые будут изменять пароли (параметр: passwd
program) и сообщения, появляющиеся перед пользователем (параметр: passwd
chat).
Приведу пример использования:
```sh
unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*password* %n\n *Retype*new*password* %n\n
*passwd:*al^authentication*tokens*updated*successfully*
```
Помимо ЭТОГО, необходимо использовать директивы: encrypt passwords И smb
passwd file;
□ username map = файл — указание на файл, где хранится список пользователей
сервера Samba для клиентов Windows 9х (о нем подробнее мы поговорим в
разд. 6.3)\
□ usershare max shares — максимальное количество пользовательских каталогов,
которые могут быть открыты для общего доступа;
□ usershare allow guests = yes — еСЛИ ЭТОТ параметр ВКЛЮЧен, ТО ГОСТИ системы
смогут получить доступ к открытым ресурсам. По умолчанию этот параметр от
ключен, чтобы доступ к открытым ресурсам получали только авторизованные
пользователи.
#### Сеть
В этом разделе мы изучим директивы настройки сетевого протокола:
□ include = файл— позволяет подключить дополнительный конфигурационный
файл, например, с другого компьютера или содержащий настройки для конкрет
ного подключающегося компьютера. В последнем случае имя файла обычно
задается в формате: путь.%т. Здесь путь— это начало полного имени файла, а
%т — NetBIOS-имя компьютера. Например: /etc/samba/smb.conf.robert;
□ socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192— Задает Парамет
ры протокола и размер входного и выходного буферов. Здесь:
• t c p_n o d e l a y — позволяет быстрее (без задержек) передавать данные;
• s o_r c v bu f — размер принимающего буфера;
• s o_s n d b u f — размер передающего буфера;
□ interfaces = интерфейсы— если у вас установлены две сетевые карты, которые
направлены на разные сети, то с помощью этой директивы можно позволить
работать с Samba пользователям из какой-то конкретной или из обеих сетей;
□ bind interfaces only— позволяет привязаться только к именованным интер
фейсам или сетям, указанным в параметре interfaces. Если ваша сеть не защи
щена сетевым экраном, то настоятельно рекомендуется использовать этот параметр, чтобы доступ к серверу Samba имели только компьютеры из вашей сети, а
не любой удаленный пользователь из Интернета.
#### Замена сервера Windows
Если посмотреть на параметры, описанные в этом разделе, можно увидеть, что
Samba способна полностью заменить Windows-сервер, и рабочие станции на базе
Windows не заметят неудобств:
□ local master = yes — позволяет сделать Samba-сервер основным браузером сети;
□ domain master = yes — дает возможность сделать Samba-сервер главным брау
зером домена. Не устанавливайте значение yes, если в вашей сети уже есть кон
троллер домена Windows NT;
□ logon script = файл— если директива domain logons включена, то в этом па
раметре можно указать файл bat-сценария, который будет выполняться на ком
пьютере клиента при входе в систему. Сценарий может, например, задаваться
в виде %m.bat (заменяется именем компьютера) или %u.bat (подменяется на имя
пользователя);
□ logon path = путь — определяет место хранения пользовательских профилей.
При использовании этой директивы необходимо убрать комментарии с секции
[Profiles], которую можно найти в файле конфигурации по умолчанию.
#### Поддержка WINS и DNS
WINS (Windows Internet Naming Service, служба имен Интернета для Windows) — это
сервис для сопоставления имен компьютеров и IP-адресов. База данных WINS чем-то
напоминает DNS (Domain Name Service), только в ней хранятся NetBIOS-имена ком
пьютеров, a DNS обслуживает доменные имена.
Для настройки работы через WINS служат следующие директивы:
□ wins support ~ yes — разрешить использование WINS-сервера;
□ wins server = w.x.y.z — IP-адрес WINS-сервера;
□ d n s Proxy = yes— если эта опция разрешена, то нераспознанные NetBIOS-
имена можно попытаться определить через DNS-сервер;
□ name resolve order — последовательность, в которой будет производиться по
иск адреса хоста по его имени. В конфигурационном файле можно найти сле
дующий пример:
name resolve order = lmhosts host wins beast
Если использовать это значение, то при поиске адреса система сначала будет ис
кать имя хоста в файле lmhosts, затем в hosts, потом будет задействован файл wins
и последним — beast (broadcast, или широковещательный запрос).
#### Отображение файлов
В Linux и Windows применяются разные правила именования файлов. Например,
в Linux названия чувствительны к регистру, а в Windows — нет. Это значит, что
файлы DATA.TXT и data.txt в Windows будут восприняты как один и тот же файл,
чего не скажешь о Linux.
Для решения этой проблемы есть несколько команд:
□ case sensitive = no — не принимать во внимание различие в регистре;
□ default case = lower — отображать все файлы в нижнем регистре;
□ preserve case = по И short preserve case = no — запретить сохранение имен
файлов с учетом регистра.
Если у вас в сети работают пользователи Windows-систем, то рекомендуется оста
вить указанные значения. Для однородной Linux-сети можно разрешить сохранять
регистр.
#### Описание объектов
После определения основных параметров Samba-сервера можно описывать объек
ты, к которым может получать доступ пользователь. Это делается в отдельных сек
циях, которые идут после секции [Global], рассмотренной в разд. 6.1.
#### Пора домой
Конечно же, любой пользователь захочет работать со своим каталогом. Для этого
он должен иметь учетную запись в Linux, с которой и будет связан его каталог. Об
ращение к такому каталогу будет выглядеть так: \\сервер\имя, где сервер — это имя
сервера или его IP-адрес, а имя — это имя пользователя, домашний каталог которо
го необходимо увидеть.
Чтобы разрешить пользователям работать с собственными каталогами, нужно опи
сать раздел [homes]. Рассмотрим пример такой секции:
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S ; %S - строка с перечислением пользователей
create mode = 0750
directory mode = 0775
В этой секции могут присутствовать следующие директивы:
□ comment — текстовый комментарий, который не влияет на работу;
□ browseable = по— режим отображения ресурса в списке просмотра. Если ука
зать yes, то в сетевом окружении будут видны папки пользователей;
□ writable = yes — предикат записи в домашний каталог. При значении по созда
ние и изменение файлов станет невозможным;
□ create mode = 0750 — права доступа для создаваемых файлов. В этом случае
владелец файла имеет полные права, пользователи группы могут читать и выпол
нять его, а остальные — бесправные. Иногда следует понизить значение параметра
до 740, чтобы пользователи группы могли только читать;
□ directory mode = 0775 — права доступа для создаваемых каталогов. В этом слу
чае у пользователей группы тоже слишком высокие права, и я бы понизил их
до 755, чтобы запретить им создавать файлы в новом каталоге. Остальные мо
гут только просматривать каталог, но и это может оказаться лишним, и для боль
шей безопасности лучшим решением будет значение 750;
□ valid users = пользователи — список пользователей, которым разрешен доступ
к домашним каталогам. Значения разделяются пробелом. По умолчанию доступ
имеют все, но в реальных условиях это необходимо только некоторым. Поэтому я
рекомендую в явном виде прописать имена тех пользователей, которые нуждаются
в работе со своим домашним каталогом.
#### Доменный вход
Если вы настроили сервер Linux так, чтобы пользователи Windows могли входить
в систему через smb, используя его как сервер домена, то необходимо убрать ком
ментарии С секции [netlogon]:
; [netlogon]
; comment = Network Logon Service
; path = /usr/local/samba/lib/netlogon
; guest ok - yes
; writable = no
В этой секции также присутствуют комментарий и директива writable. Пользова
тели не должны иметь право записи в этот каталог, потому что здесь хранятся сце
нарии, которые выполняются при входе в систему. Файлы из этого каталога должен
изменять только администратор.
Помимо этого, есть еще две команды:
□ path = путь — полный путь к каталогу netlogon;
□ guest ok = yes — разрешение гостевого входа.
Также нужно убрать комментарии в секции [Profiles], которая выглядит следую
щим образом:
; [Profiles]
; path = /usr/local/samba/profiles
; browseable = no
; guest ok = yes
В этом каталоге хранятся профили пользователей, и он не должен быть виден в
сетевом окружении Windows, поэтому директива browseable = по запрещает отображение.
#### Распечатка
Чтобы пользователям стали доступны принтеры, подключенные к Linux-c^
нужно настроить следующую секцию:
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
Обратите внимание, что по умолчанию секция открыта, и зарегистрированные
пользователи уже имеют доступ к принтерам. Если вы хотите, чтобы
смогли использовать принтер, то добавьте строку public = yes. Однако я не ремендую это делать, потому что такая добавка предоставит пользователям возможность для подшучивания. Например, в моей сети был случай, когда
ник рассылал на все принтеры с общим доступом разные картинки. Вроде '
но, а работу тормозит, и бесполезно расходуются картриджи.
#### Общий доступ
Чаще всего на сервере необходим каталог, через который любой пользователь с
жет обмениваться файлами с другими участниками сети. Для настройки такого
талога служит секция [tmpj:
; [tmp]
; comment = Temporary file space
; path = /tmp
; read only = no
; public = yes
По умолчанию секция закрыта, и для разрешения доступа к ней необходимо убрать
комментарии. Обратите внимание на путь к открытому каталогу. Это /tmp — ката
лог для хранения временных файлов пользователей. С помощью директив read
only (значение по) и public (значение yes) мы указываем серверу Samba, что ката
лог открыт, и в него могут записывать и из него читать файлы все пользователи.
Несмотря на удобства, которые предоставляет этот каталог, я рекомендую исполь
зовать его только в закрытых сетях. Если у вас есть выход в Интернет, то с помо
щью сетевого экрана необходимо ограничить доступ к Samba. Так как в каталог
разрешено записывать любым пользователям, злоумышленник может записать
в него свои файлы, которые помогут ему получить на сервере права администратора.
#### Личные каталоги
Все рассмотренные ранее разделы (секции) конфигурационного файла имеют усто
явшиеся имена и предназначены для решения определенных задач. Но в некоторых
случаях вы можете изменить имя раздела, и на работе сервера это не скажется.
Однако я не рекомендую это делать, потому что в одной версии Samba все будет
работать хорошо, а при обновлении программ сервера ситуация может измениться,
и потом трудно будет найти ошибку, из-за которой Samba станет работать неверно.
Тем не менее вы можете создавать собственные разделы, в которых будете описы
вать некоторые права. Например, вам понадобится организовать общий каталог,
в котором файлы будут доступны всем пользователям, но записывать туда смогут
только пользователи определенной группы. Допустим, что в этом каталоге должны
храниться какие-то картинки. Для решения такой задачи можно создать раздел
[shareimages] следующим образом:
[share images]
comment = Share Images
path = /home/samba/images
public = yes
writable = yes
write list = @staff
printable = no
Для этого раздела задаются следующие директивы:
□ path = /home/samba/images — каталог, который МЫ ХОТИМ Открыть;
□ public = yes — признак доступности;
□ writable = yes — запись в каталог разрешена;
□ write list = Gstaff — определяет группу staff, которая может записывать
файлы. Для всех остальных каталог открыт только для чтения.
В таких объявлениях каталогов можно использовать любые директивы, которые мы
рассматривали в этой главе.
#### Управление пользователями
Для начала разберемся с именами пользователей. По умолчанию для доступа к сер
веру Samba применяются имена из системного файла /etc/passwd. Но вы можете за
вести отдельные записи Samba-сервера, которые будут соответствовать реальным,
однако их можно будет использовать только для подключения к Samba, а не к сис
теме.
Имена Samba описываются в файле /etc/samba/smbusers, расположение и название
которого могут быть изменены директивой username map файла smb.conf. Содержимое файла /etc/samba/smbusers может быть, например, таким:
```sh
# Unix_name = SMB_namel SMB_name2
root = administrator admin
nobody = guest pcguest smbguest
```
У списка имен несколько предназначений. Во-первых, с его помощью вы можете
отразить имена, привычные для пользователей DOS и Windows, на учетные записи
Linux. Например, в Windows максимальные права принадлежат пользователю
Administrator, а в Linux это root. И во второй строке приведенного примера уста
навливается соответствие имен administrator и admin пользователю root.
Во-вторых, использование этого файла позволяет аккумулировать несколько имен
на одной учетной записи. Например, у вас есть группа пользователей, которым
должны быть назначены одинаковые права. Для этого заводим в Linux только одну
учетную запись nobody (под ней будут работать пользователи), а в Samba прописы
ваем ДЛЯ нее неСКОЛЬКИХ пользователей: guest, pcguest И smbguest— под этими
именами они будут входить в систему.
Несмотря на то что мы отразили имена пользователей administrator и admin, и это
разные учетные записи, для них будет использоваться один пароль — назначенный
пользователю root.
Информация о пользователях, которым разрешен доступ, хранится в файле
/etc/samba/smbpasswd. Его расположение и имя могут быть изменены с помощью директивы smb passwd file файла smb.conf. \
Рассмотрим пример содержимого файла:
fienov:0:813D6593C11F1173ED98178CA975D79:[UX ]:LCT-41FA818F
robert:500:813D6593C11F1173ED98178CA975D79:[UX ]:LCT-41FA818F
Сразу видно, что файл чем-то похож на /etc/passwd. Он также разделен двоеточиями
на несколько колонок. Наиболее интересны из них первые три: имя пользователя,
его UID в системе Linux и пароль.
Но добавлять пользователей вручную не очень удобно, потому что требуется за
шифровать и прописать пароль, что не так уж и просто. Чтобы облегчить задачу,
в пакет Samba включена утилита smbpasswd, которая принимает следующие пара
метры:
□ -а — добавить пользователя в систему. Учетная запись должна уже существо
вать в файле /etc/passwd. Например, давайте пропишем Роберта, с которым мы
уже не раз работали:
smbpasswd -a robert
В ответ на это программа попросит вас дважды ввести пароль. Указанная вами
комбинация никак не влияет на системный пароль и используется только для
доступа к Samba. Таким образом, пароли могут отличаться друг от друга. Я даже
рекомендую сделать их различными. ОС Windows умеет запоминать пароли и
хранить в своей системе, и версии Windows 9х делают это небезопасным спосо
бом. Если злоумышленник сможет украсть пароль на Samba, то он проникнет и
в систему;
□ -х — удалить пользователя. Чтобы исключить Роберта из системы, выполните
команду: smbpasswd -х robert;
□ -d — деактивировать пользователя. Если необходимо временно отключить дос
туп для пользователя, не удаляя его из системы, выполните команду smbpasswd
-d robert. Давайте посмотрим на строку, соответствующую Роберту, после вы
полнения этой команды:
robert:500:813D6593C11F1173ED98178CA975D79:[DUX ]:LCT-41FA818F
Обратите внимание, что в четвертой колонке в квадратных скобках появилась
буква D. Она как раз и указывает на то, что запись деактивирована. Так вы легко
можете определить, какие записи активны, а какие нет;
□ -е — активирЪвать пользователя. С помощью этой команды можно подключить
деактивированного ранее пользователя: smbpasswd -е robert.
Если запустить smbpasswd без параметров, то вы сможете поменять свой пароль,
и это можно будет сделать с текущими правами. Выполнение всех остальных
команд требует прав администратора, поэтому их придется выполнять с использо
ванием sudo.
Напоминаю, что файл /etc/samba/smbpasswd используется, если пароли передаются
по сети в зашифрованном виде. В этом случае, чтобы предоставить доступ к Samba
всем пользователям системы, необходимо для каждого выполнить команду:
smdpasswd.
#### Использование Samba
Сервис Samba в основном создавался для пользователей Windows, но и поклонники
Linux тоже оценили все преимущества этой технологии, тем более что ОС Linux
управляет совместным доступом к файлам по сети не хуже Windows, а в чем-то да
же лучше. Для работы с Samba из ОС Linux служит команда: smbciient.
Чтобы подключиться к серверу, необходимо указать как минимум два ключа: -L
(адрес сервера) и -и (имя пользователя). В ответ на это программа запросит ввести
пароль. Если вы не используете шифрование, то необходимо ввести системный па
роль, в противном случае воспользуйтесь тем, который вы указали при переносе
пользователя в файл /etc/samba/smbpasswd (при запуске команды smbpasswd).
Итак, выполните следующую команду для тестирования сервера:
smbciient -L localhost -U root
После ввода пароля пользователя root вы должны увидеть все открытые ресурсы
сервера.
Вы должны учитывать, что в этом списке находятся не все каталоги. Если, например, у домашних каталогов из раздела [homes] файла конфигурации директива
browseable установлена в значение по (см. разд. 6.2.7), таких каталогов видно не
будет. Это вполне логично, потому что злоумышленнику нельзя давать возмож
ность лицезреть имена каталогов, особенно если они соответствуют именам поль
зователей или содержат конфиденциальные данные. Никогда не изменяйте этот
параметр, чтобы хакер не знал, что он должен сломать.
Для подключения к открытому ресурсу сервера нужно подать команду: smbciient,
передав ей имя ресурса, которое задается в формате UNC (Universal Naming
Convention, универсальное именование объектов) с применением следующего синтаксиса:
\\ИмяСервера\ресурс
Например, вы хотите подключить домашний каталог пользователя flenov. Его адре
сом будет:
\\192.168.1. l\flenov
Но здесь надо сделать одно замечание: в Linux обратная косая черта (\) является
служебным символом, поэтому каждый такой знак должен заменяться двумя сим
волами \\ (т. е. каждый знак \ экранируется еще одним знаком \). Поскольку в на
чале UNC-имени идут два знака \\, то они заменяются на четыре обратных косых
черты, и приведенный здесь адрес должен быть введен так:
WW192.168.1. lWflenov.
Итак, для подключения к ресурсу выполняем команду:
smbclient \\\\192.168.1. lWflenov
Если вы обращаетесь к ресурсу, который требует авторизации, необходимо указать
имя пользователя, обладающего правами:
smbclient \W\192.168.1. lWflenov -U flenov
При удачном подключении к открытому ресурсу вы увидите такое приглашение:
Smb: \>
Теперь можно выполнять различные операции над файлами. Чтобы узнать, какие
команды доступны, введите директиву help или знак вопроса (?). Команды, кото
рые вы увидите, очень похожи на команды FTP (более подробно с FTP мы позна
комимся в главе 10, см. также приложение /). Для отключения от ресурса необхо
димо выполнить команду exit.
#==========================================
### Настройка sendmail
Основной конфигурационный файл, который вам понадобится, — `/etc/sendmail.cf` или
`/etc/mail/sendmail cf`. Если файла не существует, то, скорей всего, sendmail не установ
лен, что случается в установке дистрибутива по умолчанию. Устанавливаем:
`sudo apt-get install sendmail
После установки сразу же должна начаться автоматическая настройка. Если и по
сле этого файла конфигурации не оказалось в системе, то выполните эту команду:
sudo sendmaiIconfig
Программа начальной настройки запросит пути к конфигурационным файлам* Со
гласитесь со значениями по умолчанию, но обратите внимание, какие пути у вас
спрашивают. В последнем релизе дистрибутива Ubuntu версия sendmail предлагает
использовать путь /etc/mail/ для всех файлов.
Сервер sendmail имеет плохую репутацию в связи со сложностью его настройки.
Действительно, стоит лишь взглянуть на размер файла sendmail.cf, и становится жут
ко — это 32 килобайта (более 1000 строк). А если заглянуть внутрь файла, то станет
еще страшнее от непонятных ключей и директив.
В файле конфигурации sendmail все параметры сгруппированы по разделам. Раз
биение оформляется в виде следующих строк:
```sh
##################
# Local info #
##################
```
Столь «красивое» оформление означает, что далее следует раздел Local info. По
добных секций несколько — в частности, обычно присутствуют такие:
□ Local info — локальная информация, основные сведения о сервере и домене;
□ options — настройки работы программы sendmail;
□ Message precedences — приоритеты сообщений;
□ Trusted users — доверенные пользователи;
□ Format of headers — форматы Заголовков.
Рассмотреть все настройки в этой книге невозможно — в моей системе этот конфи
гурационный файл занимает 50 Кбайт. Если расписывать каждый параметр, понадо
бится отдельное издание. Наша цель— эффективность и безопасность, поэтому
рассмотрим только те настройки, которые касаются этих вопросов, и испытаем
sendmail в действии.
Для упрощения конфигурирования sendmail в последних версиях этого почтового
сервиса используется новый файл — sendmail.mс (МС означает Minimal Configuration или
минимальная конфигурация), который можно найти в каталоге /etc/mail.
```sh
divert(-1)
dnl This is the sendmail macro config file. If you make changes to this
dnl file, you need the sendmail-cf rpm installed and then have to
dnl generate a new /etc/sendmail.cf by running the following command:
dnl Это файл макроконфигурации sendmail. Если вы делаете изменения в этом
dnl файле, вам нужна инсталляция rpm sendmail-cf, с помощью которой можно
dnl сгенерировать новый /etc/sendmail.cf, запустив команду:
dnl
dnl
m4 /etc/mail/sendmail.me > /etc/sendmail.cf
dnl
include('/usr/share/sendmail-cf/m4/cf .m4’)
VERSIONID('linux setup for ASPLinux’)dnl
OSTYPE('linux')
dnl Uncomment and edit the following line if your mail needs to be
dnl sent out through an external mail server:
dnl Раскомментируйте следующую строку, если вам нужно посылать почту
dnl через внешний почтовый сервер:
dnl define('SMART_HOST','smtp.your.provider')
define('confDEF_USER_ID',''8:12'')dnl
undefine('UUCP_RELAY')dnl
undefine('BITNET_RELAY')dnl
```
Файл sendmail.me имеет более простой формат по сравнению со старым sendmail.cf,
благодаря чему уменьшается вероятность допустить ошибку при его конфигуриро
вании. После внесения изменений его необходимо скомпилировать (перевести файл
sendmail.mс в формат sendmail.cf) специальной командой, в результате чего получает
ся файл /etc/sendmail.cf.
Мы в основном будем рассматривать параметры, которые нужно устанавливать
в файле sendmail.cf, а если описывается параметр файла sendmail.mс, я буду явно указывать на это.
Иногда при неправильных настройках загрузка Linux может зависать при старте
сервиса sendmail. Это происходит из-за того, что ваш почтовый сервер не может
определить имя компьютера. Откройте файл /etc/hosts. В нем чаще всего будет в наличии только одна строка:
127.0.0.1 localhost.localdomain localhost
Подробно с этим файлом мы познакомимся в главе 77, когда станем рассматривать
DNS. Сейчас нам надо знать, что эта строка описывает IP-адрес 127.0.0.1, который
соответствует имени localhost. В любой системе такие адрес и имя указывают на
вашу локальную машину. Когда в сетевых программах вы указываете localhost, то
это имя преобразуется в IP-адрес 127.0.0.1.
Настройка DNS может быть очень важна для правильной отправки почты. Допустим, что у меня есть домен www.flenov.ru. Этот домен может загружать веб-сайт, а
может отправлять почту, если послать что-либо на почтовый ящик info@flenov.ru
(в реальности такой ящик не существует). В обоих 'случаях домен один и тот же, но
веб-сервер и почтовый сервер могут находиться на разных серверах с разными IP.
Настройка DNS позволяет указать, какой IP-адрес у веб-сервера и какой адрес
у почтового.
Для почтового сервера нужно будет в настройки DNS добавить следующие строки:
IN MX 10 mx.flenov.ru.
mx.flenov.ru. IN АААА 1р_адрес_в_формате^6
mx.flenov.ru. IN А 1р_адрес_в_формате^4
Домен Fienov.ru поменяйте здесь на свой, и точка после него не случайна.
Ну и домен этот должен быть прописан в host-файле:
127.0.0.1 flenov.ru
Пока мы с DNS еще не знакомы, поэтому в sendmail можно для тестов использовать
имя компьютера, которое вы указали во время установки ОС Linux. Выполните
команду hostname, чтобы это имя узнать. В моем случае это FienovM. Но на деле все
сетевые обращения происходят не по имени, а по IP-адресу, и если sendmail не может определить адрес по имени FienovM, происходит зависание. Чтобы исправить
эту ситуацию, добавьте в файл /etc/hosts строку вида:
192.168.77.1 FlenovM
FlenovM
Не забудьте только заменить приведенный здесь параметр FienovM на имя вашего
компьютера и, разумеется, указать свой IP-адрес. После этого программу sendmail
можно помещать в автозапуск, и она будет работать великолепно даже с настрой
ками по умолчанию.
Для каждого пользователя системы автоматически создается почтовый ящик, и ес
ли сервис sendmail запущен, то им уже можно пользоваться. Все почтовые ящики
хранятся в каталоге /var/spool/mail/. Их имена соответствуют именам пользователей.
Так, для учетной записи root ящик будет расположен в файле /var/spool/mail/root.
Для работы с почтой нам нужен почтовый клиент, который будет отправлять пись
ма серверу и принимать от него новые сообщения. Таких программ существует
множество, и в некоторых дистрибутивах Linux предлагается аж семь различных
клиентов. Какой выберете вы, зависит только от личных предпочтений.
В общем-то можно обойтись и без клиента, а соединение с сервером осуществлять
напрямую через сервис Telnet, благо команды SMTP достаточно просты и ими легко пользоваться. В этом случае для отправки почты нужно подключиться к порту 25 (порт SMTP), а для получения — к 110 (порт POP3).
#### Полезные команды
Давайте рассмотрим некоторые команды, которые помогут вам в администрирова
нии sendmail-сервера:
□ hoststat— показать состояние хостов, которые недавно работали с локальным
почтовым сервером. Команда является эквивалентом sendmail -bh, которая по
умолчанию неактивна;
□ mailq — отобразить краткую информацию о сообщениях в очереди, ожидающих
обработки. Пример результата выполнения команды:
/var/spool/mqueue (1 request)
--- Q-ID----—Size—------Q-Time----- ---- Sender/Recipient-----
jOIAnST11838 6 Tue Jan 18 13:49 <flenov@flenovm.ru>
(host map: lookup (flenovm.ru): deferred)
<root@flenovm.ru>
Из первой строки видно, что в очереди находится одно сообщение. Вторая строка включает дату посылки и адрес отправителя: fienov@fienovm.ru. В последней
строке отображается получатель сообщения: root@f lenovm. ru;
□ mailstats — отобразить статистику сообщений и количества байтов;
□ sendmail — запустить сервер sendmail. Используя эту команду с различными
ключами, можно увидеть достаточно много полезной информации. За более
подробной справкой следует обратиться к документации: man sendmail.
#### Только отправка почты
Очень часто почтовые сервисы используют только для отправки почты. Например,
на веб-серверах sendmail может стоять лишь для того, чтобы можно было отослать
письмо прямо из сценариев на Perl или РНР. Если ваш сервер не должен принимать
писем, то необходимо запретить режим приема. Для этого откройте файл /etc/
sysconfig/sendmail и измените его содержимое:
DEAMON=yes
QUEUE=”qlh”
Вторая строка задает параметры, которые будут передаваться программе sendmail
при запуске. Чтобы возобновить прием почты, измените значение qih на ьа.
Если у вас нет файла /etc/sysconfig/sendmail (он используется не во всех дистрибути
вах), то придется редактировать сценарий /etc/rc.d/init.d/sendmail. Найдите в этом фай
ле параметры, которые передаются программе, и измените их на qih прямо в тексте
сценария.
Для защиты сервера от DoS-атак со стороны хакера нам помогут следующие пара
метры сервиса sendmail:
□ MaxDeamonChiidren— ограничение количества одновременно запущенных про
цессов. С помощью этого параметра мы можем защитить ресурсы сервера (про
цессор) от излишней перегрузки. По умолчанию установлено значение 12, но
для мощного компьютера его можно повысить, чтобы эффективнее использо
вать процессор, а для слабого — уменьшить;
□ connectionRateThrottie— максимальное количество открываемых соединений
в секунду. По умолчанию этот параметр равен 3, и повышать его без особой на
добности не стоит, разве что вы уверены в производительности сервера.
#==========================================
### Локальный файл hosts
Мы уже знаем, что изначально для сопоставления имен и адресов использовался
файл /etc/hosts. Это текстовый файл с записями типа:
127.0.0.1 localhost.localdomain localhost
192.168.77.1 FlenovM
Каждая строка — это соответствие IP-адреса его имени. По умолчанию в файле
будет всего две строки, как в приведенном примере. Первая строка — это «пет
ля». Напоминаю, что во всех компьютерах имя localhost и IP-адрес 127.0.0.1 ука
зывают на текущую машину. Это значит, что, если нужно выполнить ping, адре
совав запросы на локальный компьютер, можно написать:
ping 127.0.0.1
Во второй записи устанавливается соответствие между IP-адресом, заданным для
вашего сетевого интерфейса, и символьным именем. Здесь моей сетевой карте при
своен адрес 192.168.77.1, И ему соответствует ИМЯ FlenovM. Это значит, что при вы
полнении команды ping можно указывать или IP-адрес, или имя компьютера.
Следующие две команды идентичны:
ping 192.168.77.1
ping FlenovM
При выполнении второй команды сначала происходит обращение к файлу /etc/hosts,
который вернёт программе адрес 192.168.77.1 и уже на него направится эхо-запрос.
А что будет использоваться для поиска адреса первым: файл /etc/hosts или DNS-база
данных? Это зависит от настроек ОС. Посмотрим на файл /etc/host.conf. В нем нахо
дится строка:
order hosts,bind
Директива order как раз и задает порядок просмотра. В нашем случае на первом
месте находится файл /etc/hosts, и только после этого будет запущена команда bind
для выполнения запроса к DNS-серверу. Что это нам дает? А то, что можно увели
чить скорость доступа к основным серверам. Допустим, что вы каждый день посе
щаете сайт www.redhat.com. При этом каждый раз происходит запрос к DNS-
серверу, что может приводить к задержке в пару секунд перед началом загрузки
страницы. Чтобы ускорить этот процесс, можно вручную прописать в файле
/etc/hosts следующую запись:
209.132.183.105
www.redhat.com
Вн и м ан и е!
Адрес 209.132.183.105 действительно соответствует сайту www.redhat.com на мо
мент подготовки этого издания книги, но может измениться.
Еслй сайт по каким-либо причинам перестал загружаться, то необходимо удалить
Соответствующую ЗаПИСЬ ИЗ файла hosts И С ПОМОЩЬЮ КОМаНДЫ ping redhat.com
проверить связь с сервером, а заодно и уточнить его адрес. В ответ на эту директи
ву на экране обязательно отображается реальный IP-адрес, с которым происходит
обмен эхо-сообщениями. Благо IP-адреса у большинства сайтов изменяются редко,
так что, один раз добавив такую запись в локальный файл /etc/hosts, можно сэконо
мить достаточно много времени и нервов в случае проблем с DNS-сервером, пото
му что запросов к нему отправляться не будет.
#### Внешние DNS-серверы
Если в локальном файле /etc/hosts не найдено записи о нужном имени, то компьютер
должен запросить эту информацию у DNS-сервера. Для этого нужно знать IP-адрес
этого самого сервера. Как система его узнает? Из файла /etc/resolv.conf, который
должен выглядеть примерно следующим образом:
search' FlenovM
domain domain.name
nameserver 10.1.1.1
nameserver 10.1.1.2
В первой строке находится команда search с параметром (сервер поиска имени хос
та). В вашем файле, скорее всего, есть эта запись, и в качестве сервера вписано имя
вашего компьютера. Здесь может быть перечислено несколько серверов, разделен
ных пробелами или символами табуляции. Например:
search FienovM MyServer
Поиск на локальном сервере происходит довольно быстро, а вот на удаленных —
может отнять достаточно много времени.
Вторая строка содержит команду domain с параметром. Пользователи иногда любят
задавать имя компьютера без указания домена — например, redhat вместо
redhat. com. Вы должны задать полное имя узла. Чаще всего этот параметр настраи
вается в локальных сетях со специфичным именем домена.
Оставшиеся две строки содержат команду nameserv с параметром. Это внешний
DNS-сервер, которому будут направляться запросы. В системе их может быть не
сколько (в настоящее время для большинства дистрибутивов не более трех). Они
будут опрашиваться в порядке указания в файле, пока искомый адрес не будет
найден.
В большинстве случаев достаточно и одного сервера, потому что все они работают
рекурсивно. Но я рекомендую указывать два. Бывают случаи, когда один DNS-
сервер выходит из строя, тогда второй спасает положение и вступает в работу.
#### Настройка DNS-сервиса
В настоящее время наиболее распространенным сервисом DNS для Linux является
bind. Для этого сервиса существует программа bindconf, которая имеет графический
интерфейс и проста в использовании. Зайдите в графическую оболочку и в консоли
выполните команду:
bindconf &
Знак & говорит о том, что, запустив программу, консоль не должна дожидаться ее
завершения. Это очень удобно при запуске графических утилит, чтобы они не оста
навливали работу консоли. Учтите, что если закрыть окно консоли, то все про
граммы, запущенные с ключом &, тоже закроются.
На рис. 11.2 изображено запущенное приложение для настройки DNS-сервиса.
В центре показано окно, которое открывается по нажатию кнопки Добавить. Как
видите, достаточно только выбрать тип зоны и ввести имя домена — и все готово.
Несмотря на наличие простой графической программы, мы рассмотрим конфигура
ционные файлы, которые могут использоваться сервисом DNS. Их прямое редакти
рование позволит сделать более тонкую настройку, и вы лучше будете понимать
процесс работы DNS.
Настройка DNS-сервера начинается с файла /etc/named.conf. Пример его содержимо
го приведен в листинге 11.1.
```sh
options {
directory "/var/named/";
};
zone ”." {
type hint;
file "named.ca" ;
};
zone "sitename.com" {
type mastery
file "sitename.zone";
};
zone "10.12.190.in-addr.arpa" {
type mastery
file "10.12.190.in-addr.arpa.zone";
};
```
В этом примере файл разбит на четыре раздела, каждый из которых имеет следую
щий формат:
тип имя {
Параметр1;
Параметр2;
};
Давайте рассмотрим назначение разделов. Первым идет options:
options {
directory "/vaг/named/";
};
В фигурных скобках только один параметр— directory, который указывает на
домашний каталог DNS-сервера. Все его файлы будут располагаться там.
Остальные разделы имеют тип zone и через пробел в кавычках содержат имя зоны.
В каждом из них по два параметра: type (определяет тип зоны) и file (файл, в ко
тором содержится описание).
Самая первая зона в нашем примере— zone ".". Что это за зона в виде точки?
Вспомните структуру DNS, которую мы рассматривали в начале главы. В базе дан
ных DNS так обозначается корень иерархии. Получается, что раздел описывает
корневую зону. Тип зоны hint, т. е. здесь хранятся лишь ссылки на DNS-cepfeepw.
Поскольку это корневая зона, то и ссылки будут на корневые серверы.
В параметре file указывается имя файла, содержащего все ссылки на корневые
серверы. В системе этого файла может и не быть, потому что информация в нем
подвержена изменениям, и лучше всего получить его последнюю версию с сервера
internic.net. Для этого выполните команду:
dig 0rs.internic.net . ns > named.са
А можно скачать этот файл непосредственно с FTP-сервера internic.net по адресу
ftp://ftp.rs.internic.net/domain/named.root и поместить в каталог /var/named.
Перейдем к следующему разделу zone "sitename.com". Здесь описывается зона
sitename.com. Тип записи master, значит, ваш DNS-сервер будет главным, а все
остальные станут только сверяться с ним и кэшировать информацию. Сведения об
этой зоне будут храниться в файле sitename.zone рабочего каталога. В нашем случае
это: /var/named.
Следующая зона описывает обратное преобразование IP-адресов 190.12.10.* в име
на. Тип записи — снова master, и в последней строке указан файл, где будет находиться описание зоны.
#==========================================
### Журналирование
В Linux работают одновременно сразу несколько журналов, и по содержащейся
в них информации вы сможете вычислить хакера и увидеть, когда он проник в сис
тему, а также узнать еще много интересного. Так как журналирование — один из
инструментов обеспечения безопасности, мы рассмотрим журналы достаточно
подробно. Это позволит вам лучше контролировать свои владения.
#### Основные команды
Информация о текущих пользователях системы сохраняется в файле /var/run/utmp.
Если попытаться посмотреть его содержимое, например, командой cat, то ничего
хорошего нашему взору не откроется. Этот журнал хранит данные не в текстовом,
а бинарном виде, и получение информации из него возможно только с помощью
специализированных программ (команд).
who
Команда who позволяет узнать, кто сейчас зарегистрирован в системе и сколько вре
мени он в ней находится. Информация, как уже было отмечено, извлекается из
файла /var/run/utmp. Введите эту команду, и на экране появится список примерно сле
дующего вида:
robert , ttyl
Dec 8 10:15
root
tty2
Dec 8 11:07
Из этого списка становится ясно, что пользователь robert работает за первым тер
миналом (ttyl) и вошел в систему 8 декабря в 10 часов 15 минут, а через 52 минуты
со второго терминала вошел пользователь root.
Большинство хакеров при входе в систему выполняют эту команду, чтобы выяс
нить, есть ли сейчас в системе администратор. Если пользователь root присутству
ет, то начинающие хакеры часто уходят, т. к. опасаются, что их знаний не хватит,
чтобы остаться незамеченными. При этом, вероятно, потом они вернутся.
А это еще одна причина, по которой администратор не должен входить в систему
под учетной записью root. Лучше всего работать как простой пользователь, а когда
не хватает прав, то переключаться на привилегированного. На такой случай я создал
учетную запись, для которой установил UID равным нулю. Она позволяет получить
доступ ко всей системе, и при этом имеет имя, отличное от root, и не вызывает по
дозрений, когда я под ним работаю. Так что в моей системе никогда нельзя увидеть
пользователя root.
users
Команда users также позволяет вытащить из журнала /var/run/utmp список всех поль
зователей, которые сейчас зарегистрированы в системе.
В этом журнале информация хранится временно — только в период присутствия
пользователя. Когда он выходит из системы, соответствующая запись удаляется.
После этого выяснить, кто и когда работал, удастся только из журнала /var/log/wtmp.
Это также бинарный файл, и его содержимое можно увидеть с помощью специали
зированных программ.
last
Команда last позволяет выяснить, когда и сколько времени определенный пользо
ватель находился в системе. В качестве параметра ей передается интересующее
имя. Например, следующая директива отображает время входа и продолжитель
ность нахождения в системе пользователя robert:
last Robert
Выполнив команду, вы увидите на экране примерно следующий текст:
robert
ttyl
Thu Dec 2 12:17 - 12:50 (00:33)
По этой записи можно понять, что robert находился за терминалом (ttyl), зашел
в систему 2 декабря на 33 минуты (с 12:17 до 12:50). Если пользователь работал не
локально, а через сеть, то будет отображена информация о хосте, с которого он
входил в систему.
Если выполнить эту команду для себя, то может вывалиться такой список, что чи
тать его будет невозможно, потому что вы довольно часто работаете в системе.
Чтобы ограничить выводимые данные, можно указать ключ -п и количество ото
бражаемых строк. Например, следующая команда выдаст информацию о последних
пяти входах:
last -п 5 robert
history
Команда history выводит историю выполненных в консоли команд. Список может
быть достаточно большим. Вы можете ограничить список, указав после имени
команды число. Следующий пример покажет только последние 10 выполненных
в консоли команд:
history 10
lastlog
Если выполнить команду lastlog, то она выведет на экран перечень всех пользова
телей с датами их последнего подключения к системе. Пример результата ее вы
полнения можно увидеть в листинге 12.1.
Список состоит из четырех колонок:
“1 имя пользователя из файла/etc/passwd;
□ порт или терминал, на который происходило подключение;
□ адрес компьютера, если вход был по сети;
□ время входа.
С помощью lastlog удобно контролировать системные записи. У них дата послед
него входа должна быть **Never logged in**, потому что под ними нельзя войти
в систему (в качестве командных оболочек установлены /bin/false, /dev/null, /sbin/nologin
и др.). Если вы заметили, что кто-либо вошел в систему через одну из этих учетных
записей, то это значит, что хакер использует ее, изменив настройки.
Простая замена командной оболочки в файле /etc/passwd может открыть хакеру
«потайную дверь», и администратор не заметит этой трансформации. Но после
выполнения команды lastlog все неявное становится явным.
Обращайте внимание на тип подключения и адрес. Если что-то вызывает подозре
ние, то можно выявить атаку на этапе ее созревания.
Isof
С помощью команды lsof можно определить, какие файлы и какими пользователя
ми открыты в текущий момент. Результат ее выполнения приведен в листинге 12.2.
Это далеко не полный результат. Даже если вы сейчас один работаете с системой,
количество открытых файлов может исчисляться парой десятков, и число их замет
но растет, если в системе несколько пользователей, — ведь один файл может от
крываться несколько раз каждым из них. Это касается в основном системных кон
фигурационных файлов.
#### Пользовательские журналы
Все команды, выполненные пользователем, сохраняются в файле .bash_history (если
используется интерпретатор команд /bin/bash), который находится в пользователь
ском домашнем каталоге. Когда вы определили, под какой учетной записью в сис
теме находился взломщик, его действия можно проследить по этому журналу.
Вы сможете узнать, какие команды или программы выполнялись, и эта информация
подскажет, как злоумышленник проник в систему и что изменил. Если хакер добавил
пользователя или модифицировал какой-либо важный системный файл, то вы это
увидите, сможете вернуть все в исходное состояние и тем самым быстро закрыть
«двери» в системе, которые открыл хакер.
#==========================================
### Резервирование в Linux
Самый простой вариант создания резервной копии — использование команды ср
(копирование файлов). Только при копировании необходимо обязательно сохранять
права доступа к файлу. Вот как может выглядеть команда, сохраняющая каталог
/home на примонтированный к системе диск /mnt/resdisk:
ср -a /home /mnt/resdisk
Здесь я использовал ключ -а, который равносилен указанию сразу трех ключей
(-dpR):
□ -d — не следовать по символьным ссылкам. Мы копируем каталог в таком виде,
как он есть;
□ -р — сохранять права доступа к файлу;
□ -R — копировать каталоги рекурсивно, чтобы на архивный диск попали все фай
лы и подкаталоги.
Получается, что команда, показанная ранее, идентична следующей:
ср -dpR /home /mnt/resdisk
С помощью этой директивы мы создаем полную копию каталога. А как можно со
хранить изменения? Для этого необходимо произвести копирование на тот же диск,
только с указанием ключа -и:
ср -аи /home /mnt/resdisk
При этом будут скопированы все файлы из каталога /home, дата изменения которых
позже, чем у документов из каталога /mnt/resdisk.
#### Утилита tar
Копировать по одному файлу не очень удобно. Лучше, когда все находится под од
ной крышей. В Linux есть утилита tar, которая собирает все файлы в один. Этот
процесс называют архивированием, но вы должны учитывать, что tar не сжимает
файлы. Если вы объединяете файлы общим размером в 2 Мбайт, то архив будет
иметь размер чуть больше (размер всех файлов плюс заголовок tar).
Преимущество сборки целого каталога в один файл состоит в том, что им проще
потом управлять и сжимать специализированными программами.
Для архивирования как минимум нужно выполнить команду:
tar cf архив.tar каталог
Здесь у нас два параметра:
П с — указывает на необходимость создания архива;
□ f — назначает архивный файл или устройство. По умолчанию используется уст
ройство /dev/rmtO.
Итак, для архивирования каталога /home выполняем следующую команду:
tar cf backup.tar /home
При использовании параметров cf в архиве сохраняется и путь к файлам. Если рас
паковать созданный нами архив, то в результате в текущем каталоге будет создан
каталог home, а в нем уже будут располагаться все пользовательские каталоги. На
пример, если запустить команду разархивирования в каталоге /home, то каталоги
пользователей окажутся в /home/home, а если находиться в /etc, то пользователи уви
дят свои каталоги в /etc/home.
Чтобы добиться правильного результата, нужно перейти в корень диска и выпол
нять команду там:
cd /
tar xf /home/backup.tar
Здесь мы из корневого каталога разархивируем резервную копию, которая находит
ся в файле /home/backup.tar.
Помимо этого, для архивных операций могут пригодиться следующие ключи ути
литы tar:
□ v— вывести на экран информацию об архивируемом (или распаковываемом)
в данный момент файле;
□ z — найти и обработать при распаковке GZIP-архивы;
□ р — разархивировать всю информацию о безопасности;
□ d — найти различия между архивом и файлами системы;
О t — просмотреть содержимое архива;
□ и — обновить файлы в архиве, которые были изменены;
□ n date — добавить в архив только те файлы, которые изменены позже указанной
даты. Параметр date должен быть заменен необходимой датой;
□ р — не удалять первый символ /. В этом случае, в каком каталоге вы ни запусти
те разархивирование, файлы попадут на свое родное место.
С помощью утилиты tar можно архивировать сразу несколько каталогов. Следую
щая команда помещает в архив каталоги /home и /etc:
tar cf backup.tar /home /etc
Чтобы просмотреть содержимое архива, можно выполнить команду:
tar tvf backup.tar
В ответ на это на экране будут показаны все файлы и каталоги архива, их права
доступа и владельцы.
Посмотрите на последнюю колонку, где показано расположение файла. Обратите
внимание, что путь не начинается с символа /, указывающего на корень диска. По
этому такой архив нужно распаковывать в корне, иначе он будет создаваться
в текущем каталоге.
С помощью tar очень удобно и легко создавать резервные копии, которые содержат
только изменения. Для этого мы просто задаем ключ -д и указываем какой-то файл,
который будет использоваться для отслеживания того, какие файлы уже резервиро
вались и какая версия уже находится в архиве.
Давайте рассмотрим все это на примере:
tar -cf backupO.tar -g home-flenov.snar /home/flenov
Здесь:
□ c — указывает на необходимость создания архива;
□ f — указывает на то, что мы хотим задать определенное имя файла и это имя
идет сразу после ключа: backupO.tar;
□ g — указывает на то, что нужно копировать только изменения. После этого клю
ча надо указать файл, где будут храниться изменения. В качестве его имени я
использую полный путь к нему, просто вместо слэшей указываю символ тире.
Я заметил, что очень часто таким файлам дают расширение snar. Я точно не
знаю, но мне кажется, что это объединение двух слов: sn, которое указывает
на слово snapshot (снимок), и аг, которое указывает на архив tar. Возможно, я тут
не прав, но в любом случае расширение может быть и другим;
□ ну и в конце идет каталог, резервную копию которого вы хотите создать.
Запустите команду: tar создаст полную резервную копию, если файл flenov.snar не
существует.
Теперь попробуйте изменить пару файлов или создать новый и снова выполнить
команду:
tar -cf backupl.tar -g home-flenov.snar /home/flenov
Я увеличил число в имени файла архива с 0 до 1. В этот файл уже попадут только
изменения с момента последней резервной копии.
#### Утилита gzip
В ОС Linux есть достаточно много различных утилит для упаковки данных. Наибо
лее популярной из них является gzip. Преимущество архивирования перед простой
упаковкой данных заключается в том, что результирующая копия занимает меньше
места, а значит, носитель для резервирования понадобится меньшего объема.
Чаще всего копируются документы, размер которых в заархивированном виде мо
жет уменьшаться на 90%. Текстовые данные сжимаются намного лучше, чем про
граммы.
Недостаток архивирования — возрастает нагрузка на процессор, и может потребо
ваться больше времени на создание полной копии. Однако за счет того, что архив
занимает намного меньше места, его копирование на сетевые ресурсы или запись
на съемные носители (ZIP, JAZ, CD-R/RW, DVD-R/RW и др.) производится быст
рее. В итоге может выйти, что затраты времени на копирование и процессорного
времени на архивирование окажутся идентичны затратам на копирование без архи
вирования или даже меньше.
Прежде чем сжимать какой-либо файл, рекомендуется подготовить TAR-архив. По
том достаточно выполнить команду упаковки:
gzip -уровень файл.tar
В качестве ключа -уровень нужно указать степень компрессии. Максимальный уро
вень равен 9. После этого указывается имя TAR-архива. Давайте сожмем архивный
файл, который мы создали из каталога /home, применяя наибольшую компрессию.
Выполните следующую команду:
gzip -9 backup.tar
Теперь просмотрите содержимое каталога (команда is). Обратите внимание, что
файла backup.tar больше нет. Вместо него появился файл backup.tar.gz, размер кото
рого значительно уменьшился.
Чтобы разархивировать такой файл, можно пользоваться все той же командой tar,
только необходимо указать ключи xf z:
cd /
tar xfz /home/backup.tar. gz
Эта команда сначала разархивирует GZ-файл и тут же распакует TAR-архив.
Если необходимо из GZ-файла снова получить TAR-архив (без его распаковки), то
можно выполнить команду:
gzip -d /home/backup.tar.gz
После этого вы снова увидите файл backup.tar, а файл backup.tar.gz исчезнет.
Теперь вы готовы написать свой сценарий, который будет собирать каталоги для
архивирования в TAR-файл, а затем сжимать его, чтобы уменьшить размер. Но
можно не использовать две команды, а обойтись одной. Вот как это делается:
tar cvf - /home | gzip -9с > backup.tar.gz
Здесь мы собираем в TAR-архив каталог /home и тут же сжимаем его утилитой gzip.
Помимо gzip для архивирования иногда используется утилита compress, но ее воз
можности по сжатию ниже, и к тому же вокруг нее возникали скандалы и разбира
тельства по поводу лицензии. Большинство администраторов уже перешли на ис
пользование gzip, и я вам рекомендую с самого начала привыкать к этой программе.
#### Утилита dump
Все предыдущие команды, которые мы рассматривали в этой главе, не являются
специализированными командами резервирования. Это просто команды копирова
ния и архивирования файлов. А вот утилита dump предназначена именно для соз
дания резервной копии файловой системы Ext (поддерживаются версии, начиная со
второй).
Для выполнения резервной копии нужно как минимум указать:
□ -п — уровень резервной копии, где п может изменяться от о до 9. При значе
нии о создается полная резервная копия. Уровни выше о означают формирова
ние резервной копии изменений, произошедших с момента последней полной
резервной копии или создания копии с меньшим уровнем;
□ -и— требование при удачном завершении резервирования обновить файл
/etc/dumpdates, в котором хранятся даты создания резервных копий;
□ -f файл— имя файла или устройство, на которое нужно производить резервное
копирование.
Итак, простейшая команда создания полной резервной копии выглядит следующим
образом:
dump -Ou -f /home/backup.bak
Для сохранения изменений нужно изменить уровень, указав значение больше нуле
вого, например:
dump — lu -f /home/backup.bak
Для восстановления файлов из архива служит команда restore. Но прежде чем ее
запускать, вы должны убедиться, что находитесь в каталоге, который принадлежит
восстанавливаемой файловой системе.
В команде restore достаточно только указать ключ -f и файл, который нужно вос
становить. Если применить ключ -i, то вы попадаете в интерактивный режим,
в котором можно задать файлы для восстановления. Интерактивный режим похож
на режим командной строки, только вместо реальной файловой системы в нем вы
путешествуете по архиву. При этом можно выполнять следующие директивы:
□ help — вывести краткую помощь по доступным командам;
□ is — отобразить содержимое текущего каталога;
□ pwd — показать текущий каталог;
□ add каталог — добавить в список для восстановления указанный в качестве ар
гумента каталог;
□ cd — сменить текущий каталог;
□ delete каталог — удалить из списка восстановления каталог, указанный в каче
стве параметра;
□ extract — восстановить все файлы из созданного списка;
□ quit — ВЫХОД.
#==========================================
### CHAGE
Как заставить пользователя менять пароли через определенные промежутки време
ни? Нет, не нужно ходить и нудить ему над ухом — есть способ проще и намного
эффективнее. В Linux имеется утилита chage, которая запускается следующим об
разом:
chage параметры пользователь
В качестве параметра можно указывать следующие ключи:
□ -mN— минимальное число дней (n ) д о смены пароля. Указав это значение чуть
меньше, чем максимальный период (см. следующий параметр), вы защитите
систему от нежелательной смены паролей. Это значит, что если хакер захватит
учетную запись, он не сможет изменить пароль. Конечно же, злоумышленник
тоже может выполнить команду chage, но только если у него есть права админи
стратора. Три-четыре дня разницы между минимальным и максимальным значе
нием необходимы для того, чтобы пользователь смог сменить пароль, пока он не
устарел. Устанавливать разницу меньше трех дней нежелательно, потому что
существуют выходные, и если срок действия попадет на воскресенье, пользо
ватель не успеет сменить пароль. По умолчанию используется значение -1, что
соответствует отсутствию проверки;
□ -м N — максимальный диапазон в днях (n ), в течение которого действует пароль.
После этого пароль считается недействительным, и пользователь не сможет вой
ти в систему. По умолчанию установлено 99999, что соответствует бесконечно
сти, а значит, пароль никогда не устареет;
□ -d N— дата последнего изменения пароля. Параметр N указывает количество
дней начиная с 1 января 1970 года. Если установить юоо, то получится 27 сен
тября 1972 года. Чтобы не высчитывать дату в днях, можно указать ее явным
образом в формате ГГГГ-ММ-ДЦ;
□ -Е дата — дата окончания действия пароля;
□ -I N— период в днях, после которого неиспользуемая учетная запись блокиру
ется. Рекомендую указать не менее 3 и не более 4 дней, чтобы приостановить
действие записи на время отпуска или болезни работника;
□ -w n — количество дней до окончания срока действия пароля, когда пользовате
лю будет выводиться предупредительное сообщение. Нежелательно указывать
менее 3 дней, чтобы не попасть на выходные;
□ -1 пользователь — с этим параметром команда может вызываться любыми поль
зователями и позволяет им узнать информацию о времени жизни их пароля.
Чтобы получить сведения о пароле root, выполните директиву:
chage -1 root.
Результат выполнения команды имеет следующий вид:
Password Expires: Never
Password Inactive:Never
Minimum:
-1
Maximum:
99999
Warning:
Inactive:
-1
-1
Last Change:
Feb 04, 2004
Account Expires:
Never
Здесь отображаются следующие значения:
• Minimum — минимальный срок действия пароля;
• Maximum— максимальный период для пользования паролем;
• warning— количество дней, за которые будет выдаваться предупреждение
о завершении срока действия пароля;
• inactive— максимальное количество дней, в течение которых учетная за
пись может не активироваться;
• Last change — последняя дата изменения;
• Password Expires — дата окончания действия пароля;
• Password inactive — дата, когда пароль стал неактивным;
• Account Expires — дата окончания действия учетной записи.
Чтобы задать максимальное количество дней жизни пароля в 60 дней, выполните
команду:
chage -М 60 robert
Слишком частая смена паролей приводит к тому, что пользователи просто не успе
вают запомнить их. Из-за этого сложные комбинации начинают писать на бумаге,
чтобы случайно не забыть, или просто меняют пароль на старый. Ваша задача —
контролировать замену, и в то же время не стоит заставлять пользователя делать
это слишком часто. Период в 2-3 месяца (или 60-90 дней) считается вполне прием
лемым.
А как проверить, что выбран достаточно сложный пароль и при этом не указан снова
старый? В этом нам поможет РАМ-модуль pam_cracklib.so, который выполняет
основные проверки и позволяет сделать их сложнее. Например, нельзя будет устано
вить старый пароль или воспользоваться большей его частью.
#==========================================
|