Команда Umask

Thank you for reading this post, don't forget to subscribe!

Вопе­ра­ци­он­ных систе­мах Linux и Unix все новые фай­лы созда­ют­ся с набо­ром раз­ре­ше­ний по умол­ча­нию. Ути­ли­та umask поз­во­ля­ет про­смат­ри­вать и уста­нав­ли­вать мас­ку режи­ма созда­ния фай­ла, кото­рый опре­де­ля­ет раз­ре­ше­ния бит для вновь созда­ва­е­мых фай­лов или каталогов.

Она исполь­зу­ет­ся коман­да­ми mkdir, touch, tee и дру­ги­ми, кото­рые созда­ют новые фай­лы и каталоги.

 

Преж­де чем идти даль­ше, давай­те крат­ко объ­яс­ним модель раз­ре­ше­ний Linux.

В Linux каж­дый файл свя­зан с вла­дель­цем и груп­пой и ему назна­че­ны пра­ва досту­па для трех раз­ных клас­сов пользователей:

  • вла­де­лец файла.
  • чле­ны группы.
  • все осталь­ные.

Суще­ству­ет три типа раз­ре­ше­ний, кото­рые при­ме­ня­ют­ся к каж­до­му классу:

  • раз­ре­ше­ние на чтение.
  • раз­ре­ше­ние на запись.
  • раз­ре­ше­ние на выполнение.

Эта кон­цеп­ция поз­во­ля­ет вам ука­зать, каким поль­зо­ва­те­лям раз­ре­ше­но читать файл, запи­сы­вать в файл или выпол­нять файл.

Что­бы про­смот­реть пра­ва досту­па к фай­лу, исполь­зуй­те коман­ду ls:

Пер­вый сим­вол пред­став­ля­ет тип фай­ла, кото­рый может быть обыч­ным file ( -), directory ( d), сим­во­ли­че­ской ссыл­кой ( l) или любым дру­гим спе­ци­аль­ным типом файла.

Сле­ду­ю­щие девять сим­во­лов пред­став­ля­ют раз­ре­ше­ния, три набо­ра по три сим­во­ла в каж­дом. Пер­вый набор пока­зы­ва­ет пра­ва вла­дель­ца, вто­рой – пра­ва груп­пы, а послед­ний набор – пра­ва досту­па для всех остальных.

Сим­вол r с вось­ме­рич­ным зна­че­ни­ем 4 сто­ит для чте­ния, w с вось­ме­рич­ным зна­че­ни­ем 2 для запи­си, x с вось­ме­рич­ным зна­че­ни­ем 1 для раз­ре­ше­ния на выпол­не­ние и ( -) с вось­ме­рич­ным зна­че­ни­ем 0 для без разрешений.

Есть так­же три типа раз­ре­ше­ний спе­ци­аль­но­го фай­ла: setuid, setgid и Sticky Bit.

В при­ве­ден­ном выше при­ме­ре ( rwxr-xr-x) озна­ча­ет, что вла­де­лец име­ет раз­ре­ше­ния на чте­ние, запись и выпол­не­ние ( rwx), груп­па и дру­гие поль­зо­ва­те­ли име­ют раз­ре­ше­ния на чте­ние и выполнение.

Если мы пред­ста­вим пра­ва досту­па к фай­лу с помо­щью чис­ло­вой запи­си, мы подой­дем к чис­лу 755:

  • Вла­де­лец: rwx=4+2+1 = 7
  • Груп­па: r-x=4+0+1 = 5
  • Дру­гое: r-x=4+0+1 = 5

Когда они пред­став­ле­ны в циф­ро­вом фор­ма­те, раз­ре­ше­ния могут иметь три или четы­ре вось­ме­рич­ных циф­ры (0-7). Пер­вая циф­ра пред­став­ля­ет спе­ци­аль­ные раз­ре­ше­ния, а если она опу­ще­на, это озна­ча­ет, что ника­ких спе­ци­аль­ных раз­ре­ше­ний для фай­ла не уста­нов­ле­но. В нашем слу­чае так 755 же, как 0755. Пер­вая циф­ра может быть ком­би­на­ци­ей 4 для setuid, 2 для setgidи 1 для Sticky Bit.

Пра­ва досту­па к фай­лам мож­но изме­нить с помо­щью коман­ды chmod, а вла­дель­ца – с помо­щью коман­ды chown.

 

По умол­ча­нию в систе­мах Linux раз­ре­ше­ния 666 на созда­ние по умол­ча­нию пред­на­зна­че­ны для фай­лов, кото­рые дают пра­ва на чте­ние и запись для поль­зо­ва­те­ля, груп­пы и дру­гих, а так­же 777 для ката­ло­гов, что озна­ча­ет раз­ре­ше­ние на чте­ние, запись и выпол­не­ние для поль­зо­ва­те­ля, груп­пы и дру­гих. Linux не поз­во­ля­ет созда­вать файл с раз­ре­ше­ни­я­ми на выполнение.

Раз­ре­ше­ния на созда­ние по умол­ча­нию мож­но изме­нить с помо­щью ути­ли­ты umask.

umask вли­я­ет толь­ко на теку­щую сре­ду обо­лоч­ки. В боль­шин­стве дис­три­бу­ти­вов Linux зна­че­ние umask по умол­ча­нию для всей систе­мы уста­нав­ли­ва­ет­ся в фай­ле pam_umask.so или /etc/profile.

Если вы хоти­те ука­зать дру­гое зна­че­ние для каж­до­го поль­зо­ва­те­ля, отре­дак­ти­руй­те фай­лы кон­фи­гу­ра­ции обо­лоч­ки поль­зо­ва­те­ля, такие как ~/.bashrc или ~/.zshrc. Вы так­же може­те изме­нить теку­щее зна­че­ние umask, выпол­нив umask с после­ду­ю­щим жела­е­мым значением.

Что­бы про­смот­реть теку­щее зна­че­ние мас­ки, про­сто вве­ди­те umask без аргументов:

Вывод будет включать

Это зна­че­ние umask содер­жит биты прав досту­па, кото­рые НЕ будут уста­нов­ле­ны во вновь созда­ва­е­мых фай­лах и каталогах.

Как мы уже упо­ми­на­ли, раз­ре­ше­ния на созда­ние фай­лов по умол­ча­нию 666 и для ката­ло­гов 777. Что­бы вычис­лить биты прав досту­па для новых фай­лов, вычти­те зна­че­ние umask из зна­че­ния по умолчанию.

Напри­мер, что­бы рас­счи­тать, как uname 022 повли­я­ет на вновь создан­ные фай­лы и ката­ло­ги, используйте:

  • Фай­лы: 666 – 022 = 644. Вла­де­лец может читать и изме­нять фай­лы. Груп­па и дру­гие могут толь­ко читать файлы.
  • Ката­ло­ги: 777 – 022 = 755. Вла­де­лец может перей­ти в ката­лог и про­смот­реть спи­сок, изме­нить, создать или уда­лить фай­лы в каталоге.

Вы так­же може­те отоб­ра­зить зна­че­ние мас­ки в сим­во­ли­че­ской запи­си, исполь­зуя опцию -S:

В отли­чие от чис­ло­вой запи­си, зна­че­ние сим­во­ли­че­ской запи­си содер­жит биты прав досту­па, кото­рые будут уста­нов­ле­ны во вновь созда­ва­е­мых фай­лах и каталогах.

 

Мас­ка созда­ния фай­ла может быть уста­нов­ле­на ​​с исполь­зо­ва­ни­ем вось­ме­рич­ной или сим­во­ли­че­ской запи­си. Что­бы сде­лать изме­не­ния посто­ян­ны­ми, уста­но­ви­те новое зна­че­ние umask в гло­баль­ном фай­ле кон­фи­гу­ра­ции, таком как файл /etc/profile, кото­рый будет вли­ять на всех поль­зо­ва­те­лей, или в фай­лах кон­фи­гу­ра­ции обо­лоч­ки поль­зо­ва­те­ля, таких как ~/.profile, ~/.bashrc или ~/.zshrc кото­рые будут вли­ять толь­ко на поль­зо­ва­те­ля. Поль­зо­ва­тель­ские фай­лы име­ют при­о­ри­тет над гло­баль­ны­ми файлами.

Преж­де чем вно­сить изме­не­ния в зна­че­ние umask, убе­ди­тесь, что новое зна­че­ние не пред­став­ля­ет потен­ци­аль­ной угро­зы без­опас­но­сти. Зна­че­ния менее стро­гие, чем 022 сле­ду­ет исполь­зо­вать с боль­шой осто­рож­но­стью. Напри­мер, umask 000 озна­ча­ет, что любой поль­зо­ва­тель будет иметь пра­ва на чте­ние, запись и выпол­не­ние для всех вновь созда­ва­е­мых файлов.

Допу­стим, мы хотим уста­но­вить более стро­гие раз­ре­ше­ния для вновь созда­ва­е­мых фай­лов и ката­ло­гов, что­бы дру­гие не мог­ли обра­щать­ся cd к ката­ло­гам и читать фай­лы. Раз­ре­ше­ния, кото­рые мы хотим, 750 для ката­ло­гов и 640 для файлов.

Что­бы вычис­лить зна­че­ние umask, про­сто вычти­те тре­бу­е­мые раз­ре­ше­ния из раз­ре­ше­ния по умолчанию:

Umask зна­че­ние: 777-750 = 027

Жела­е­мое зна­че­ние umask, пред­став­лен­ное в чис­ло­вой запи­си 027.

Что­бы навсе­гда уста­но­вить новое зна­че­ние для всей систе­мы, открой­те файл /etc/profile в тек­сто­вом редакторе:

и изме­ни­те или добавь­те сле­ду­ю­щую стро­ку в нача­ле фай­ла /etc/profile:

Что­бы изме­не­ния всту­пи­ли в силу, выпол­ни­те сле­ду­ю­щую sourceко­ман­ду или вый­ди­те из систе­мы и вой­ди­те в систему:

Для про­вер­ки новых настро­ек мы созда­дим один новый файл и ката­лог, исполь­зуя mkdir и touch:

Если вы про­ве­ри­те раз­ре­ше­ния с помо­щью коман­ды ls, вы заме­ти­те, что новый файл име­ет 640 и новый ката­лог 750 раз­ре­ше­ний, как мы хотели:

Дру­гой спо­соб уста­но­вить мас­ку созда­ния фай­ла – исполь­зо­вать сим­во­ли­че­скую запись. Напри­мер так umask u=rwx, g=rx, o= тоже же, как umask 027.

 

В этой ста­тье мы объ­яс­ни­ли пра­ва досту­па Linux и как исполь­зо­вать коман­ду umask для уста­нов­ки битов раз­ре­ше­ний для вновь созда­ва­е­мых фай­лов или каталогов.

Для полу­че­ния допол­ни­тель­ной инфор­ма­ции вве­ди­те man umask в сво­ем терминале.